Показать кнопку 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 отобразится правильно под текстовой областью (просто как и должно быть).

Author: d3tr5845, 2014-06-03

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')
    );
}

Это означает, что для элементов, у которых нет указанного средства визуализации, используются те, которые указаны в этом методе.

 1
Author: Marius, 2014-06-03 11:32:04