2010-10-24 207 views
7

我想顯示使用ajax在主頁magento中使用ajax的流行產品列表,我可以做5或「N」no.of產品,但我想要的是分頁工具欄與結果集一起添加。Magento自定義塊

這是我添加了什麼,顯示受歡迎的產品,

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

而下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')); 

?> 

所以這給了我指定的頁面,並限制流行的產品,但我可以不加載分頁工具欄(通過直接將工具欄添加到popular.phtml或通過創建塊佈局功能),哪裏錯了?請有人告訴我。

謝謝

回答

10

嘗試創建Mage_Catalog_Block_Product_List塊並自行設置熱門產品的集合。

$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'); 

產品列表塊始終初始化工具欄塊本身。 ? 您可以通過使用<顯示模板工具欄PHP的echo $這個 - > getToolbarHtml()>

編輯: 這裏是在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(); 
} 

我希望更清楚。

+0

那個正在工作,正常的產品展示。但我想從自定義的PHP文件中顯示它。即使我試圖加載這樣的toolbar.phtml。 $ layout = Mage :: getSingleton('core/layout'); $ toolbar = $ layout-> createBlock('catalog/product_list_toolbar'); //渲染工具欄html echo $ toolbar-> toHtml(); 這不是在1.4.1工作,但在1.3工作。我必須使用分頁工具欄。但它不起作用。 – Elamurugan 2010-10-24 13:47:53

+0

嗨vinai,我做了你的建議,但不幸的是它沒有工作。主要思考,我正在研究EE 1.9,並且我做了這個。 \t $ collection = Mage :: getModel('catalog/product') - > loadByAttribute('sku',$ sku); \t $ listBlock = Mage :: getSingleton('core/layout') - > createBlock('catalog/product_list'); \t $ listBlock-> setCollection($ collection) - > setTemplate('catalog/product/list/list.phtml'); \t var_dump($ listBlock-> getCollection()); (RETURNS NULL) \t // echo $ listBlock - > toHTML(); (THROUGHS致命錯誤)。 – Elamurugan 2010-10-25 14:49:46

+0

Mage :: getModel('catalog/product') - > loadByAttribute()不返回一個集合,而是一個Mage_Catalog_Model_Product。我已經編輯了上面的帖子,並添加了一個控制器操作,以使事情更清晰。 – Vinai 2010-10-25 19:16:12

2

你應該從你的集合初始化工具欄我猜。你見過this page

+0

不,我的問題是不同的,我想顯示它從自定義的PHP文件。所以當我試圖加載toolbar.phtml使用這種方式它不工作。 $ magento_block = Mage :: getSingleton('core/layout'); \t $ productsHtml2 = $ magento_block-> createBlock('catalog/product_list_toolbar'); \t $ productsHtml2 - > setTemplate('catalog/product/list/toolbar.phtml'); \t echo $ productsHtml2 - > toHTML();它返回致命錯誤。致命錯誤:在第34行的D:\ wamp \ www \ wc2 \ app \ design \ frontend \ enterprise \ espresso \ template \ catalog \ product \ list \ toolbar.phtml中的非對象上調用成員函數getSize – Elamurugan 2010-10-24 13:53:59

+0

現在好了看看toolbar.phtml。你看到哪個變量是「非對象」?它是$ this-> getCollection()的返回值。你必須找到一種方法來設置這個集合。看看Vinai的代碼,他寫了一個setCollection()的調用,嘗試做類似的事情! – greg0ire 2010-10-24 14:13:01

4

對於其他人來說,這是我按照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(); 

它完美呈現分頁工具欄。