我从网络服务中获取了 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 http://docs.magentocommerce.com/Mage_Core/Mage_Core_Block_Abstract.html显示产品列表。我想在我的课堂上做类似的事情。我尝试过加载:
$ProductList = new Mage_Catalog_Block_Product_List();
$ProductList->setCollection($collection);
然后我尝试加载结果的 HTML,如下所示:
$CollectionHTML = $ProductList->_toHtml();
But $CollectionHTML
是空的。
我如何获取您在列表视图中看到的内容的 HTML(即 frontend/base/default/template/catalog/product/list.phtml 的生成输出,但给定我的集合)?
在 Magento 中使代码以正确的方式工作比尝试使用丑陋的遗留代码要容易得多。当您有具体问题时,我很乐意帮助您以正确的方式编写代码。此外,从长远来看,技术债务的成本将会更高。
无论如何,回到你的问题。
在 Magento 块中,不像任何应用程序那样被实例化$myvar = new className
... 几乎从不。本教程 http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-4-magento-layouts-blocks-and-templates可以帮助您更好地理解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:
- 您将根类别 id 用于 $category_id 变量(还要确保设置了显示根类别(或包含您的产品 id 的另一个类别 id)
- 你可以挂钩
catalog_block_product_list_collection
将您的 ID 过滤器添加到集合中的事件(这在_beforeToHtml
功能)
但是,所有这些构造并不牢固,仍然有一些需要注意的地方(其他子块、过滤器等)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)