Ria*_*cht 2 magento magento-1.7
我有一个自定义类别属性,我想添加到body类.据我所知,人们做的是什么
覆盖CategoryController并添加类似$root->addBodyClass($category->getMyAttribute());但我不想覆盖核心类...
在管理面板中,他们添加类似于<reference name=”root”><action method=”addBodyClass”><className>caravan-motorhome-lighting</className></action></reference>每个类别的内容,而不是使用属性本身,而是直接添加类.由于我已经有了一个属性,我当然不希望克隆它并以这种方式添加类.
所以我最喜欢的解决方案是我可以添加到local.xml的布局更新
<reference name=”root”>
<action method=”addBodyClass”>
<className>
get value of my custom attribute here dynamically
</className>
</action>
</reference>
Run Code Online (Sandbox Code Playgroud)
有没有人知道这是如何工作的或我甚至没有想到的另一个想法?
您可以使用Magento布局XML的一个非常酷的功能来实现这一目标.你需要一个模块来实现它.要么专门为此创建一个模块,要么使用主题模块(如果有的话) - 由您来决定您认为最好的模块.
我将向您展示一个示例,其中我将向body标签添加包含类别ID的类:
在我的布局XML中,我将通过catalog_category_default句柄添加.这样,我Mage::registry('current_category')以后可以使用它来检索当前类别.因此,在您的布局中,XML执行与此类似的操作:
<catalog_category_default>
<reference name="root">
<action method="addBodyClass">
<className helper="mymodule/my_helper/getCategoryClass" />
</action>
</reference>
</catalog_category_default>
Run Code Online (Sandbox Code Playgroud)
这个属性是重要的部分:helper="mymodule/my_helper/getCategoryClass".这相当于调用Mage::helper('mymodule/my_helper')->getCategoryClass();代码.
从该函数返回的任何内容都将用作<className>节点的值.您可能希望使用您认为更合适的其他帮助程序,由您自行决定.
继续举例,这里是函数:
public function getCategoryClass() {
return 'category-id-' . Mage::registry('current_category')->getId();
}
Run Code Online (Sandbox Code Playgroud)
您需要更改代码,以便检索属性的值.例如getMyAttribute(),返回的类别Mage::registry('current_category').
此外,您需要确保返回适合作为CSS类.在这个例子中,我们不需要做任何事情,因为ID将始终只是附加到的数字category-id-.如果你的属性的值并不总是为了安全起见,你可能要考虑使用的东西像这样

| 归档时间: |
|
| 查看次数: |
2657 次 |
| 最近记录: |