[...]
ACHTUNG: Dieser Mod geht nur für Shops, welche die gunnART Categoriebox (Advanced Show Category 2.0 für xt:Commerce) eingebaut haben!
/*
GUNNART "SHOW_CATEGORY ADVANCED"
erweiterte Kategorien-Navigation für xt:Commerce 3.04 SP1 / SP2.1
Proudly togetherfummeled by Gunnar Tillmann
http://www.gunnart.de
Version 2.0 Beta 3 / April 2008
*/
Wir haben 1200 Kategorien und das Erstellen der Kategorie-Box hat alleine 8-10 Sekunden gedauert. Laut Debugging wurden dabei rund 7000 Querries verursacht!
Ich habe mir ein eigenes Caching Modul für diverse Boxen geschrieben was die Abfragen umging. Aber nur solange niemand eine Kategorie ohne Cache aufrief, bzw. der Cache nicht abgelaufen war.
Also habe ich mir mal den Quellcode der Kategorie-Box angeschaut. Dort werden alle Kategorien abgefragt und dann abgearbeitet. Auch wenn man im Hauptverzeichnis ist und nur die (bei uns 10) Hauptkategorien abarbeiten müsste.
Daher habe ich den Code dahin gehend erweitert, das er nur die Hauptkategorien und alle Kategorien die im cPath angegeben sind ausliest und abarbeitet. Der Geschwindigkeitsvorteil bei vielen Kategorien ist enorm!
Bearbeitet werden muss die Datei "
/source/boxes/categories.php" im aktuellen Template:
Ersetze:$categories_query = "select c.categories_id,
cd.categories_name,
c.parent_id from ".TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd
where c.categories_status = '1'
and c.parent_id = '0'
".$group_check."
and c.categories_id = cd.categories_id
and cd.language_id='".(int) $_SESSION['languages_id']."'
order by sort_order, cd.categories_name";
$categories_query = xtDBquery($categories_query);
Durch:// Nur in beteiligten Kategorien suchen$cPath_array = array_filter(explode('_', trim($GLOBALS['cPath'])));$cPath_array[] = 0; // Root immer anzeigen$cat_filter_cPath = implode(', ', $cPath_array);$categories_query = "select c.categories_id,
cd.categories_name,
c.parent_id from ".TABLE_CATEGORIES
." c, ".TABLE_CATEGORIES_DESCRIPTION
." cd
where
c.parent_id in (" . $cat_filter_cPath . ")
and c.categories_status = '1'
".$group_check."
and c.categories_id = cd.categories_id
and cd.language_id='".(int
) $_SESSION['languages_id']."'
order by sort_order, cd.categories_name";$categories_query = xtDBquery
($categories_query); Es lohnt sich generell diese vielen überflüssigen Abfragen und die daraus resultierenden Unterabfragen (Anzahl der Artikel, ...) auszuschalten. Allerdings wird man mit wenigen Kategorien keinen großen Geschwindigkeitszuwachs erzielen.
[
EDIT Tomcraft 16.05.2011: Fehler im Code
korrigiert.]
[
EDIT Web28 17.05.2011: Dateiversion hinzugefügt.]
Linkback: https://www.modified-shop.org/forum/index.php?topic=12890.0