Magento - 获取产品集合的结果视图HTML

时间:2012-10-19 18:57:32

标签: magento

我从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的输出,但是给出了我的收藏)?

1 个答案:

答案 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:

  • 您对$ category_id变量使用根类别ID(同时确保设置显示根类别(或包含产品ID的其他类别ID)
  • 您可以挂钩catalog_block_product_list_collection事件,将您的ID过滤器添加到集合中(这在_beforeToHtml函数中调用)

但是,所有这些结构都不牢固,还有一些需要注意的要点(其他子块,过滤器等)