Таблица oc_event
Таблица oc_event является ядром системы событий (Event System) в OpenCart, начиная с версии 2.x. Она заменяет систему модификаторов (Modification System) VQMod и служит для подключения пользовательского кода (обычно из установленных модулей-расширений) к стандартным системным событиям, таким как "после сохранения заказа", "до отображения страницы" и многим другим.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
event_id |
int |
Уникальный идентификатор события (первичный ключ с автоинкрементом). |
code |
varchar(128) |
Уникальный код события, по которому система находит и запускает обработчики. Связывает событие с конкретным расширением. Например: module_newsletter.
|
trigger |
text |
Путь к системному событию (триггеру), которое будет вызывать метод. Определяет, *когда* должен сработать код. Например: catalog/model/checkout/order/addOrder/after.
|
action |
text |
Путь к методу, который должен быть выполнен при срабатывании события. Определяет, *что* должно выполниться. Например: extension/module/newsletter/send.
|
status |
tinyint(1) |
Статус события: 1 - активно (включено), 0 - неактивно (выключено). Позволяет временно отключать обработчики событий без их удаления из базы данных.
|
sort_order |
int |
Порядок сортировки для выполнения событий, если на одно системное событие подписано несколько обработчиков. События с меньшим значением выполняются первыми. |
Как это работает
Система событий OpenCart работает по принципу "издатель-подписчик". Ядро системы (framework) является "издателем" - оно генерирует события в ключевых точках выполнения кода (например, до или после загрузки модели, сохранения данных, отображения HTML-кода). Модули-расширения выступают в роли "подписчиков" - они регистрируют в таблице oc_event свои обработчики на нужные им события.
Процесс работы выглядит следующим образом:
1. При установке модуля через установщик OpenCart (OCMOD) или вручную в таблицу oc_event добавляется одна или несколько записей. В поле trigger указывается системное событие, а в поле action - путь к методу, который должен быть вызван.
2. Во время работы магазина, когда исполнение кода доходит до точки, для которой зарегистрировано событие (например, после метода addOrder в модели заказа), система проверяет таблицу oc_event на наличие активных обработчиков для этого события.
3. Все найденные активные обработчики (status = 1) сортируются по sort_order и выполняются последовательно.
Стандартные префиксы путей для триггеров:
- admin/ - события в админ-панели.
- catalog/ - события на витрине магазина (front-end).
- system/ - события на уровне системной библиотеки.
Стандартные суффиксы для моментов вызова:
- /before - событие вызывается *до* выполнения основного метода.
- /after - событие вызывается *после* выполнения основного метода.
Пример SQL-запроса
Посмотреть все активные события, связанные с обработкой заказов:
SELECT *
FROM oc_event
WHERE status = 1
AND trigger LIKE '%order%'
ORDER BY sort_order ASC;
Смотрите также
-
таблицу
oc_modification,
которая хранит OCMOD-модификации для переопределения core-файлов -
таблицу
oc_extension,
которая хранит список установленных расширений -
таблицу
oc_setting,
которая хранит настройки модулей и системы