我有一个自定义模型/块,可以获取当前产品的父类别:
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
中可用于检索类别的所有函数都返回空值,就好像产品未分配给任何类别一样。
我的问题是:即使不通过类别访问该产品,检索产品类别的全球方式是什么?
答案 0 :(得分:7)
第一步:稍微调整您的期望 - Magento中的产品不限于单一类别。因此,“检索产品类别的全球方式”应该是“检索产品所在类别列表的全球方式”。
你需要
获取对产品对象的引用
使用该产品对象获取类别集合
浏览集合并提取所需的类别信息
如果您在产品页面上,则可以从注册表中获取当前产品。
$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());