2

I have a custom category attribute that i want to add to the body class. As far as I could find out what people do is

  1. Override the CategoryController and add something like $root->addBodyClass($category->getMyAttribute()); But I don't want to override core classes...

  2. In the admin panel they add something like <reference name=”root”&gt;<action method=”addBodyClass”&gt;<className>caravan-motorhome-lighting</className></action></reference> to each and every category not using the attribute itself but adding the class directly. As I already have an attribute, I surely don't want do clone it and add the class this way.

So what my favourite solution would be is some layout update I can add to the local.xml that says

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

Does anyone have an idea how this could work or another idea that I didn't even think of?

4

1 回答 1

6

您可以使用 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>

这个属性是重要的部分: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-。如果您的属性值并不总是安全的,您可能需要考虑使用类似这样的东西

有用!

于 2013-05-15T13:46:37.580 回答