2013-05-10 17 views
7

Wyświetlane są powiązane produkty w bloku zawartość blok układu na stronie widoku produktu. Mój kod w catalog.xml jest:Jak wyświetlić tylko 3 powiązane produkty na stronie widoku produktu, Magento?

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

Teraz wszystkie produkty pokrewne są wyświetlane w widoku strony mojego produktu, ale chcę, aby wyświetlić tylko 3 produkty, co mam zrobić? Proszę, ktoś może pomóc?

Odpowiedz

9

Musisz edytować plik szablonu catalog/product/list/related.phtml i ograniczyć pętlę do tylko iteracji przez 3 produkty.

Na przykład:

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

thnx @zitix, zadziałało dla mnie. Choć jego statyczny, ale pracował na razie. :) – madzacky

+3

tutaj otrzymasz większą kolekcję, a chcesz tylko trzy. więc będzie to wymagać więcej zasobów. W swoim kodzie zbierania dodaj ten limit wynoszący 3. – oscprofessionals

1

Masz kolekcję produktów przygotowanych w Mage_Catalog_Block_Product_List_Related i to powtórzyć w pliku szablonu catalog/product/list/related.phtml. Jeśli masz jakąś regułę, która powinna dodać, aby ograniczyć kolekcję, możesz zastąpić metodę _prepareData() i zmodyfikować kolekcję. Jeśli nie, najprostszym rozwiązaniem jest wyjście z pętli w phtml po trzech iteracjach.

4

To zadziałało dla mnie. Musisz ograniczyć zapytanie i być może przetasować je przed załadowaniem kolekcji. Otwórz plik \ app \ code \ rdzeń \ Mage \ Katalog \ Zablokuj \ Product \ Lista \ Related.php i poszukać sposobu:

Mage_Catalog_Block_Product_List_Related -> _ prepareData()

Dodaj tę linię przed wywołaniem load().

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

To wciąż nie dość, !! nie należy pisać kodu rdzenia !!, ale to dobry początek.

+0

To jest idealna odpowiedź. Aby dodać, należy przepisać klasę –

+0

jest to niewłaściwa metoda, ponieważ nadpisujesz pliki rdzenia. Musisz napisać model, aby rozszerzyć tę klasę, jeśli potrzebujesz logiki kodu zmiany. – Nerjuz

+0

@Nerjuz Translation: "To niewłaściwa metoda, ponieważ nie jest tą, której chcę". Idź stąd! – Deji