2010-10-24 107 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(); 

它完美呈现分页工具栏。