Важное примечание: этот вопрос применимо к OC> 2.0.x.x и < 2.2.x.x.
Система событий работает следующим образом:
- OpenCart загружает список всех зарегистрированных обработчиков событий из базы данных. Это происходит в конце файла index.php.
- Затем обработчики событий регистрируются в объекте $ event, который является экземпляром класса Event (system/engine/event.php)
- Затем метод $ event-> trigger() вызывается из разных части системы.Метод триггера принимает имя события в качестве параметра, и все обработчики событий, зарегистрированные для этого имени события, выполняются.
Вы можете использовать объект $ event для регистрации обработчиков событий или событий запуска во время выполнения, но делать это только в особых случаях. Имейте в виду, что вам, скорее всего, потребуется доступ к объекту $ event через $ this-> event, а не $ event (в зависимости от того, где он вам нужен).
Чаще всего вам необходимо будет зарегистрировать обработчики событий в таблице db только один раз, используя расширение/событие. Вы можете сделать это в своем методе install() вашего контроллера администратора. Нечто подобное:
public function install() {
$this->load->model('extension/event');
$this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');
$this->model_extension_event->addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add');
}
обработчики событий являются третьим параметром метода addEvent(), и они находятся в виде стандартного маршрута.
Информация о мероприятии здесь: http://isenselabs.com/posts/opencart2-event-system-tutorial. Это учебное пособие, объясняющее, как работает система событий, и содержит простые примеры, которые показывают, как использовать его в своих расширениях.
Внимание всем, кто приходит к этому вопросу: не используйте мероприятия! Все триггеры были удалены из opencart 2.2. Я не знаю, что они все еще будут в ближайшем будущем ... – redochka
Мне потребовалось некоторое время, чтобы выяснить, но старые триггеры не были удалены в 2.2, но заменены общей системой, которая действует на ВСЕ вызовы модели (и контроллеры, которые проходят через реестр и загрузчик). Это делается loader.php, который перехватывает все вызовы для объектов модели и запускает до и после триггера. Имена событий были изменены: post.order.history.add теперь является каталогом/моделью/checkout/order/addOrderHistory/after (названным в честь модели и метода, которые запускают его). Дополнительная информация: https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x – fietserwin
События были введены в версии 2.0, * полностью * изменены в 2.3 и снова изменены в версии 3.0. Отличная концепция, просто недостаточно стабильная. –