2013-05-10 5 views
7

Ich zeige verwandte Produkte in Inhalt Block des Layouts in der Produktansicht Seite. Mein Code in catalog.xml ist:Wie zeigt man nur 3 verwandte Produkte auf der Produktansichtsseite, Magento?

<reference name="content"> 
    <block type="catalog/product_list_related" name="catalog.product.related" after="-" template="catalog/product/list/related.phtml"/> 
</reference> 

nun alle Produkte in meiner Produktansicht Seite angezeigt werden, aber ich will nur 3 Produkte angezeigt werden, Was soll ich tun? Bitte, kann jemand helfen?

Antwort

9

Sie müssen die Vorlagendatei catalog/product/list/related.phtml bearbeiten und die Schleife so beschränken, dass nur 3 Produkte durchlaufen werden.

Zum Beispiel:

... 
    <?php $i = 0; ?> 
    <?php foreach($this->getItems() as $_item): ?> 
     <?php if($i++ == 3) break; ?> 
     ... 
+0

thnx @ zitix, es hat für mich funktioniert. Obwohl seine statische, aber für den Moment funktioniert. :) – madzacky

+3

hier werden Sie eine größere Sammlung bekommen, während Sie nur drei wollen. also wird dies ressourcenintensiver. Fügen Sie in Ihrem Sammlungscode dieses Limit von 3 hinzu. – oscprofessionals

1

Sie haben eine Sammlung von Produkten vorbereitet in Mage_Catalog_Block_Product_List_Related und es wird in der Vorlagendatei catalog/product/list/related.phtml iteriert. Wenn Sie eine Regel haben, die hinzugefügt werden sollte, um Ihre Sammlung einzuschränken, können Sie die _prepareData() -Methode überschreiben und die Sammlung ändern. Wenn nicht, ist die einfachste Lösung, nach drei Iterationen die Schleife im phtml zu beenden.

4

Das funktionierte für mich. Sie müssen die Abfrage begrenzen und möglicherweise mischen, bevor Sie die Sammlung laden. Öffnen Sie die Datei \ app \ code \ core \ Mage \ Catalog \ Sperren \ Produkt \ Liste \ Related.php und suchen Sie nach der Methode:

Mage_Catalog_Block_Product_List_Related -> _ prepareData()

Fügen Sie diese Zeile vor dem Aufruf von load().

$this->_itemCollection->getSelect()->limit(3)->order(new Zend_Db_Expr('RAND()')); 

Es ist immer noch nicht recht, !! sollten Sie nicht in den Kern-Code schreiben !!, aber es ist ein guter Anfang.

+0

Dies ist die perfekte Antwort. Nur um hinzuzufügen, sollte man die Klasse –

+0

umschreiben, das ist eine falsche Methode, weil Core-Dateien überschrieben werden. Sie müssen ein Modell schreiben, um diese Klasse zu erweitern, wenn Sie die Logik des Änderungscodes ändern müssen. – Nerjuz

+0

@Nerjuz Übersetzung: "Es ist die falsche Methode, weil es nicht die ist, die ich will". Geh weg! – Deji

Verwandte Themen