Расширение элемента формы Varien для пользовательского модуля - PullRequest
2 голосов
/ 13 февраля 2012

Улучшение этого вопроса: Является ли хорошей практикой добавление собственного файла в папку lib / Varien / Data / Form / Element

В принятом ответе показано, как расширить элемент формы Varien, но это не сработает, если вы хотите упаковать его в пользовательский модуль.

Каков будет правильный метод расширения элемента формы Varien в модуле?Надеюсь на простую настройку XML?

Обновление :

Спасибо Vinai за ответ.Хотя это работает, я надеялся как-то расширить элемент формы.Мое расширение использует базовый элемент формы файла, чтобы администраторы могли загружать файлы в категории.Таким образом, я сам не добавляю элементы формы непосредственно в fieldset.

Я полагаю, что можно проверить наличие входного файла в моем блоке категорий на бэкенде: Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes, а затем изменить элемент формы, если это 'file', на 'mycompany_file' - но это кажетсякак обходной путь.

Есть ли более простой способ?Еще раз спасибо Vinai.

Ответы [ 2 ]

11 голосов
/ 13 февраля 2012

В экземпляре Varien_Data_Form вы можете указать пользовательские типы элементов, например:

$fieldset->addType('custom', 'Your_Module_Model_Form_Element_Custom');

Затем добавьте свой элемент с помощью

$fieldset->addField('the_name', 'custom', $optionsArray);

Если вы используете форму без наборов полей, вы можете сделать то же самое с экземпляром Varien_Data_Form.

РЕДАКТИРОВАТЬ: Расширить ответ из-за новых дополнительных деталей в вопросе.

В классе Mage_Adminhtml_Block_Widget_Form::_setFieldset() есть следующий код:

$rendererClass  = $attribute->getFrontend()->getInputRendererClass();
if (!empty($rendererClass)) {
    $fieldType  = $inputType . '_' . $attribute->getAttributeCode();
    $fieldset->addType($fieldType, $rendererClass);
}

Из-за этого атрибут frontend_input_renderer в атрибутах может использоваться для указания пользовательских классов элементов.
Это свойство можно найти в таблице catalog_eav_attribute, и, к счастью, оно не установлено ни для одного из атрибутов изображения категории.

Учитывая это, есть несколько способов применить настройку.

Один из вариантов - просто установить класс элемента в таблице, используя скрипт обновления.
Другим было бы использование наблюдателя для события eav_entity_attribute_load_after и установка средства визуализации ввода на лету, если entity_type_id и тип ввода совпадают.

Так что это немного сложнее, чем просто переписывание обычного класса в Magento, но это вполне возможно.

1 голос
/ 13 февраля 2012

Вам не обязательно иметь файл в каталоге lib / Varien / для его расширения.Если вам нужно добавить элемент в эту коллекцию, вы сможете расширить один из элементов в вашем модуле app / code / local.Ответ на вопрос, на который вы ссылались, также указывает на то, что это так.Я бы создал ваше настраиваемое поле, расширяя его набор функций самого высокого уровня (то есть lib / Varien / Data / Form / Element / File.php).

Если вы хотите переопределить блок Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes,Вы должны расширить этот блок в своем модуле, а затем ссылаться на новый.Для обеспечения совместимости вы можете расширить блок с помощью наблюдателя событий, а не переписывания XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...