2010-10-24 10 views
7

Próbuję pokazać popularną listę produktów za pomocą ajax w magento na stronie głównej za pomocą ajax, mogę to zrobić dla 5 lub "N" noof produktów, ale co chcę to pasek narzędzi paginacji do dodane z zestawem wyników.Niestandardowe bloki Magento

To właśnie dodany pokazać popularnych produktów,

// Magento layout 
$magento_block = Mage::getSingleton('core/layout'); 
$productsHtml = $magento_block->createBlock('catalog/product'); 
$productsHtml->setTemplate('catalog/product/popular.phtml'); 
echo $productsHtml ->toHTML(); 

A pod popular.phtml

<?php 

    $_productCollection = Mage::getModel('catalog/product')->getCollection() 
    ->addPriceData() 
    ->addAttributeToSort('ordered_qty', 'DESC') 
    ->addAttributeToSort('name', 'ASC') 
    ->setPageSize($limit) 
    ->setPage($p, $limit)  
    ->addAttributeToSelect(array('entity_id', 'entity_type_id', 'attribute_set_id', 'type_id', 'sku', 'category_ids', 'created_at', 'updated_at','has_options', 'sync', 'name', 'stock_status', 'wc_review_iwc_rating', 'wc_review_wa_rating', 'wc_review_bh_rating', 'small_image', 'status', 'pre_arrival', 'description', 'short_description', 'price', 'is_salable', 'stock_item', 'gift_message_available', 'featured')); 

?> 

Więc to daje mi popularne produkty podanej strony i granicy, ale może nie ładuj paska narzędziowego do stronicowania (bezpośrednio dodając pasek narzędzi do popular.phtml lub przez funkcję tworzenia układu bloku), Gdzie się mylę? Czy ktoś może mi powiedzieć, proszę.

Dzięki

Odpowiedz

10

Spróbuj utworzyć blok Mage_Catalog_Block_Product_List i samodzielnie ustawić kolekcję popularnych produktów.

$collection = Mage::getModel('catalog/product')->addAttributeToFilter('your popular products'); 
// do not load the collection yet, otherwise the toolbar will not work 

$listBlock = Mage::getSingleton('core/layout')->createBlock('catalog/product_list'); 
$listBlock->setCollection($collection)->setTemplate('your/alternative/catalog/product/list.phtml'); 

Blok listy produktów zawsze inicjuje sam blok paska narzędzi. ? Można wyświetlić pasek narzędzi w szablonie za pomocą < php echo $ this-> getToolbarHtml()>

EDIT: Oto przykład pracy z działaniem próbka frontend w Magento 1.4.1.1:

public function productListAction() 
{ 

    $collection = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToSelect('*'); 

    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); 

    $this->loadLayout(); 

    $listBlock = $this->getLayout()->createBlock('catalog/product_list') 
      ->setTemplate('catalog/product/list.phtml') 
      ->setCollection($collection); 

    $this->getLayout()->getBlock('content')->append($listBlock); 

    $this->renderLayout(); 
} 

Mam nadzieję, że dzięki temu będzie jaśniejszy.

+0

Ten działa, z normalnym wyświetlaniem produktu. Ale chcę wyświetlić go z niestandardowego pliku php. Nawet próbowałem załadować toolbar.phtml w ten sposób. $ layout = Mage :: getSingleton ('core/layout'); $ toolbar = $ layout-> createBlock ("katalog/product_list_toolbar"); // Renderuj pasek narzędzi html echo $ toolbar-> toHtml(); To nie działa w wersji 1.4.1, ale działało w wersji 1.3.Muszę użyć paska narzędziowego paginacji. Ale to nie działa. – Elamurugan

+0

hi vinai, zrobiłem twoją sugestię, ale niestety to nie działa. Główny myśl, pracuję nad EE 1.9, I ZROBIŁEM TO. \t $ collection = Mage :: getModel ("katalog/produkt") -> loadByAttribute ('sku', $ sku); \t $ listBlock = Mage :: getSingleton ("core/layout") -> createBlock ("katalog/lista_produktów"); \t $ listBlock-> setCollection ($ collection) -> setTemplate ("katalog/produkt/lista/lista.phtml"); \t var_dump ($ listBlock-> getCollection()); (ZWRACA NULL) \t // echo $ listBlock -> toHTML(); (POPRZEZ BŁĄD BŁĘDU). – Elamurugan

+0

Mage :: getModel ("katalog/produkt") -> loadByAttribute() nie zwraca kolekcji, ale Mage_Catalog_Model_Product. Edytowałem powyższy wpis i dodałem działanie kontrolera, aby było bardziej zrozumiałe. – Vinai

2

Powinieneś zainicjalizować pasek narzędzi z kolekcji. Czy widziałeś już this page?

+0

Nie, mój problem jest inny, chcę wyświetlić go z niestandardowego pliku php. więc gdy próbowałem załadować toolbar.phtml w ten sposób, to nie działa. $ magento_block = Mage :: getSingleton ("core/layout"); \t $ productsHtml2 = $ magento_block-> createBlock ("katalog/product_list_toolbar"); \t $ productsHtml2 -> setTemplate ("katalog/produkt/lista/toolbar.phtml"); \t echo $ productsHtml2 -> toHTML(); zwraca błąd krytyczny. Błąd krytyczny: wywołanie funkcji składowej getSize() na obiekcie innym niż obiekt w D: \ wamp \ www \ wc2 \ app \ design \ frontend \ enterprise \ espresso \ template \ catalog \ product \ list \ toolbar.phtml w linii 34 – Elamurugan

+0

ok teraz zajrzyj do toolbar.phtml. Czy widzisz, która zmienna jest "nie-obiektem"? Jest to wartość zwracana przez $ this-> getCollection(). Musisz znaleźć sposób na ustawienie tej kolekcji. Spójrz na kod Vinai, on pisze wezwanie do setCollection(), spróbuj zrobić coś podobnego! – greg0ire

4

Dla innych odniesienia jest to, co dodałem zgodnie z kodem Vinai.

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*'); 
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);  
    $magento_block = Mage::getSingleton('core/layout'); 
    $productsHtml = $magento_block->createBlock('catalog/product_list'); 
    $productsHtml ->setTemplate('catalog/product/list.phtml')->setCollection($collection); 
    echo $productsHtml ->toHTML(); 

Reprezentuje pasek narzędzi do dzielenia stron na klawisze.

Powiązane problemy