﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking
1671	Listing-Filter: Performance und unsinnige Query	noRiddle	somebody	"In der Template-Datei zum Listing-Filter (''/templates/tpl_modified/module/listing_filter.html'') wird mittels folgendem Code
{{{
{if count($FILTER_TAG) < 1 && $FILTER_MANUFACTURER != ''}<div class=""sort_bar_item"">{$FILTER_MANUFACTURER}</div>{/if}
}}}
conditional das Hersteller-Dropdown angezeigt oder eben nicht.
Der Code zu dem $FILTER_MANUFACTURER in der ''/includes/modules/listing_filter.php'' wird jedoch immer ausgeführt.
Das halte ich für ein Performance-Manko. Man sollte die Condition in den PHP-Code einbauen, sodaß der Code erst gar nicht ausgeführt wird wenn
{{{
count($filter_dropdown) < 1
}}}

Der Sinn dieser Condition entzieht sich allerdings ohnehin meinem Verständnis.
Lediglich wenn man products_tags bzgl. Hersteller angelegt hätte würde ich die Condition verstehen.
Aber das ist ein Nebenthema.

Es gibt im Code des Listing-Filters allerdings noch ein anderes Problem.
Wir haben diesen Code:
{{{
  $filter_join = '';
  if (isset($_GET['filter']) && is_array($_GET['filter'])) {
    $fi = 1;
    foreach ($_GET['filter'] as $options_id => $values_id) {
      if ($values_id != '') {
        $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.""' "";
        $fi ++;
      }
    }
  }
}}}

Die Nutzung von ''$filter_join'' in der Query die Manufacturers betreffend ist nachvollziehbar.
Was allerdings die Query für die Filter betrifft ist die Verwendung nicht nachvollziehbar.
Das hat zwei Gründe:
1. gibt es damit zwei JOINs auf TABLE_PRODUCTS_TAGS, was, wenn man meint das so haben zu wollen, man so umschreiben sollte, daß es den JOIN nur einmal gibt, eben je nach Fall
{{{
     ON pt.products_id = p.products_id
}}}
    oder eben
{{{
     ON pt"".$fi."".products_id = p.products_id
    AND pt"".$fi."".options_id = '"".(int)$options_id.""'
    AND pt"".$fi."".values_id = '"".(int)$values_id.""' ""
}}}
    aber nicht beides.
2. stellt sich die Frage warum das Zweitgenannte überhaupt gemacht wird.
    Es ist für den Kunden verwirrend wenn er einen Wert aus einem Filter-Dropdown ausgewählt hat und dann in diesem Dropdown nur noch den ausgewählten Wert sieht,
    zusätztlich zu ""''NAME (alle anzeigen)''"" versteht sich, 
    anstatt nach wie vor alle Optionen inkl. des ""''NAME (alle anzeigen)''"".
    Wenn man nämlich seine Wahl verändern möchte benötigt es zwei Klicks anstatt eines einzigen.
    Das habe ich so wie es jetzt ist auch noch nirgends gesehen.

    Gibt es einen Grund das so zu machen den ich nicht kenne ?

Gruß,
noRiddle"	Aufgabe	closed	normal		Shop	trunk	invalid				
