gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:25:41 26 4
gpt4 key购买 nike

我从网络服务中获取了 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是空的。

我如何获取您在 ListView 中看到的内容的 HTML(即 frontend/base/default/template/catalog/product/list.phtml 的生成输出,但给定我的集合)?

最佳答案

在 Magento 中使代码以正确的方式工作比尝试使用丑陋的遗留代码要容易得多。当您有具体问题时,我很乐意帮助您以正确的方式编写代码。此外,从长远来看,技术债务的成本将会更高。

无论如何,回到你的问题。

在 Magento 中, block 不会像任何应用程序那样实例化 $myvar = new className ...几乎从不。 This tutorial可以帮助您更好地理解Magento的布局和 block 。

但是如果你想创建一个 block ,方法是:

$block = Mage::getSingleton('core/layout')->createBlock('catalog/product_list')

现在与您的产品集合相关,您应该检查 Mage_Catalog_Block_Product_List::_getProductCollection 的实际工作原理,因为它使用分层导航,而不是简单的产品集合。

此外,假设您至少使用 Magento Controller 并且位于函数内,以下代码将显示指定类别的产品的首页:

//$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)
  • 您可以 Hook catalog_block_product_list_collection 事件,将 ID 过滤器添加到集合中(这在 _beforeToHtml 函数中调用)

但是,所有这些构造并不牢固,仍然有一些需要注意的地方(其他子 block 、过滤器等)

关于Magento - 获取产品集合的结果 View HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com