Подтвердить что ты не робот

Событие Magento на любой загрузке страницы

Мне интересно, есть ли событие, которое запускается один раз при загрузке страницы перед рендерингом в html в magento?

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

Например, я буду использовать это, чтобы доставить канонический тег в заголовок magento.

4b9b3361

Ответ 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 можно использовать для вставки файла обновления макета в список настроенных файлов обновления макета модуля (редкий, но потенциально полезный случай). Действия контроллера тесно связаны с макетированием, поэтому есть несколько событий, которые могут работать:

Предполагая, что 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, которое начало этот ответ.

Ответ 2

http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ это поможет.

app/code/core/Mage/Core/Controller/Varien/Action.php это событие

controller_action_layout_load_before

уволен

app/code/core/Mage/Core/Block/Abstract.php событие

core_block_abstract_to_html_before

над двумя событиями может помочь.

Ответ 3

Мы можем использовать событие controller_front_init_routers с использованием наблюдателя. В этом методе наблюдателя вы можете получить объект запроса следующим образом.

$request = $observer->getEvent()->getData('front')->getRequest();

Ответ 4

Я думаю, что вы ищете это событие controller_action_layout_render_before_RouteName_ControllerName_ActionName

вы также можете регистрировать все события, которые запускаются при загрузке любой страницы из класса Mage в следующей функции

public static function dispatchEvent($name, array $data = array())
    {
        Mage::log($name);
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }