переопределение магнитного блока в нескольких модулях (и как проигнорировать другие),

В 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 в мой собственный блок и теперь я хочу, чтобы магнето проигнорировал переопределение блока от того модуля.

Там какой-либо магнитный путь состоит в том, чтобы сделать, это или единственный путь должны прокомментировать конфигурацию (который является тем, что я сделал на данный момент) включая всю стычку при обновлении того модуля позже?

7
задан Uwe Mesecke 29 January 2010 в 12:47
поделиться

2 ответа

Если вы установили, что ваш модуль "зависит" от того, который также выполняет перезапись, ваша конфигурация будет считываться последней, а перезапись должна быть вставлена в соответствующий файл в app/etc/modules, то вы должны иметь:

<config>
  <modules>
    <Your_Module>
      <active>true</active>
      <codePool>local</codePool>
      <depends>
        <Other_Module/>
      </depends>
    </Your_Module>
  <modules>
<config>
9
ответ дан 7 December 2019 в 03:15
поделиться

Я посмотрел в класс загрузки, и она не похоже на чистое решение. Соответствующий код загрузки классов является это:

    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 к вашему действию. Боль, но, по крайней мере, достигает вашей цели.

Надеюсь, что помогает

Джо

0
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: