Hallo zusammen,
scheine es geschafft zu haben. Keine Ahnung, ob es wirklich 100%tig funktioniert und vielleicht auch einfacher/besser geht, aber es scheint zu funktionieren.
Hier mein Lösungsweg, falls es einer von euch auch gebrauchen kann.
Folgende Dateien müssen angepasst werden:
- /specials.php
- /products_new.php
- /advanced_search_result.php
- /includes/modules/default.php
- /includes/modules/listing_filter.php
/specials.php & /products_new.php & /advanced_search_result.phpErsetze jeweils:
$filter_join .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
Durch:
if($values_id == "OHNE")
{
$where .= " AND NOT EXISTS (SELECT pt_temp.options_id FROM ".TABLE_PRODUCTS_TAGS." pt_temp WHERE pt_temp.products_id = p.products_id AND pt_temp.options_id = '".(int)$options_id."')";
$filter_join .= "LEFT JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."' ";
}
else
{
$filter_join .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
}
Bei
/advanced_search_result.php zusätzlich noch:
Nach der Zeile :
$filter_join = '';
Einfügen:
$where = "";
/includes/modules/default.phpErsetze:
$from .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
Durch:
if($values_id == "OHNE")
{
$where .= " AND NOT EXISTS (SELECT pt_temp.options_id FROM ".TABLE_PRODUCTS_TAGS." pt_temp WHERE pt_temp.products_id = p.products_id AND pt_temp.options_id = '".(int)$options_id."')";
$from .= "LEFT JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."' ";
}
else
{
$from .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
}
/includes/modules/listing_filter.phpNach der Zeile:
$filter_join = '';
Einfügen:
$where = '';
Ersetze:
$filter_join .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
Durch:
if($values_id == "OHNE")
{
$where = " AND NOT EXISTS (SELECT pt_temp.options_id FROM ".TABLE_PRODUCTS_TAGS." pt_temp WHERE pt_temp.products_id = p.products_id AND pt_temp.options_id = '".(int)$options_id."')";
$filter_join .= "LEFT JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."' ";
}
else
{
$filter_join .= "JOIN ".TABLE_PRODUCTS_TAGS." pt".$fi."
ON pt".$fi.".products_id = p.products_id
AND pt".$fi.".options_id = '".(int)$options_id."'
AND pt".$fi.".values_id = '".(int)$values_id."' ";
}
Ergänze nach:
if (isset($_GET['filter'][$options_id]) && $_GET['filter'][$options_id] != '') { $options_array = array (array ('id' => '', 'text' => $values['NAME'] . TEXT_SHOW_ALL
)); } else { $options_array = array (array ('id' => '', 'text' => $values['NAME'])); } Folgendes:
$options_array[] = array ('id' => 'OHNE', 'text' => "Ohne ".$values['NAME']); Ändere:
$filter_dropdown[$options_id] .= xtc_draw_pull_down_menu
('filter['.$options_id.']', $options_array, isset($_GET['filter'][$options_id]) ?
(int
)$_GET['filter'][$options_id] : '', 'onchange="this.form.submit()"').PHP_EOL
; In:
$filter_dropdown[$options_id] .= xtc_draw_pull_down_menu
('filter['.$options_id.']', $options_array, isset($_GET['filter'][$options_id]) ?
$_GET['filter'][$options_id] : '', 'onchange="this.form.submit()"').PHP_EOL
; Nun kann neben den üblichen Filtern auch immer "Ohne
- " ausgewählt werden und es wird auf alle Artikel gefiltert, welche diese Eigenschaft gar nicht haben.
Ergänzungen/Korrekturen/Verbesserungen liebend gerne, weil wirklich intensiv habe ich mich nicht mit dem Code des Shops befasst... war jetzt "try and error".
Viele Grüße,
Christian