Услуги Создание магазина Доработка Интеграция 1С О компании FAQ Блог Кейсы Отзывы Контакты
А
Автор статьи

Как работать с событиями 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 экономит часы разработки и упрощает сопровождение.

← Предыдущая Как добавить новый способ оплаты в OpenCart Следующая → Как отлаживать OpenCart локально

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

Пока нет комментариев. Будьте первым!

Оставить комментарий

Ваш комментарий появится после проверки модератором.