Ответ 1
Существует несколько событий, связанных с запросом, которые отправляются для большинства запросов на создание страниц и контента. Ниже приведен неполный список в порядке обработки некоторых полезных, и я ожидаю, что другие могут комментировать этот пост с некоторыми другими. Многие из них не подходят для ваших нужд (я отметил полужирным шрифтом ниже, где вы должны начать рассмотрение). Существует также несколько событий, связанных с блочным конкрементом, которые, хотя они могут быть соблюдены с вашей целью, являются общими для каждого блока и действительно не подходят.
-
Первое практическое одноразовое событие
controller_front_init_before
. Это событие отправляется в инициализацию Front Controller в ответ на все отправленные запросы. Поскольку он отправляется до вызова контроллеров действий, наблюдатели этого процесса смогут наблюдать только наблюдатели глобальной зоны. -
Предполагая, что запрос направляется от Front Controller через маршрутизаторы к контроллеру действия, есть некоторые события, которые можно наблюдать до рендеринга в
preDispatch()
- обратите внимание на общий дескриптор событияcontroller_action_predispatch
, который может быть использован для всех событий и двух динамических обработок событий:Mage::dispatchEvent('controller_action_predispatch', array('controller_action' => $this)); Mage::dispatchEvent('controller_action_predispatch_' . $this->getRequest()->getRouteName(), array('controller_action' => $this)); Mage::dispatchEvent('controller_action_predispatch_' . $this->getFullActionName(), array('controller_action' => $this));
-
Как реагирует ответ, может повлиять на доступные события; основные вариации будут исходить из того, используются ли обновления макета для отображения ответа (и как). Например,
core_layout_update_updates_get_after
можно использовать для вставки файла обновления макета в список настроенных файлов обновления макета модуля (редкий, но потенциально полезный случай). Действия контроллера тесно связаны с макетированием, поэтому есть несколько событий, которые могут работать:-
controller_action_layout_load_before
-
controller_action_layout_generate_xml_before
-
controller_action_layout_generate_blocks_before
иcontroller_action_layout_generate_blocks_after
- , последний из которых будет первым применимые к вашим потребностям
-
Предполагая, что renderLayout()
используется во всех действиях, о которых вам небезразлично, есть два события (один общий и один маршрут) который он отправляет:
Mage::dispatchEvent('controller_action_layout_render_before');
Mage::dispatchEvent('controller_action_layout_render_before_'.$this->getFullActionName());
После завершения маршрутизации, диспетчеризации, настройки представления, создания экземпляра блока и рендеринга происходит одно событие последней остановки, которое отправляется передним контроллером до отправки ответа: controller_front_send_response_before
. Это событие не подходит для ваших нужд, но это хорошая книга для события controller_front_init_before
, которое начало этот ответ.