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

Lou*_* B. 2 magento magento-1.7

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

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

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

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

Ala*_*orm 7

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

你需要这样做

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

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

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

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

$product = Mage::registry('product');
Run Code Online (Sandbox Code Playgroud)

然后使用获取类别集合

$c       = $product->getCategoryCollection()
->addAttributeToSelect('*');
Run Code Online (Sandbox Code Playgroud)

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

最后,您可以自己获取各个类别

foreach($c as $category)
{
    var_dump($category->getData());
    var_dump($category->getName());
}
Run Code Online (Sandbox Code Playgroud)

你也可以抓住第一个类别

$category = $c->getFirstItem();
var_dump($category->getData());
var_dump($category->getName());
Run Code Online (Sandbox Code Playgroud)