2

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

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可用于检索类别的所有函数都返回空值,就好像产品未分配给任何类别一样。

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

4

1 回答 1

7

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

你需要

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

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

  3. 遍历集合,拉出你想要的类别信息

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

$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());
于 2013-03-31T23:01:43.720 回答