2013-05-15 2 views
2

У меня есть атрибут специальной категории, который я хочу добавить в класс body. Насколько я мог узнать, что люди делают этоMagento: показать пользовательский атрибут в классе body

  1. Override 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> 

Кто-нибудь есть идеи, как это может работать или другая идея, что я Бесполезный Даже подумать?

ответ

5

Для достижения этой цели вы можете использовать действительно интересную функцию Magento layout XML. Для этого вам понадобится модуль. Либо создайте модуль специально для этого, либо используйте модуль темы, если он у вас есть - это зависит от вас, чтобы решить, что вы считаете лучшим.

Я покажу вам пример, где я добавить класс, содержащий идентификатор категории для тела тега:

В моем макете 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. В этом примере нам не нужно ничего делать, так как идентификатор всегда будет просто номером, который будет добавлен к category-id-. Если значение атрибута не всегда будет в безопасности вы можете рассмотреть возможность использования что-то like this

It works!

+0

Это звучит удивительно - именно то, что я искал. Я попробую! –

+0

работает как шарм –

+0

@RiaElliger Отлично, рад его слышать. –

Смежные вопросы