Es gibt einige Module für xt:Commerce “Zufallsprodukte auf der Startseite anzeigen” oder Ähnliches - Mir persönlich gefallen die nicht so sehr, da man für deren Installation meistens im System herumbasteln muss.

Daher habe ich eine Smarty-Function geschrieben, mit der man derlei Geschichten direkt im Template hinbekommen kann. Ein weiterer Vorteil: Diese Funktion ist in jeder .html-Datei des xt:Commerce-Templates einsetzbar.

gunnartProductsList:

Diese Funktion füllt eine Smarty-Variable mit einer Artikelliste. Dabei gibt’s mehrere Einstellungsmöglichkeiten, die u.a. dafür sorgen, dass nur soundsoviele Produkte gelistet werden, dass nur Sonderangebote gezeigt werden, dass nur Artikel aus einer bestimmten Kategorie gefunden werden - Eine Sortierung nach Name, Preis, Einstellungs-Datum oder per Zufall ist ebenfalls möglich.

Download und Installation:

  1. Dieses » Zip-Archiv (Version 1.0)
    Dieses » Zip-Archiv (Version 1.1)
    Dieses » Zip-Archiv (Version 1.2)
    Dieses » Zip-Archiv (Version 1.3)
    Dieses » Zip-Archiv (Version 1.3b, BugFix!)
    Dieses » Zip-Archiv (Version 1.3c, Noch ein BugFix!)
    Dieses » Zip-Archiv (Version 1.3d, Jetzt mit Shipping-Time)
    herunterladen und entpacken
  2. Legen Sie einen zusätzlichen PlugIn-Ordner für Ihr Template fest
    (Eine Anleitung dazu finden Sie » hier …)
  3. Speichern Sie die Datei “function.gunnartProductsList.php” in diesem Ordner ab
  4. Danach kann {gunnartProductsList} im Template benutzt werden

Anwendung im Template:

Ein Beispiel zum Einstieg: Die Anweisung {gunnartProductsList to=Liste} befüllt die Variable {$Liste.PRODUCTS} mit komplett allen Artikeln aus dem Shop. Damit kann man dann die übliche foreach-Schleife stricken:


{foreach item=module_data from=$Liste.PRODUCTS}
<h4><a href="{$module_data.PRODUCTS_LINK}">{$module_data.PRODUCTS_NAME}</a></h4>
<p><img src="{$module_data.PRODUCTS_IMAGE}" alt="{$module_data.PRODUCTS_NAME}" /></p>
... und so weiter ...
... alle Tags (auch Beschreibung, VPE etc.) sind in $module_data enthalten ...
{/foreach}
	

Okay, so eine Liste kann reichlich lang werden, daher sollte man natürlich weitere Parameter einsetzen - es folgen ein paar (sinnvollere) Beispiele:

{gunnartProductsList to=Liste specials=true limit=10}
–> Findet maximal 10 Sonderangebote aus allen Kategorien

{gunnartProductsList to=Liste top=true order=price sort=desc}
–> Findet ausschließlich Artikel mit Status “top” und sortiert sie nach Preis - die teuersten zuerst

{gunnartProductsList to=Liste cat=37 order=rand limit=20}
–> Findet 20 Artikel in zufälliger Reihenfolge aus der Kategorie mit ID 37
–> Zusätzlich wird der Kategorien-Name in
{$Liste.CATEGORY.name} geschrieben
–> Entsprechend auch der Kategorien-Link in
{$Liste.CATEGORY.link}

Die Parameter:

  • to=Liste
    Der Name der Smarty-Variablen, die gefüllt werden soll. Ist to leer, wird {$PRODUCTS_LIST} gewählt.
    Die foreach-Schleife von oben wäre in dem Fall dann nicht mit from=$Liste.PRODUCTS sondern mit from=$PRODUCTS_LIST.PRODUCTS zu bilden.
  • limit=15
    Maximale Anzahl von Produkten. Ist limit leer, gibt es keine Beschränkungen.
  • specials=true
    Damit werden ausschließlich Sonderangebote gefunden.
  • top=true
    Damit werden ausschließlich “Top”-Angebote gefunden.
  • order=name
    Der erste Sortier-Parameter. Mögliche Werte: price, date, name, rand - also Sortierung nach Preis, Artikelname, Einstellungs-Datum oder zufällige Sortierung.
  • sort=desc
    Der zweite Sortier-Parameter. Mögliche Werte: asc und desc - für “aufsteigend” oder “absteigend”. Ist sort leer, wird aufsteigend sortiert.
    Falls eine zufällige Reihenfolge (order=rand) eingestellt ist, wird sort ignoriert - dann macht “auf-” oder “absteigend” ja auch wenig Sinn …
  • cat=123
    Die Kategorien-ID der Kategorie, in der die Produkte gesucht werden sollen. Ist cat leer, wird in allen Kategorien gesucht.
    Übrigens: Falls in {gunnartProductsList} keine der oben genannten Sortier-Parameter angegeben sind, wird nach den “Sortierregeln” sortiert, die man im Admin-Bereich für diese Kategorie festgelegt hat. Sollten dort ebenfalls keine Regeln bestimmt sein, wird nach Artikelname (aufsteigend) sortiert.
  • except=12 (Neu in Version 1.1)
    “Ausnahme” - Artikel mit dieser Produkt-ID werden nicht gefunden. Wozu man das gebrauchen kann - siehe »weiter unten
  • image=true (Neu in Version 1.2)
    Damit wird nur nach Artikeln mit einem Produktbild gesucht.
  • manu=4 (Neu in Version 1.3)
    Damit wird nur nach Artikeln vom Hersteller mit der ID 4 gesucht.
  • nospecials=true (Neu in Version 1.3)
    Ignoriert alle Sonderangebote.
    Das kann man z.B. gebrauchen, wenn man auf der Startseite erst 5 zufällig ausgewählte Sonderangebote zeigen möchte, darunter dann die neuesten 20 Artikel im Shop. So vermeidet man, dass Artikel doppelt gezeigt werden.

Hinweise:

Die Reihenfolge, in der man die Parameter eingibt, ist egal.
Die Anweisung {gunnartProductsList to=Liste cat=37 limit=10}
führt zum selben Ergebnis wie {gunnartProductsList limit=10 cat=37 to=Liste}

Kombinationen sind möglich, diese hier zum Beispiel …
{gunnartProductsList to=Liste specials=true top=true cat=37}
… findet nur die “Top”-Sonderangebote aus Kategorie 37

Der Kundengruppen-Check und die FSK-Kontrolle werden beachtet - ebenso werden nur aktive Artikel gefunden.


Noch eine Anregung zum Basteln:
(9. Juni 2009, nachts)

Wie in allen Smarty-Funktionen müssen die Werte von Parametern nicht unbedingt fix eingetragen werden, man kann dazu auch Smarty-Variablen verwenden.

Dazu ein Beispiel: Angenommen, man möchte in der Artikel-Detail-Ansicht vier zufällige Sonderangebote aus der selben Kategorie des Artikels anzeigen - Natürlich sollte der momentan gewählte Artikel nicht mit dabei sein - Das ist kein Problem.

Zunächst greifen wir uns die “product_info_v1.html” und schreiben dort global $current_category_id und global $actual_products_id in zwei Smarties …

{php}
global $current_category_id, $actual_products_id;
$this->assign('CatID',$current_category_id);
$this->assign('ProdID',$actual_products_id);
{/php}

… diese nutzen wir dann im Funktions-Aufruf …


{gunnartProductsList to=Liste cat=$CatID specials=true except=$ProdID order=rand limit=4}
{foreach item=module_data from=$Liste.PRODUCTS}
<h4><a href="{$module_data.PRODUCTS_LINK}">{$module_data.PRODUCTS_NAME}</a></h4>
... und so weiter ...
{/foreach}
	

… und so wird die Kategorie $CatID nach Sonderangeboten durchsucht, die nicht (weil: haben wir ja schon) die Produkt-ID $ProdID haben, Reihenfolge: Zufall, maximale Anzahl: vier.

 

Viel Spaß damit!