#1792 closed Neues Feature (fixed)
alsoPurchased Produkte im Backend deaktivierbar machen
| Reported by: | noRiddle | Owned by: | somebody |
|---|---|---|---|
| Priority: | normal | Milestone: | modified-shop-2.0.5.1 |
| Component: | Shop | Version: | 2.0.5.0 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Da Produkt-Module wie MODULE_also_purchased Resourcen verbrauchen, manche dies aber nicht benutzen möchten, wäre es schön wenn man das Laden des Modules und seinen Verarbeitungs-Code im Backend deaktivierbar machen würde.
Bislang kann man das Modul update-sicher lediglich im Template auskommentieren, die Queries und die Smarty-Generierungen laufen dann aber ja trotzdem im Hintergrund.
Es gab gerade (wieder) einen Wunsch das Modul "rauszuwerfen":
"Kunden, die diesen Artikel kauften, haben auch ..." ausblenden
Evtl. wäre das auch für Cross-Selling interesant.
Gruß,
noRiddle
Attachments (0)
Change History (7)
comment:1 by , 6 years ago
comment:2 by , 6 years ago
| Milestone: | → modified-shop-2.0.5.1 |
|---|---|
| Version: | → 2.0.5.0 |
comment:6 by , 6 years ago
Weiß nicht wie Ihr's gelöst habt.
Zur Info und gravierender Performance-Verbesserung:
Hatte gerade einen Kunden der nur einen Artikel hat, der natürlich ständig verkauft wird.
Die alsoPurchased hat den Aufruf der product_info bis auf über 7 Sek. verzögert.
Nach einer neuen if-Clause
if(MIN_DISPLAY_ALSO_PURCHASED > 0) { added if-clause, noRiddle
$data = $product->getAlsoPurchased();
if (count($data) >= MIN_DISPLAY_ALSO_PURCHASED) {
$module_smarty->assign('language', $_SESSIONlanguage);
$module_smarty->assign('module_content', $data);
set cache ID
$module_smarty->caching = 0;
$module = $module_smarty->fetch(CURRENT_TEMPLATE.'/module/also_purchased.html');
$info_smarty->assign('MODULE_also_purchased', $module);
}
}
in /includes/modules/also_purchased_products.php kann man im Backend mittels Setzen von MIN_DISPLAY_ALSO_PURCHASED auf 0 die Ausführung des Codes unterbinden und das Problem somit beheben.
Allerdings ist die Programmatik in der Funktion getAlsoPurchased() der product-Class auch nicht gut geschrieben, da in einem while-Loop die Queries für die Produkt-Daten gemacht werden. Wenn ein Produkt also in mehreren Bestellungen auftaucht wird die Query im while-Loop auch mehrfach durchgeführt, was, um ein und dasselbe Produkt nicht mehrfach zu bekommen, erst in der Query im while-Loop durch GROUP BY abgefangen wird.
Ein simples LIMIT 1 in der 1. Query würde das verhindern:
$orders_query = "SELECT orders_id
FROM ".TABLE_ORDERS_PRODUCTS."
WHERE products_id = '".(int)$pID."'
ORDER BY orders_id DESC
LIMIT 1";
und würde auch das GROUP BY in der Query im while-Loop obsolet machen.
Korrekt ?
Gruß,
noRiddle
comment:7 by , 6 years ago
bzgl. deaktivieren der also purchased Artikel haben wir genau so gelöst.
Deine Limitierung des ersten SQL mit LIMIT 1 verursacht dass nur von 1 Bestellung die Artikel geholt werden die auch gekauft wurden.
Wir schauen aber gerne nochmals ob wir an der Stelle die Performance verbessern können.

Könnte man vielleicht einfach mittels der Abfrage nach MAX_DISPLAY_ALSO_PURCHASED in der Funktion getAlsoPurchased() der product-Class machen.
Also:
if(MAX_DISPLAY_ALSO_PURCHASED > 0) { ... }Gruß,
noRiddle