2

body クラスに追加したいカスタム カテゴリ属性があります。人々が何をしているかを知ることができる限り、

  1. CategoryController をオーバーライドして、次のようなものを追加$root->addBodyClass($category->getMyAttribute());しますが、コア クラスをオーバーライドしたくありません...

  2. 管理パネルでは<reference name=”root”&gt;<action method=”addBodyClass”&gt;<className>caravan-motorhome-lighting</className></action></reference>、属性自体を使用するのではなく、クラスを直接追加するのではなく、すべてのカテゴリに次のようなものを追加します。私はすでに属性を持っているので、それを複製してこの方法でクラスを追加したくはありません。

私のお気に入りの解決策は、local.xml に追加できるレイアウトの更新です。

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

これがどのように機能するか、または私が考えもしなかった別のアイデアを誰かが知っていますか?

4

1 に答える 1

6

これを実現するために、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-。属性の値が常に安全であるとは限らない場合は、次のようなものを使用することを検討してください。

できます!

于 2013-05-15T13:46:37.580 に答える