Как работать с событиями Events в OpenCart
Краткое описание задачи
События (Events) — современный способ расширения OpenCart без правки файлов ядра. В отличие от OCMOD, который модифицирует код на лету, Events позволяют выполнить свой код в определённые моменты (до/после загрузки контроллера, до/после выполнения метода). Разберём, как их использовать.
Как работают Events
В OpenCart есть предопределённые точки входа — триггеры. Когда код доходит до этой точки, OpenCart проверяет, зарегистрированы ли обработчики (Event Handlers) для данного события. Если да — выполняет их.
Примеры триггеров: controller/*/before, controller/*/after, model/*/before, model/*/after, view/*/before, view/*/after.
Регистрация события
События регистрируются в админке: Система → Дизайн → События → Добавить. Укажите:
- Код события — например, controller_checkout_success_before.
- Путь к обработчику — extension/event/my_module/method.
- Статус — включено.
Теперь при каждом переходе на страницу успешного заказа (checkout/success) перед загрузкой контроллера будет выполняться ваш обработчик.
Пример обработчика
Создайте файл catalog/controller/event/my_module.php:
<?php
class ControllerEventMyModule extends Controller {
public function method() {
// ваш код здесь
$this->log->write('Событие сработало!');
}
}
Когда Events, а когда OCMOD
- Events — когда нужно выполнить дополнительное действие (отправить письмо, записать в лог, обновить данные в стороннем сервисе).
- OCMOD — когда нужно изменить существующий код (например, добавить поле в форму или изменить HTML-шаблон).
Рекомендации из практики
Как лучше: Используйте Events для задач, которые не требуют изменения существующего HTML: логирование действий, отправка уведомлений, обновление связанных данных. Events выполняются до или после основного действия — это идеальный механизм для «подписки» на события магазина без правки кода.
Как не делать: Не пытайтесь через Events менять HTML-вывод страницы. Для этого есть OCMOD. Events не меняют содержимое шаблона — они только добавляют или обрабатывают данные. Если вам нужно убрать кнопку из корзины — это задача для OCMOD, не для Events.
Кейс из практики: Магазин мебели хотел логировать все просмотры товаров для анализа популярности. Через OCMOD это было бы громоздко — пришлось бы патчить файл контроллера. Через Event (триггер controller/product/product/before) добавили один обработчик, который пишет просмотр в отдельную таблицу. Решение заняло 15 минут вместо 2 часов.
Нужно настроить Events или OCMOD для OpenCart — закажите доработку: выберем правильный механизм под вашу задачу.
FAQ
Можно ли отключить событие без удаления?
Да, в списке событий в админке есть кнопка «Выключить».
Срабатывают ли события в админке?
Да, триггеры admin/*/before/after работают аналогично.
FAQ
Можно ли использовать Events для изменения ответа API?
Да, через событие controller/*/after. Вы можете перехватить JSON-ответ от REST API и добавить в него свои данные. Это удобно, если нужно расширить API без модификации контроллеров. По практике, этот приём часто используют для добавления кастомных полей в ответы API OpenCart 4.
Итог
Events — для дополнительных действий (логирование, уведомления). OCMOD — для изменения HTML-кода. По практике, правильный выбор между Events и OCMOD экономит часы разработки и упрощает сопровождение.
Комментарии (0)
Пока нет комментариев. Будьте первым!
Оставить комментарий