Ответ 1
Очень хороший вопрос!
Так что на самом деле немного о цели этого помощника. Из его имени вы уже можете сделать вывод, что он используется для вывода данных. Имя метода также самоочевидно, оно просто выводит значение атрибута продукта, зависит от обработчиков. В настоящее время существуют два метода productAttribute()
, которые используются для вывода значений атрибутов продукта и categoryAttribute()
, которые используются для категорий. Все данные в основных шаблонах из категории и продукта выводятся с помощью этого метода (кроме атрибута цены), насколько я помню, он был добавлен в одну из версий 1.4.x, но не уверен. Основная идея заключалась в том, чтобы сделать возможной фильтрацию данных атрибута. Например, вы можете использовать конструкции {{widget ... }}
в описании категории, это реализуется с помощью специальных методов.
Оба эти метода фактически выполняют ту же функциональность, но для разных объектов. Оба они получают 3 аргумента:
- объект (категория или продукт, зависит от имени метода)
- значение атрибута - значение, которое фильтруется
- код атрибута - код, который используется для извлечения модели атрибута
Сначала внутри этих методов Magento проверяет допустимость разметки html в значении, если нет, то он пропускает текст с помощью метода escapeHtml()
. Также, если атрибут имеет текстовое поле как вход в админу, все новые строковые символы заменяются тегом <br />
.
Если html разрешен, Magento проверяет наличие специальных конструкций типа {{widget ...}}
в конфигурации (официальное название этих конструкций является директивой). Если директивы разрешены, специальный директивный процессор получает экземпляр и обрабатывается значение.
После завершения основной обработки Magento вызывает обработчики.
Эти обработчики являются дополнительной функциональностью, которая не используется базовыми модулями, но вы можете использовать свою собственную настройку для достижения некоторых хороших настроек. Вот пример: вы хотите сделать весь вывод названия продукта в верхнем регистре. Затем вы можете добавить свой собственный обработчик, для этого выполните следующие простые шаги:
-
Определите наблюдателя для
catalog_helper_output_construct
<config> <frontend> <events> <catalog_helper_output_construct> <observers> <your_module> <class>your_module/observer</class> <method>handleHelperOutputInitialization</method> </your_module> </observers> </catalog_helper_output_construct> </events> </frontend> </config>
-
Создайте свой класс наблюдателя, также я сделаю его обработчиком. Код очень прост:
class Your_Module_Model_Observer { public function handleHelperOutputInitialization($observer) { $helper = $observer->getEvent()->getHelper(); $helper->addHandler('productAttribute', $this); } public function productAttribute($helper, $value, $parameters) { $attribute = $parameters['attribute']; if ($attribute->getAttributeCode() == 'name') { return strtoupper($value); } return $value; } }
-
Убедитесь, что ваше имя метода в классе обработчика абсолютно совпадает с именем метода процессора значений, в этом примере оно
productAttribute()
.
Наслаждайтесь изучением Magento!