Как мне убедиться, что наблюдатель моего добавочного номера вызывается последним из всех наблюдателей, зарегистрированных для одного и того же события?
Каждое расширение может добавлять наблюдателей, так что в итоге можно получить несколько <наблюдателей> для одного и того же <события>.
Иногда мне нужно быть уверенным, что все необходимые данные инициализируются, когда включается моя функция наблюдателя. Поэтому я хочу, чтобы моего наблюдателя называли последним из группы.
Или иногда я хочу, чтобы он был первым или, по крайней мере, перед наблюдателем ядра, чтобы все важные для меня данные были там до того, как наблюдатель ядра сохранит их.
Могу ли я повлиять на порядок в каких функциях наблюдателя выполняются для одного и того же события?
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/
)