Могу ли я сделать основной модуль зависимым от пользовательского модуля?
Я подключаюсь к событию catalog_block_product_list_collection
, чтобы добавить дополнительные параметры сортировки в коллекцию. Однако класс Mage_Review_Model_Observer
также прослушивает это событие. Наблюдаемая функция catalogBlockProductCollectionBeforeToHtml
загружает коллекцию продуктов и не позволяет мне вносить дополнительные изменения. Поскольку этот наблюдатель находится внутри ядра, он всегда срабатывает первым.
Я хотел бы, чтобы мой наблюдатель сработал раньше основного наблюдателя, и я считаю, что этого можно достичь, поставив основной модуль в зависимость от моего пользовательский модуль. Возможно ли это?
Я открыт и для других подходов к решению этой проблемы; я не видел других соответствующих событий, которые можно было бы связать.
2 answers
Я думаю, что для этого вы можете использовать концепцию зависимости.
Предположим, что вашим модулем является Yoursite_Yourmodule. Затем используйте следующий код в расположении app/etc/Yoursite_Yourmodule.xml
<config>
<modules>
<Yoursite_Yourmodule>
<active>true</active>
<codePool>local</codePool>
</Yoursite_Yourmodule>
<Mage_Review>
<depends>
<Yoursite_Yourmodule />
</depends>
</Mage_Review>
</modules>
</config>
Что делает этот код, так это то, что модуль Mage_Review будет зависеть от вашего модуля, и, следовательно, ваш модуль будет загружаться раньше, чем основной модуль. Это заставит вашего наблюдателя сначала прислушаться.
Я думаю, что это может решить вашу проблему.
Как отмечает programmer_rkt, зависимости являются одним из способов обработки порядка обработки наблюдателей, влияя на порядок, в котором объединяются файлы конфигурации.
Другой стратегией было бы взять загруженную коллекцию продуктов, сбросить ее и перенести на нее порядок сортировки:
$coll->clear()->unshiftOrder(/*your params*/);