Как устроены события (хуки) в InstantCMS 2
Записываю для себя, как устроены события в InstantCMS — пока разбирался, пришлось перечитать код ядра. Если коротко: почти всё расширение без правки ядра держится на событиях. Ядро и компоненты вызывают событие, а любой контроллер может на него подписаться.
Как подписаться
Подписка хранится в таблице
cms_events
// system/controllers/mystore/hooks/content_before_item.php class onMystoreContentBeforeItem extends cmsAction { public function run($data) { // ...меняем данные... return [$ctype, $item, $fields]; } }
Два вида вызова
- — данные проходят по цепочке обработчиков, каждый возвращает изменённый результат.
- cmsEventsManager::hook()
- — каждый обработчик возвращает свой кусок, результаты собираются в массив (например, HTML для вставки в страницу).
- cmsEventsManager::hookAll()
Главное правило: обработчик должен вернуть данные в том же формате, в каком получил, иначе сломает цепочку для остальных.
Пригодилось? Можно сказать спасибо
Дополнения бесплатные. Если какое-то сэкономило вам время — можно закинуть на кофе. Это необязательно, но очень приятно и мотивирует делать дальше.
100 ₽ · 300 ₽ · 500 ₽
