Я потратил несколько часов, чтобы переопределить блок 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
и размещаю там свою функцию.
И для меня это прекрасно работает.