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

时间:2013-05-15 12:38:44

标签: 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>之类的内容,而不是使用属性本身,而是直接添加类。由于我已经有了一个属性,我当然不希望克隆它并以这种方式添加类。

  3. 所以我最喜欢的解决方案是我可以添加到local.xml中的布局更新

    <reference name=”root”>
        <action method=”addBodyClass”>
            <className>
                get value of my custom attribute here dynamically
            </className>
        </action>
    </reference>
    

    有没有人知道这是如何工作的,或者我甚至没有想到的其他想法?

1 个答案:

答案 0 :(得分:5)

您可以使用Magento布局XML的一个非常酷的功能来实现这一目标。您需要一个模块来实现它。要么专门为此创建一个模块,要么使用主题模块(如果有的话) - 由您来决定您认为最好的模式。

我将向您展示一个示例,其中我将包含类别ID的类添加到body标签中:

在我的布局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>

此属性是重要部分:helper="mymodule/my_helper/getCategoryClass"。这相当于在代码中调用Mage::helper('mymodule/my_helper')->getCategoryClass();

从该函数返回的任何内容都将用作<className>节点的值。您可能希望使用您认为更合适的其他帮助程序,由您自行决定。

继续举例,这里的功能是:

public function getCategoryClass() {
    return 'category-id-' . Mage::registry('current_category')->getId();
}

您希望更改代码,以便检索属性的值。例如getMyAttribute()返回的类别Mage::registry('current_category')

此外,您需要确保返回适合作为CSS类。在此示例中,我们不需要执行任何操作,因为ID始终只是将附加到category-id-的数字。如果您的属性值并不总是安全的,您可能需要考虑使用like this

It works!