Как мне убедиться, что наблюдатель моего добавочного номера вызывается последним из всех наблюдателей, зарегистрированных для одного и того же события?


Каждое расширение может добавлять наблюдателей, так что в итоге можно получить несколько <наблюдателей> для одного и того же <события>.

Иногда мне нужно быть уверенным, что все необходимые данные инициализируются, когда включается моя функция наблюдателя. Поэтому я хочу, чтобы моего наблюдателя называли последним из группы.

Или иногда я хочу, чтобы он был первым или, по крайней мере, перед наблюдателем ядра, чтобы все важные для меня данные были там до того, как наблюдатель ядра сохранит их.

Могу ли я повлиять на порядок в каких функциях наблюдателя выполняются для одного и того же события?

Author: fris, 2015-07-07

1 answers

Единственная возможность достичь этого, объявив Зависимость модуля1 в вашем дополнительном номере. Ниже я покажу вам два случая, которые помогут вам эффективно УПОРЯДОЧИТЬ своего наблюдателя.

Сценарий

Давайте назовем наш модуль Namespace_Module. Предположим, вы наблюдаете за событием some_example_event_to_observe. Теперь предположим, что нижеприведенные модули также наблюдают то же самое событие.

  • MAGE_CMS
  • маг_кастомер
  • Модуль пространства имен
  • somenamespace_сомодуль
  • Какой-то другой модуль_сомеотермодуля

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

Случай - I

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

File: app\etc\modules\Namespace_Module.xml
<config>
    <modules>
        <Namespace_Module>
            <active>true</active>
            <codePool>community</codePool>
            <depends>
                <SomeNamespace_SomeModule />
            </depends>
        </Namespace_Module>
    </modules>
</config>

См. тег <depend />. Мы только что указали там, что наш модуль зависит от SomeNamespace_SomeModule. Поэтому Magento сначала обработает наблюдателя SomeNamespace_SomeModule, а затем рассмотрит нашего наблюдателя.

Случай - II

Мы хотим, чтобы наш наблюдатель наконец прислушался. В этом случае файл активации нашего модуля будет выглядеть как

File: app\etc\modules\Namespace_Module.xml
<config>
    <modules>
        <Namespace_Module>
            <active>true</active>
            <codePool>community</codePool>
            <depends>
                <SomeNamespace_SomeModule />
                <SomeOtherComapny_SomeOtherModule />
            </depends>
        </Namespace_Module>
    </modules>
</config>

Поскольку мы указали, что наш модуль теперь зависит от SomeNamespace_SomeModule и SomeOtherComapny_SomeOtherModule, наш модуль будет загружаться последним.

Случай - III

Нам нужно сначала запустить наше событие. В этом случай

File: app\etc\modules\Namespace_Module.xml
<config>
    <modules>
        <Namespace_Module>
            <active>true</active>
            <codePool>community</codePool>
        </Namespace_Module>
        <Mage_Cms>
            <depends>Namespace_Module</depends>
        </Mage_Cms>
        <Mage_Customer>
            <depends>Namespace_Module</depends>
        </Mage_Customer>
    </modules>
</config>

Здесь мы делаем наш модуль зависимостью для основных модулей Mage_Cms и Mage_Customer. Это заставит наблюдателя нашего модуля слушать первым.

Я надеюсь, что теперь это будет иметь смысл. Дайте мне знать, если у вас возникнут еще какие-либо сомнения.


1 : Зависимость от модуля это метод, который используется в Magento для упорядочивания загрузки модулей на основе зависимости, указанной в файлах активации (XML-файлах которые мы можем найти внутри app/etc/modules/)

 2
Author: Rajeev K Tomy, 2015-07-09 06:33:53