Что такое события и хуки (без PHP и с картинками)

+13
477
В разделе документации «Обработка событий» работа с событиями и хуками описана очень качественно и подробно. Поэтому я ни как не претендую на замену документации, а просто попробую наглядно показать сказанное в ней на реальных примерах. Считайте, что я сделал напоминалку по теме самому себе, но может она ещё кому-то пригодится.


Чем отличаются события и хуки

Событие (event) – это когда движок (источник) говорит всем заинтересованным слушателям о том, что что-то произошло, что-то сейчас произойдёт или просто приостанавливает ход программы и предлагает другим компонентам возможность что-то сделать, передавая им заранее подготовленные данные.
Хук (hook) – это реакция других компонентов (слушателей) на событие, выполнение действий или обработка полученных данных.

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

Благодаря системе событий и хуков можно корректировать происходящее в тех местах, где есть события, выполнять дополнительные действия, а иногда и сильно менять страницу вплоть до редиректа на другой адрес.

События могут инициироваться программистами в любых местах кода, в том числе и в сторонних разработках.
Слушателями выступают только установленные компоненты, которые сообщили о своём желании узнать про определённые события.

Посмотреть список всех зарегистрированных для сайта слушателей и обрабатываемые ими события можно в «Админка – Компоненты – Управление событиями». Там же можно включить/выключить обработчики или изменить последовательность их вызова.

Где посмотреть события и хуки

Списки происходящих событий могут быть разными на разных страницах. Посмотреть их можно включив отладку в «Админка – Настройки – Общие – Отладка» и обновив нужную страницу. Для просмотра встроенной отладкой нужно кликнуть ссылку «Отладка» в подвале страницы. «Расширенная отладка» сразу выводит под страницей то, что задано в её настройках: события и/или хуки в логе, разные варианты таблиц.

Дефолтная отладка:
Полный список всех событий сразу дефолтная отладка не показывает, желаемое событие нужно искать на двух этих вкладках.

Расширенная отладка:


Есть две схемы обработки событий: последовательная и параллельная.

Последовательная схема



Данные из события передаются в первый хук, затем во второй и так далее по цепочке. Каждый хук может изменить эти данные как угодно, главное – передать их дальше.
Вызывается методом cmsEventsManager::hook

Простой пример последовательной обработки – извещение слушателей о старте движка.
Событие engine_start не передаёт данные, а просто последовательно вызывает хуки из двух компонентов: «Карта сайта» и «Контент», позволяя им на старте обработать url страницы.

Параллельная схема



Данные из события передаются сначала в первый хук. Его результаты сохраняются как первый элемент итогового массива результатов с именем контроллера-обработчика в качестве индекса.
Потом те же самые исходные данные передаются во второй хук, а его результат сохраняется как второй элемент итогового массива.
И так по очереди одни и те же исходные данные получают все обработчики.
Вызывается методом cmsEventsManager:: hookAll

Наглядный пример параллельной обработки событий мы все видим когда заходим в Админку – это блоки и графики на её главной странице.
К примеру, событие admin_dashboard_chart (на скрине ниже это Event10) вызывает шесть обработчиков, которые возвращают данные для графика, каждый свою часть
Вот в этом логе Hook10 и Hook11 возвращают данные по комментариям и контенту
А по окончании события (Event10 end) мы видим, что данные хуков сохранены как шесть элементов итогового массива результатов

Как видите, принцип работы событий и хуков очень простой и удобный. Если хотите разобраться как это работает на уровне кода, читайте раздел документации «Обработка событий».

Дополнительно можете почитать «Про схему работы движка InstantCMS 2».

Если вам есть что поправить или дополнить – не стесняйтесь, пишите в комментариях.
0
Реклама Реклама #
0
KoRn KoRn 7 месяцев назад #
Спасибо, чем рисовали схему?
0
WebMan WebMan 7 месяцев назад #
Пожалуйста! Не поверите, MS Word smile
+1
Capitan Capitan 7 месяцев назад #
ждем статью. Как создать свой хук (для чайников) Например математическая обработка значения полей.
+1
WebMan WebMan 7 месяцев назад #
Планируется...
0
Stich Stich 7 месяцев назад #
Круто, спасибо большое за информацию, очень ценно, мне точно пригодится, в закладки однозначно!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.