获取产品的父类别,即使直接访问它也是如此

时间:2013-03-31 22:31:11

标签: magento magento-1.7

我有一个自定义模型/块,可以获取当前产品的父类别:

class Namespace_Module_Model_Product extends Mage_Catalog_Model_Product
{
    public function someFunction()
    {
        $category = $this->getCategory();
        ...
    }
}

此自定义功能块用于产品页面。如果通过其父类别访问产品,例如:domain.com/some-category/my-product.html,则此方法非常有效。但是,如果直接访问产品(例如通过搜索)并且URL类似于domain.com/my-product.html,则它不起作用。 Mage_Catalog_Model_Product中可用于检索类别的所有函数都返回空值,就好像产品未分配给任何类别一样。

我的问题是:即使不通过类别访问该产品,检索产品类别的全球方式是什么?

1 个答案:

答案 0 :(得分:7)

第一步:稍微调整您的期望 - Magento中的产品不限于单一类别。因此,“检索产品类别的全球方式”应该是“检索产品所在类别列表的全球方式”。

你需要

  1. 获取对产品对象的引用

  2. 使用该产品对象获取类别集合

  3. 浏览集合并提取所需的类别信息

  4. 如果您在产品页面上,则可以从注册表中获取当前产品。

    $product = Mage::registry('product');
    

    然后使用

    获取类别集合
    $c       = $product->getCategoryCollection()
    ->addAttributeToSelect('*');
    

    addAttributeToSelect方法可确保您获得所需的所有字段。

    最后,您可以使用

    自行获取各个类别
    foreach($c as $category)
    {
        var_dump($category->getData());
        var_dump($category->getName());
    }
    

    您还可以使用

    抓住第一个类别
    $category = $c->getFirstItem();
    var_dump($category->getData());
    var_dump($category->getName());