Magento:在body类中显示自定义属性

Ria*_*cht 2 magento magento-1.7

我有一个自定义类别属性,我想添加到body类.据我所知,人们做的是什么

  1. 覆盖CategoryController并添加类似$root->addBodyClass($category->getMyAttribute());但我不想覆盖核心类...

  2. 在管理面板中,他们添加类似于<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)

有没有人知道这是如何工作的或我甚至没有想到的另一个想法?

Jos*_*ort 5

您可以使用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-.如果你的属性的值并不总是为了安全起见,你可能要考虑使用的东西像这样

有用!