В разделе документации «Обработка событий» работа с событиями и хуками описана очень качественно и подробно. Поэтому я ни как не претендую на замену документации, а просто попробую наглядно показать сказанное в ней на реальных примерах. Считайте, что я сделал напоминалку по теме самому себе, но может она ещё кому-то пригодится.
Хук (hook) – это реакция других компонентов (слушателей) на событие, выполнение действий или обработка полученных данных.
То есть: событие – это сигнал и возможность что-то делать, а хук – это обработчик, выполняющий действия по сигналу.
Благодаря системе событий и хуков можно корректировать происходящее в тех местах, где есть события, выполнять дополнительные действия, а иногда и сильно менять страницу вплоть до редиректа на другой адрес.
События могут инициироваться программистами в любых местах кода, в том числе и в сторонних разработках.
Слушателями выступают только установленные компоненты, которые сообщили о своём желании узнать про определённые события.
Посмотреть список всех зарегистрированных для сайта слушателей и обрабатываемые ими события можно в «Админка – Компоненты – Управление событиями». Там же можно включить/выключить обработчики или изменить последовательность их вызова.
Дефолтная отладка:
Расширенная отладка:
Есть две схемы обработки событий: последовательная и параллельная.
Данные из события передаются в первый хук, затем во второй и так далее по цепочке. Каждый хук может изменить эти данные как угодно, главное – передать их дальше.
Вызывается методом cmsEventsManager::hook
Простой пример последовательной обработки – извещение слушателей о старте движка.
Данные из события передаются сначала в первый хук. Его результаты сохраняются как первый элемент итогового массива результатов с именем контроллера-обработчика в качестве индекса.
Потом те же самые исходные данные передаются во второй хук, а его результат сохраняется как второй элемент итогового массива.
И так по очереди одни и те же исходные данные получают все обработчики.
Вызывается методом cmsEventsManager:: hookAll
Наглядный пример параллельной обработки событий мы все видим когда заходим в Админку – это блоки и графики на её главной странице.
К примеру, событие admin_dashboard_chart (на скрине ниже это Event10) вызывает шесть обработчиков, которые возвращают данные для графика, каждый свою часть
Как видите, принцип работы событий и хуков очень простой и удобный. Если хотите разобраться как это работает на уровне кода, читайте раздел документации «Обработка событий».
Дополнительно можете почитать «Про схему работы движка InstantCMS 2».
Если вам есть что поправить или дополнить – не стесняйтесь, пишите в комментариях.
Чем отличаются события и хуки
Событие (event) – это когда движок (источник) говорит всем заинтересованным слушателям о том, что что-то произошло, что-то сейчас произойдёт или просто приостанавливает ход программы и предлагает другим компонентам возможность что-то сделать, передавая им заранее подготовленные данные.Хук (hook) – это реакция других компонентов (слушателей) на событие, выполнение действий или обработка полученных данных.
То есть: событие – это сигнал и возможность что-то делать, а хук – это обработчик, выполняющий действия по сигналу.
Благодаря системе событий и хуков можно корректировать происходящее в тех местах, где есть события, выполнять дополнительные действия, а иногда и сильно менять страницу вплоть до редиректа на другой адрес.
События могут инициироваться программистами в любых местах кода, в том числе и в сторонних разработках.
Слушателями выступают только установленные компоненты, которые сообщили о своём желании узнать про определённые события.
Посмотреть список всех зарегистрированных для сайта слушателей и обрабатываемые ими события можно в «Админка – Компоненты – Управление событиями». Там же можно включить/выключить обработчики или изменить последовательность их вызова.
Где посмотреть события и хуки
Списки происходящих событий могут быть разными на разных страницах. Посмотреть их можно включив отладку в «Админка – Настройки – Общие – Отладка» и обновив нужную страницу. Для просмотра встроенной отладкой нужно кликнуть ссылку «Отладка» в подвале страницы. «Расширенная отладка» сразу выводит под страницей то, что задано в её настройках: события и/или хуки в логе, разные варианты таблиц.Дефолтная отладка:
Полный список всех событий сразу дефолтная отладка не показывает, желаемое событие нужно искать на двух этих вкладках.
Расширенная отладка:
Есть две схемы обработки событий: последовательная и параллельная.
Последовательная схема
Данные из события передаются в первый хук, затем во второй и так далее по цепочке. Каждый хук может изменить эти данные как угодно, главное – передать их дальше.
Вызывается методом cmsEventsManager::hook
Простой пример последовательной обработки – извещение слушателей о старте движка.
Событие engine_start не передаёт данные, а просто последовательно вызывает хуки из двух компонентов: «Карта сайта» и «Контент», позволяя им на старте обработать url страницы.
Параллельная схема
Данные из события передаются сначала в первый хук. Его результаты сохраняются как первый элемент итогового массива результатов с именем контроллера-обработчика в качестве индекса.
Потом те же самые исходные данные передаются во второй хук, а его результат сохраняется как второй элемент итогового массива.
И так по очереди одни и те же исходные данные получают все обработчики.
Вызывается методом cmsEventsManager:: hookAll
Наглядный пример параллельной обработки событий мы все видим когда заходим в Админку – это блоки и графики на её главной странице.
К примеру, событие admin_dashboard_chart (на скрине ниже это Event10) вызывает шесть обработчиков, которые возвращают данные для графика, каждый свою часть
Вот в этом логе Hook10 и Hook11 возвращают данные по комментариям и контенту
А по окончании события (Event10 end) мы видим, что данные хуков сохранены как шесть элементов итогового массива результатов
Как видите, принцип работы событий и хуков очень простой и удобный. Если хотите разобраться как это работает на уровне кода, читайте раздел документации «Обработка событий».
Дополнительно можете почитать «Про схему работы движка InstantCMS 2».
Если вам есть что поправить или дополнить – не стесняйтесь, пишите в комментариях.
Реклама #
KoRn 3 года назад #
WebMan 3 года назад #
Capitan 3 года назад #
WebMan 3 года назад #
Stich 3 года назад #
Vlad 2 года назад #
Текст есть, картинок нет.