我从Web服务获取magento ID列表。我将这些加载到数组$product_ids
中,所以我有这样的东西:
Array
(
[0] => 1965
[1] => 3371
[2] => 1052
)
然后我可以把它变成一个集合:
$collection = Mage::getModel('catalog/product')->getCollection()
->addIdFilter($product_ids);
使用我的Magento检查器,我发现类别页面使用类Mage_Catalog_Block_Product_List
来显示产品列表。我想在课堂上做类似的事情。我试过加载:
$ProductList = new Mage_Catalog_Block_Product_List();
$ProductList->setCollection($collection);
然后我尝试按如下方式加载结果的HTML:
$CollectionHTML = $ProductList->_toHtml();
但是$CollectionHTML
是空的。
我如何获得您在列表视图中看到的HTML(即生成的frontend / base / default / template / catalog / product / list.phtml的输出,但是给出了我的收藏)?
答案 0 :(得分:3)
在Magento中使代码以正确的方式工作要比使用丑陋的遗留代码更容易。当您有具体问题时,我很乐意帮助您以正确的方式制作代码。此外,从长远来看,技术债务将花费更多。
无论如何,回到你的问题。
在Magento块中没有像任何应用程序$myvar = new className
那样实例化......几乎从不。 This tutorial可以帮助您更好地了解Magento的布局和块。
但是如果你想创建一个块,那么就是:
$block = Mage::getSingleton('core/layout')->createBlock('catalog/product_list')
现在与您的产品系列相关,您应该检查Mage_Catalog_Block_Product_List::_getProductCollection
的实际工作方式,因为它使用的是分层导航,而不是简单的产品系列。
此外,假设至少您使用的是Magento控制器而且您在一个函数中,以下代码将显示指定类别的产品的第一页:
//$category_id needs to be set
$layout = Mage::getSingleton('core/layout');
$toolbar = $layout->createBlock('catalog/product_list_toolbar');
$block = $layout->createBlock('catalog/product_list');
$block->setChild('toolbar', $toolbar);
$block->setCategoryId($category_id);
$block->setTemplate('catalog/product/list.phtml');
$collection = $block->getLoadedProductCollection();
$toolbar->setCollection($collection);
//render block object
echo $block->renderView();
显示特定ID:
catalog_block_product_list_collection
事件,将您的ID过滤器添加到集合中(这在_beforeToHtml
函数中调用)但是,所有这些结构都不牢固,还有一些需要注意的要点(其他子块,过滤器等)