使用Mage_Catalog_Model_Category的奇怪行为

时间:2012-02-13 14:47:22

标签: php magento content-management-system

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

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

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

这就是我加载代码的方法,我创建了一个名为“Get By Category”的静态块,启用它并用以下代码填充它:

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

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

有没有其他人经历过这个?任何人都可以伸出援手吗?

1 个答案:

答案 0 :(得分: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