Показать кнопку WYSIWYG под атрибутом пользовательской категории
Я добавил атрибут категории (текстовая область), и Magento перестанет отображать кнопку WYSIWYG, если я использую пользовательский рендеринг для этого поля текстовой области. Я хочу спросить, кто-нибудь знает, почему это происходит?
Вот мои шаги. Я добавил атрибут категории, простую текстовую область с кнопкой WYSIWYG:
$installer->addAttribute('catalog_category', 'my_attr1', array(
'label' => 'My attribute 1',
'type' => 'text',
'input' => 'textarea',
'visible_on_front' => true,
'wysiwyg_enabled' => true,
'is_html_allowed_on_front' => true,
'visible' => true,
'required' => false,
'backend' => '',
'frontend' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
));
Все работает правильно, кнопка WYSIWYG отображается под полем.
Затем я добавил второй атрибут my_attr2
, чтобы провести некоторые тесты. Этот второй атрибут использует мой пользовательский класс визуализации (см. 'input_renderer' => 'my_custom'
), потому что мне нужно расширить это поле дополнительными функциями. Я проверил, что атрибут был добавлен правильно и работает на 100% правильно. Этот класс My_Custom
расширяет средство визуализации текстовой области Magento по умолчанию Varien_Data_Form_Element_Textarea
, поэтому он выглядит и работает точно так же, как стандартное поле текстовой области.
Но по какой-то причине Magento перестает отображать кнопку WYSIWYG, если я использую пользовательский рендерер.
$installer->addAttribute('catalog_category', 'my_attr2', array(
'label' => 'My attribute 2',
'type' => 'text',
'input' => 'textarea',
'input_renderer' => 'my_custom', //<---custom
'visible_on_front' => true,
'wysiwyg_enabled' => true,
'is_html_allowed_on_front' => true,
'visible' => true,
'required' => false,
'backend' => '',
'frontend' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
));
Вот отрисованный класс (находится в файле lib/My/Custom.php). Я проверил это Magento наверняка использует этот класс при отображении второго атрибута (я добавил ведение журнала в конструктор, чтобы убедиться, что он работает).
<?php
class My_Custom extends Varien_Data_Form_Element_Textarea
{
public function __construct($attributes=array())
{
parent::__construct($attributes);
Mage::log("My_Custom is working");
}
}
Даже если я удалю весь код из класса визуализации lib/My/Custom.php чтобы убедиться, что я ничего не сломал или не переопределил, кнопка WYSIWYG по-прежнему не отображается под вторым атрибутом:
<?php
class My_Custom extends Varien_Data_Form_Element_Textarea
{
}
И как только я обновлю my_attr2
и удалю пользовательский класс визуализации, кнопка WYSIWYG отобразится правильно под текстовой областью (просто как и должно быть).
1 answers
Ваш визуализатор должен расширить Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg
. Это тот, который используется для отображения текстовых областей в форме добавления/редактирования категории.
Вы можете видеть это из метода Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes::_getAdditionalElementTypes
protected function _getAdditionalElementTypes()
{
return array(
'image' => Mage::getConfig()->getBlockClassName('adminhtml/catalog_category_helper_image'),
'textarea' => Mage::getConfig()->getBlockClassName('adminhtml/catalog_helper_form_wysiwyg')
);
}
Это означает, что для элементов, у которых нет указанного средства визуализации, используются те, которые указаны в этом методе.