magento переписать не работает - PullRequest
1 голос
/ 23 ноября 2010

Я создал модуль, который использовал пользовательский виджет / сетку / столбец для моей сетки администратора, чтобы отобразить миниатюру изображения, и все работало.Теперь мне нужно создать другой модуль в том же проекте, который делает то же самое, но столбец изображения не будет работать.Похоже, что он даже не загружает мой новый класс, так как он не выполнит команду stmt, которую я положил в файл.Я знаю, как правильно загружаются данные, б / к, если я изменю тип на текст, то в поле заполняется правильная информация из БД.Но когда я меняю свой новый тип изображения, ячейка становится пустой.Кто-нибудь знает, почему он не будет работать?

ABT / Background / etc / config.xml << не работает </p>

<global>
    ....
    <blocks>
        <background>
            <class>ABT_Background_Block</class>
        </background>
        <adminhtml>
            <rewrite>
                <widget_grid_column>ABT_Background_Block_Widget_Grid_Column</widget_grid_column>
            </rewrite>
        </adminhtml>
    </blocks>
    ....
</global>

модуль IСкопированный для запуска и запуска имеет точно такую ​​же настройку конфигурации, но все же он отлично работает ABT / Feature / etc / config.xml << это работает правильно </p>

<global>
    ....
    <blocks>
        <feature>
            <class>ABT_Feature_Block</class>
        </feature>
        <adminhtml>
            <rewrite>
                <widget_grid_column>ABT_Feature_Block_Widget_Grid_Column</widget_grid_column>   
            </rewrite>
        </adminhtml>
    </blocks>
    ....
</global>

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Вот что происходит с Magento при перезаписи класса.

Когда Magento создает экземпляр класса Block, он использует код, подобный следующему

$this->getLayout()->createBlock('adminhtml/widget_grid_column')

Метод createBlock являетсязавод.Magento использует идентификатор

adminhtml/widget_grid_column

для поиска, какой класс должен быть создан.По умолчанию это

Mage_Adminhtml_Block_Widget_Grid_Column

Когда вы создаете свое переписывание, вы говорите Magento

Привет.вместо того, чтобы использовать 'Mage_Adminhtml_Block_Widget_Grid_Column' для 'adminhtml / widget_grid_column', вы должны использовать 'ABT_Background_Block_Widget_Grid_Column'

Это означает, что для любой данной системы один раз может быть записан только один класс:*.В приведенном выше коде вы пытаетесь переписать класс дважды.Только один из ваших переписывает победит.

Быстрый подход, который я выбрал бы, - это сохранить все ваши настройки в одном классе переопределения.

В более общем смысле, я стараюсь избегать переписываний, если это возможно,Это мощная система, но ее следует использовать экономно.Я не особо настраивал сетку, но общий подход, который я бы попытался использовать, состоял бы в том, чтобы изменить макет adminhtml для создания нового класса сетки из моего пользовательского модуля, который расширяет существующий класс сетки, которыйв свою очередь может использовать пользовательские классы столбцов.

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

1 голос
/ 23 ноября 2010

Я не уверен, что правильно установил ваши настройки.

В любом случае, похоже, у вас есть два правила переопределения в одном классе Widget_Grid_Column. Последний загруженный модуль - это ABT_Feature, поэтому правило этого блока перезаписывает правило ABT_Background.

У вас есть два решения:

  1. объединить модуль Feature и Background в один
  2. делает блок Feature зависящим от фонового и обновляет правило перезаписи, чтобы класс ABT_Feature_Block_Widget_Grid_Column расширял ABT_Background_Block_Widget_Grid_Column.
...