Magento – переопределяющий блок Adminhtml

Я потратил несколько часов, чтобы переопределить блок Magento для страниц «Добавить магазин» и «Изменить хранилище» в расширении, чтобы добавить к нему еще одно текстовое поле. Пройдя через книги и Google, я нашел несколько решений, которые, как говорят люди, работают, но не для меня.

Одна из рекомендаций была одна .

Я скопировал предположительно правильное решение от Ли Саферета, которое работает для оригинального плаката, но не для меня. Конечно, я изменил значения на класс, который я переопределяю, и новый модифицированный класс.

Мой config.xml (соответствующая часть):

<global> <blocks> <adminhtml> <rewrite> <system_store_sdit_form>Nintera_General_Block_StoreEdit</system_store_sdit_form> </rewrite> </adminhtml> </blocks> <resources></resources> <helpers> <Nintera_General> <class>Nintera_General_Helper</class> </Nintera_General> </helpers> </global> 

И класс блока, расположенный в Nintera / General / Block / StoreEdit.php:

 class Nintera_General_Block_StoreEdit extends Mage_Adminhtml_Block_System_Store_Edit_Form { /** * Prepare form data * * return Mage_Adminhtml_Block_Widget_Form */ protected function _prepareForm() { ... } } 

Этот класс содержит новые поля ввода. Поля отображаются отлично, если я изменяю исходный файл ядра по адресу:

приложение / ядро ​​/ Mage / Adminhtml / Block / System / Магазин / edit.php

Но я действительно хочу, чтобы мое расширение переопределяло его. При необходимости я могу опубликовать весь файл config.xml, но в основном он создает меню администратора верхнего уровня и указывает информацию о расширении, а не многое другое.

Любые идеи о том, что пошло не так? Решение было бы высоко оценено!

Ниже приведена небольшая модификация. Похоже, что вы пропустили «править» как «sdit».

 <global> <blocks> <adminhtml> <rewrite> <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> </rewrite> </adminhtml> </blocks> </global> 

Также имейте в виду, что если вы хотите вызывать другие блоки с помощью синтаксиса Mage :: getModel («nintera_general / myblock»), вам также нужно добавить свои собственные блоки к этому коду, как показано ниже.

 <global> <blocks> <adminhtml> <rewrite> <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> </rewrite> </adminhtml> <nintera_general> <class>Nintera_General_Block</class> </nintera_general> </blocks> </global> 

После чтения нескольких потоков я нашел решение для этой проблемы переопределения Mage_Adminhtml_Block_Widget_Grid .

Как упоминалось в этой теме
« Вы можете переопределить (переписать) в config только те экземпляры, которые были созданы. Вы не можете внедрять что-либо в иерархию классов, поскольку она не поддерживается PHP "

Я хотел бы переопределить protected function _addColumnFilterToCollection($column) методом protected function _addColumnFilterToCollection($column)

для расширенной иерархии Mage_Adminhtml_Block_Sales_Order_Grid .

Вместо переопределения Mage_Adminhtml_Block_Widget_Grid я переопределяю класс Mage_Adminhtml_Block_Sales_Order_Grid и размещаю там свою функцию.

И для меня это прекрасно работает.