【问题标题】:Strange behavior using Mage_Catalog_Model_Category使用 Mage_Catalog_Model_Category 的奇怪行为
【发布时间】:2012-02-13 14:47:22
【问题描述】:

我试图让某个类别显示在我的一个页面上,但结果有些奇怪。我正在使用以下代码加载 ID 为 5 的类别

$category = new Mage_Catalog_Model_Category();
$category->load(5);

但是,即使该类别中有产品,这也不会返回任何结果。我已将 ID 更改为 2(这是默认类别),这将返回 2 个产品,即使该类别中没有产品!

这就是我加载代码的方式,我创建了一个名为“按类别获取”的静态块,启用它并用以下代码填充它:

{{block type="catalog/navigation" template="catalog/product/by_category.phtml"}}

然后,我创建了一个新页面并将该静态块添加到其中。

以前有没有其他人经历过这种情况?有人可以帮忙吗?

【问题讨论】:

  • 类别应该使用模型工厂方法Mage::getModel('catalog/category)进行实例化。方法调用$category->load(5) 总是返回加载的模型,所以我相信你的问题可能会被改写一下。此外,没有像默认类别这样的东西。我假设您的意思是根类别?根类别的is_anchor 设置的值是多少?如果您搜索产品,它们是否可见?

标签: php magento content-management-system


【解决方案1】:

以编程方式,要加载某个类别的产品列表,您必须执行以下操作:

$catalog = Mage::getModel('catalog/category')->load(/* your category ID*/);
$collection = $catalog->getProductCollection();
Zend_Debug::dump($collection->getItems());

此代码不会像在静态块中那样工作。您必须创建一个 Mage_Core_Block_Template (或类似)类型的类并使用预定义的类别 ID 准备集合,然后在您的静态块中,您可以使用以下代码 {{block type="catalog/mynewblock" template="catalog/ product/mynewblock.phtml" category_id='my_category_ID_value'}}

当块将被 CMS 模块实例化时,由于过滤器 Mage_Core_Model_Email_Template_Filter,块将具有 category_id 的值。在 Block 中,您必须执行以下操作:

protected function _beforeHtml(){ // or in the protected function _toHtml() depending of what you want to do and how you want to do it.
    $categoryId = $this->getCategoryId();
    $catalog = Mage::getModel('catalog/category')->load($categoryId);
    $collection = $catalog->getProductCollection();
    $products = $collection->getItems();
    $this->setProducts($products); // in your template file you can, then, do $this->getproducts(); etc...
    ...
}

您可以在我在这里写的答案How to display multiple categories with a Magento block中找到其他信息

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2010-10-28
    • 2020-06-24
    相关资源
    最近更新 更多