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