Diejenige, die nur ein Paar Kategorien im Shop haben, können ruhig dieses Thema auslassen.
Im Shop etwa 10000 Kategorien insgesamt. templates/v2next-boot-flat/source/boxes/cat_nav.ph wird bei relativ größerer Kategorienanzahl einfach Perfomance-Killer. Mit der Kategorien im Navigationsbereich ist es mir nie gelungen, den Antwort von Shop zu bekommen. Einfach down.
1. line 324 in xtc_show_category_superfish method
// Unterkategorien durchsteppen
foreach ($foo as $key => $value) {
if ($foo[$key]['parent'] == $cid) {
...
xtc_show_category_superfish($key, $level + 1, $foo, ($level != 0 ? $cpath . $cid . '_' : ''));
Erstens, im Falle, dass alle Kategorien irgendeinen Parent haben (mein Fall), wird xtc_show_category_superfish für jede Unterkategorie rekursiv aufgerufen. Gesamte Iterationenanzahl liegt etwa bei 10000 * 10000 = 100000000.
Zweitens, man hat bereits ein Array $foo[$cat_id]['subcats'], wo alle Unterkategorien aufgelistet sind.
2. line 494 in initCategoryLink method
Beim Aufruf von xtc_category_link wird intern die Methode xtc_get_parent_categories aufgerufen. Da ist der Code davon:
function xtc_get_parent_categories(&$categories, $categories_id) {
$parent_categories_query = xtDBquery("SELECT parent_id FROM " . TABLE_CATEGORIES . " WHERE categories_id = '" . (int) $categories_id . "';");
while ($parent_categories = xtc_db_fetch_array($parent_categories_query)) {
if ($parent_categories['parent_id'] == 0) {
return true;
}
$categories[sizeof($categories)] = $parent_categories['parent_id'];
if ($parent_categories['parent_id'] != $categories_id) {
xtc_get_parent_categories($categories, $parent_categories['parent_id']);
}
}
}
Alles anzeigen
Je nach Tiefe von Kategorienbaum kommen Zehntausende Zugriffe auf die Datenbank.
Es gibt bestimmt noch weitere Punkte. Keine Lust zu analysieren. Das Prinzip von Darstellen der Kategorien im Navigationsbereich ist einfach falsch. Wozu muss man ALLE Kategorien zum User drüber schaufeln? To Admin: Werfe einen Blick in Kategorienbox. Dort ist es richtig. Schlüsselwort: "on demand" und für Navigationsbereich zusäzlich noch "ajax".