Ich versuche, 4 zufällige Produkte mit PHP in einer von mir erstellten TPL-Datei auf die Homepage zu bringen. Ich möchte in der Lage sein, die Produkte in einer foreach-Schleife zu formatieren, da ich einige Formatierungen im folgenden Code verwende ...
<div class="three columns">
<div class="product_container no_border">
<div class="product">
<a href="product_page.html"><img src="<?php echo $this->getSkinUrl('images/products/place_holder.jpg'); ?>" alt=" "></a>
</div>
<div class="product_title">
<a href="product_page.html">240 Serving Package</a>
</div>
<div class="price_hp">$454.99</div>
<div class="free_shipping">
<div class="fs"></div>
Free shipping for this package
</div>
<div class="shop_btn">
<a href="#">ADD TO CART</a>
</div>
</div>
</div>
Ich habe ein paar Dinge ausprobiert, die bei Google gefunden wurden, aber noch kein Glück. Das Festlegen von Kategorien in einem Array würde sicherlich für das funktionieren, was ich versuche, aber es würde auch funktionieren, wenn die Kategorien zufällig wären.
Vielen Dank!
collection
cms
product-list
product-collection
random
Brian Schroeter
quelle
quelle
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
? Scheint nichts zu tun.Block für zufällige Produkte erstellen
Sie sollten ein benutzerdefiniertes Modul mit einem neuen Blocktyp erstellen. Ich würde eine Erweiterung empfehlen.
Mage_Catalog_Block_Product_List
Wenn das Standardlayout der Produktliste für Sie ausreicht, müssen Sie nicht einmal Ihre eigene Vorlage entwerfen.Dann überschreiben
_getProductCollection()
oder wenn Sie nicht erweitern,Mage_Catalog_Block_Product_list
schreiben Sie eine neue öffentliche MethodegetProductCollection()
.So bereiten Sie die Produktkollektion auf diese Weise vor:
Sammlungsfilter
Erstellen Sie zunächst die Sammlung und wenden Sie den Standardfilter an (im Katalog sichtbar und im aktuellen Store verfügbar):
Performante Zufallsauswahl
ORDER BY RAND()
ist bei großen Tabellen nicht leistungsfähig, da dies zu einer ressourcenintensiven temporären Tabellenkopie führt. Es muss alle Ergebnisse in eine temporäre Tabelle laden, jeder Zeile eine Zufallszahl zuweisen und dann ohne Index sortieren. Stattdessen rufen wir alle IDs ab (dies ist schneller und die Datenmenge ist auch für große Kataloge verwaltbar), wählen einige zufällig aus und rufen diese Zeilen direkt ab.Fügen Sie dazu diesen Code ein, nachdem die Filter für die Sammlung angewendet wurden:
Sie können darüber ausführlich in meinem Blog lesen: http://www.schmengler-se.de/de/2015/09/show-random-products-in-magento-you-are-doing-it-wrong/
Erforderliche Attribute abrufen
Anschließend geben wir die zu ladenden Attribute an und verknüpfen Preis- und URL-Indizes, um den richtigen Preis und die richtige Produkt-URL anzeigen zu können:
Zu guter Letzt geben Sie die Sammlung zurück:
Diese Sammlung kann jetzt in
Mage_Catalog_Block_Product_List
Blöcken oder in Ihrer eigenen Vorlage verwendet werden,foreach ($this->getProductCollection() as $product)
wie in Marius 'Antwort.Benutzerdefinierten Block in CMS einfügen
Verwenden Sie diesen Code, um den Block in Ihre Homepage einzufügen,
your/block
wobei der Alias für Ihre Blockklasse gilt:Geben Sie bei Bedarf Ihre eigene Vorlage an.
column_count
wird verwendet vonMage_Catalog_Block_Product_List
.Anmerkungen
Alternativ können Sie den gesamten PHP-Code von oben in Ihre Vorlage einfügen. Dies ist jedoch ziemlich chaotisch und verstößt gegen die Codierungsstandards und Best Practices von Magento.
Anscheinend wird Magento mit einem eigenen vordefinierten Blocktyp geliefert
catalog/product_list_random
, der jedoch verwendetorder('rand()')
wird. Daher werde ich ihn aus den oben erläuterten Leistungsgründen nicht empfehlen.quelle
Sie können versuchen, die gesamte Produktsammlung in einen benutzerdefinierten Block zu laden und
array_rand
die 5 IDs auszuwählen, die an die TPL-Datei zurückgegeben werden.http://php.net/manual/en/function.array-rand.php
quelle