Фронтэнд события MODX

30.11.2019 1 Comments Просмотры: 54 Теги: MODX

В MODX все события разделены на две группы — события для сайта (frontend) и события для менеджера сайта (backend). При загрузке страницы MODX инициирует события, разбивая загрузку на этапы. Когда событие срабатывает, MODX запускает все плагины (объекты MODX, содержащие php-код), которые привязаны к данному событию. Давайте рассмотрим все frontend события в порядке их срабатывания.

OnInitCulture

Самое первое событие. Честно говоря, функциональная необходимость в этом событии не совсем понятна — MODX ещё не до конца инициализировался, а следующие 2 метода запускаются сразу же следом, но уже с полностью инициализированным объектом MODX.

OnMODXInit

Срабатывает в конце инициализации MODX после загрузки всех необходимых сервисов (modError, modLexicon, modRegistry, cacheManager), загрузки пакетов из ExtensionPackages и инициализации сессии, в которой определяется пользователь. В плагине, срабатывающем на это событие, можно, например, загружать модели своих компонентов (если они не загружаются через ExtensionPackages). Запускается это событие в классе modX.

Важно знать!

Это событие срабатывает всегда в отличие от других событий не зависимо от режима запроса (обычный или API). Все остальные события срабатывают только для запросов в обычном режиме. API режим используется, если нужно получить доступ к функционалу MODX и xPDO, и обработка текущего запроса не требуется. Часто этот режим используется для аякс запросов. Включается он так — define('MODX_API_MODE', true); (подробнее).

OnHandleRequest

Срабатывает в самом начале обработки запроса пользователя. Данное событие можно использовать для маршрутизации запроса — перенаправлять пользователя на определенную страницу в зависимости от условий (аналогично .htaccess).

Если используется режим дружественных URLS, то происходит поиск идентификатора ресурса с соответствующим алиасом. Если такой не найден, то идёт переадресация на страницу ошибок с вызовом события OnPageNotFound.

OnWebPageInit

Срабатывает в конце обработки запроса перед подготовкой ответа. Статус сайта уже определён и идентификатор ресурса (id) найден (он доступен в $modx->resourceIdentifier).

После этого события MODX загружает ресурс и проверяет права доступа к нему для текущего пользователя. И если проверки не прошли, то запускается одно из 2-х следующих событий — «OnPageNotFound» или «OnPageUnauthorized».

OnPageNotFound

Если ресурс с указанным id не найден, то срабатывает данное событие, формируется ответ «404 Page not found» и пользователь перенаправляется на страницу, указанную в системных параметрах (ключ error_page). Иногда это событие используют для настройки особенной маршрутизации. Вот пример.

OnPageUnauthorized

Событие срабатывает, когда пользователь пытается открыть страницу, доступ к которой ему запрещён. MODX вернёт ответ с кодом «HTTP/1.1 401 Unauthorized» и перенаправит пользователя на страницу для неавторизованных пользователей, указанную в системных настройках (ключ unauthorized_page).

Если проверки прошли успешно, то MODX запускает следующие события.

OnLoadWebPageCache

Это событие сработает, если ресурс загружается из кэша. В MODX 2.3 и выше для доступа к свойствам ресурса можно использовать объект Event.

$modx->event->params['resource']->_content ='Новый контент';// Заменить содержание страницы
$modx->event->params['resource']->pagetitle ='Новый заголовок';// Изменить заголовок страницы

OnLoadWebDocument

Как видно из названия, событие срабатывает после того, как все проверки пройдены и документ загружен, но перед тем, как он будет распарсен (т.е. обработаны все теги). В плагине ресурс доступен через $modx->resource. Любое сообщение, которое возвращает плагин, будет записано в журнал ошибок MODX. В этом событии можно изменить параметры ресурса

// Сделать ресурс некешируемым
$modx->resource->set('cacheable',0);// Или назначить ему другой шаблон
$modx->resource->set('template',6);

OnParseDocument

Событие срабатывает для каждого тега MODX, т.е. столько раз, сколько тегов будет на странице. В плагине содержание тега доступно через переменную $content.

OnBeforeRegisterClientScripts

Добавлено в версии 2.7.0. Оно даёт удобную возможность проверить списки зарегистрированных скриптов и стилей, например, чтобы не их дублировать. Но для полноценной работы в этом режиме необходимо все скрипты и стили регистрировать через соответствующие методы, а не просто вставлять в разметку.

OnWebPagePrerender

MODX инициализирует это событие после того, как все теги обработаны и перед тем, как страница отправится в браузер. На данном этапе можно обработать содержание страницы, например, заменить запрещённые слова.

$words = array("козёл","сволочь");// слова, которые будут заменены
$output =&$modx->resource->_output;// получаем доступ к содержанию страницы
$output = str_replace($words,"<b>нехороший человек</b>",$output);// заменяем слова

OnBeforeSaveWebPageCache

Срабатывает после того, как ресурс уже загружен, но ещё не закэшировался. Если ресурс не кэшируемый, то это событие не сработает.

Доступ к ресурсу возможен через $modx->resource.

OnWebPageComplete

Это самое последнее событие. Оно срабатывает, когда страница уж отправлена в браузер и подготовленный ресурс сохранен в кэш.

Заключение

Теперь, зная последовательность, можно изменять поведение MODX или решать собственные задачи создавая плагины на соответствующие события. Можно создать плагин на каждое событие, а можно один плагин на несколько событий.

switch($modx->event->name){case'OnMODXInit':// ...break;case'OnPageNotFound':// ...break;case'OnWebPagePrerender':// ...break;}

Также в MODX предусмотрена возможность добавления пользовательских событий. Правила их срабатывания определяются программистом при создании сайта. Подробнее про события можно почитать в официальной документации.

Первоисточник modzone.ru

Эта страница полезна?

Да Нет

Эта страницу считают полезной 0% клиентов

Комментарии ()

  1. Юра Фінів 02 декабря 2019, 02:24 # 0