Magento Диспетчерские и Ловящие События - PullRequest
0 голосов
/ 29 января 2010

Я некоторое время имею дело с Magento, и я нахожу это очень интересным и, вероятно, моим будущим выбором рабочего инструмента. Хотя у меня есть некоторые проблемы с пониманием того, что происходит. Если я вызываю www.store.com/catalog/product/view/id/2, то контроллер продукта запускается из основного модуля каталога, в котором продукт выбирается сначала методом _initProduct (), в который отправляется это событие:

Mage::dispatchEvent('catalog_controller_product_init_before', array('controller_action'=>$this));
. Какой класс / метод вызывается? Как я понял, это должен быть метод из класса наблюдателя, который находится в папке Model и должен быть определен в файле etc / config.xml. Некоторые из событий, определенных в config.xml, выполняются автоматически ... (почему?), Где определено событие, используемое в viewAction () из ProductController.php в модуле Каталога? Как я могу отправлять и использовать данные массива для методов наблюдателя, потому что я видел, что некоторые из них содержат этот метод: Mage :: app () -> reinitStores (), который повторно помещает коллекции хранилищ, групп и веб-сайтов, и это не просто. Я нахожу это очень мощным, и я действительно хочу знать о возможностях использования Observers и Events.

1 Ответ

1 голос
/ 31 января 2010

Наблюдатели событий могут быть определены в config.xml для любого модуля, который активен в системе, они не обязательно должны быть определены в том же модуле.

Вы можете отправлять данные наблюдателям событий, добавляя информацию к объекту события, что делается в массиве, определенном как второй аргумент dispatchEvent. Просто добавьте больше элементов в массив, и метод наблюдателя событий может извлечь его из $ наблюдателя-> getEvent (). Вы также можете определять свои собственные события, вызывая тот же метод dispatchEvent.

Одна из полезных вещей в большинстве моделей Magento заключается в том, что они наследуются от класса Mage_Core_Model_Abstract, который включает в себя события для _load_after, _save_before, _save_after, _delete_before и _delete_after. Например, модель продукта имеет catalog_product_load_after, catalog_product_save_before и т. Д.

Надеюсь, что это даст вам больше информации о возможностях использования событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...