Die “meistverkauften Produkte” in einem Shop sind sicherlich interessant, aber die Bestsellers-Box von xt:Commerce betreibt da ein bisschen “Archäologie”. Es ist sehr wahrscheinlich, dass der älteste Artikel im Shop auch einer der meistverkauftesten ist.

Das muss muss natürlich nicht heißen, dass dieser Artikel wirklich momentan der “Renner” ist. Wissen wir alle. Vielleicht ist sogar im letzten Monat von diesem Uralt-Artikel nicht ein einziger verkauft worden, trotzdem steht er in der “Bestsellers-Liste” vor einem neuen Trend-Produkt, das womöglich viel besser angelaufen ist.

Und wenn man richtig Pech hat, taucht das neue Trend-Produkt sogar überhaupt nicht in der Bestsellers-Liste auf - und das bloß, weil 10 “olle Kammellen”, die seit Shop-Launch vor zwoeinhalb Jahren dabei waren, insgesamt öfter verkauft worden sind. Was Wunder …

Dieses Verhalten macht die Standard-Bestsellers-Box ein wenig langweilig.

 

Spannender wäre es, eine Aufstellung der meistverkauften Produkte aus der letzten Woche / aus dem letzten Monat / dem letzten Quartal o.ä. ausgeben zu lassen. Denn da tut sich einfach mehr.

Bei jedem Verkauf addiert xt:Commerce in der “products”-Tabelle die Anzahl der verkauften Artikel zum passenden Wert in der Spalte “products_ordered” - Das Datum wird dabei nicht berücksichtigt - Muss es auch nicht, dazu ist die “products”-Tabelle auch nicht da. Nur wird eben aus diesen Daten gemeinhin die Bestsellers-Box “bestückt”.

 

Wenn man also in seiner Bestsellers-Box die meistverkauften Artikel der letzten 30 Tage anzeigen möchte, muss man die “bestsellers.php” im Template ein bisschen anders aufziehen - und zunächst in der “orders”-Tabelle die order_id’s der letzten 30 Tage heraussuchen. Denn mit der “products” allein kommt man nicht weit.

Ist ein bisschen Fummelkram - Und ich hätte es ganz gerne in einer einzigen DB-Abfrage geregelt, aber irgendwie hat sich die Kiste dabei dauernd verzählt. Momentan gibt’s hier also nur die nicht ganz so schöne Variante (Sorry): Erst alle order_id’s ermitteln, danach in einer Schleife die verkauften Produkte aus jeder Bestellung zählen und aufaddieren …

Das braucht ein wenig länger, dafür stimmen die Ergebnisse :-)

Der Fehler ist gefunden, in Version 0.2 klappt’s nun auch ohne Schleife.

 

Die “Installation” ist ganz einfach:

  • Diese » Zip-Datei herunterladen und entpacken
    Diese » Zip-Datei herunterladen und entpacken (für xt:C 3.04 SP2.1)
    Diese » Zip-Datei herunterladen und entpacken (für xt:C 3.04 SP1)
  • “meinShop.de/templates/meinTemplate/source/boxes/bestsellers.php” mit der neuen “bestsellers.php” austauschen
  • Und fertig

 

Einstellungs-Möglichkeiten:

  • $BestsellerDays - Dort die Zahl eintragen, wie viele Tage in der Bestsellers-Box berücksichtigt werden sollen
  • $CatDependant - Wenn true werden die Bestsellers aus der jeweils aktiven Kategorie gezählt, wenn false, werden alle Bestsellers gezählt

Bestsellers-Box für Admins
(Screenshot: Bestsellers-Box für Admins)

Weitere Hinweise:

  • Es werden nur aktive und für die jeweilige Kundengruppe zugelassene Produkte gefunden
  • Im Gegensatz zu der Bestsellers-Box aus dem Standard-Template “xtc4″ werden nur Produkte aus aktiven und zugelassenen Kategorien gefunden
  • Wenn Smarty-Caching aktiviert ist, werden (im Gegensatz zur Standard-Box) Währung und “inkl. oder exkl. Steuer”-Preise berücksichtigt
  • Als kleines “Bonbon” sehen eingeloggte Admins neben dem Artikelnamen die Anzahl der im eingestellten Zeitraum verkauften Produkte
  • Nachtrag: Es werden (in der Version für xt:C 3.04 SP2.1) alle Smarty-Tags generiert, die ein product-Objekt haben kann. Wer mag, kann in der Bestsellers-Box z.B. auch die Kurzbeschreibung o.ä. anzeigen lassen

 

Tipp:

In der “bestseller.php” wird eine Konstante “BESTSELLER_DAYS” definiert.
Diesen Wert kann man z.B. in der “box_best_sellers.html” für Angaben à la
Unsere Bestseller der letzten {$smarty.const.BESTSELLER_DAYS} Tage
oder Ähnliches einsetzen.