В Magento можно переопределить блок (или помощник или модель, и т.д.) от одного модуля в другом (наиболее распространенный от модуля Magento Adminhtml). Теперь у меня есть проблема, что я хочу переопределить блок, который был уже переопределен некоторым другим расширением. Есть ли любой способ сказать магнето игнорировать <rewrite>
тег в некоторой другой конфигурации модуля similary к <remove>
тег в обновлениях расположения?
Вот конфигурация другого расширения:
<blocks>
<adminhtml>
<rewrite>
<catalog_product_grid>Symmetrics_DeliveryTime_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
</rewrite>
</adminhtml>
</blocks>
Здесь конфигурация моего расширения:
<blocks>
<adminhtml>
<rewrite>
<catalog_product_grid>Namespace_MyModule_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
</rewrite>
</adminhtml>
</blocks>
Я интегрировал функциональность блока от Symmetrics_DeliveryTime
в мой собственный блок и теперь я хочу, чтобы магнето проигнорировал переопределение блока от того модуля.
Там какой-либо магнитный путь состоит в том, чтобы сделать, это или единственный путь должны прокомментировать конфигурацию (который является тем, что я сделал на данный момент) включая всю стычку при обновлении того модуля позже?
Если вы установили, что ваш модуль "зависит" от того, который также выполняет перезапись, ваша конфигурация будет считываться последней, а перезапись должна быть вставлена в соответствующий файл в app/etc/modules, то вы должны иметь:
<config>
<modules>
<Your_Module>
<active>true</active>
<codePool>local</codePool>
<depends>
<Other_Module/>
</depends>
</Your_Module>
<modules>
<config>
Я посмотрел в класс загрузки, и она не похоже на чистое решение. Соответствующий код загрузки классов является это:
if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {
return $this->_classNameCache[$groupRootNode][$group][$class];
}
...
if (isset($config->rewrite->$class)) {
$className = (string)$config->rewrite->$class;
Так выглядит так, как будто нет такой вещи, как переписано перезапись. Тот, который введен в массив конфигурации, является той, который загружается, и когда-то кэшируется, просто возвращается в соответствии с запросом. Я не вижу легкого способа взломать кеш, либо. Вы можете попытаться получить приоритет для вашего модуля (переименовав его в алфавитном порядке, я предполагаю), но это общий взлом и, вероятно, потерпел неудачу загадочно позже. Это убивает возможности конфигурации.
Также неприятно: похоже, что Magento запросиет только сетку в двух местах, в mage_adminhtml_block_catalog_product
(который вы можете легко переопределить), но и в mage_adminhtml_catalog_productcontroller
(d'Oh!) Отказ В зависимости от случая использования, рассмотрите переопределение блока продукта каталога и заменив функцию _PREPREPREALAYOUT ()
самостоятельно. Если вы также хотите переопределить контроллер, вы захотите создать свой собственный контроллер (который спускается из mage_adminhtml_catalog_productcontroller
) и определите перезапись в пределах вашей конфигурации, чтобы направлять admin / catalog / product / grid
к вашему действию. Боль, но, по крайней мере, достигает вашей цели.
Надеюсь, что помогает
Джо