Как мы можем использовать события opencart?
Я много искал о триггерах opencart, но не нашел подходящего примера. В opencart 2.0 есть триггеры, на которых разработчик может перехватывать функцию и выполнять что-то вроде действий Wordpress и фильтров, которые, я думаю. Например, в
catalog/model/checkout/order.php
есть триггер $this->event->trigger('post.order.history.add', $order_id)
Может кто-нибудь помочь мне подключить мою функцию к вышеуказанному триггеру?
Ответы
Ответ 1
Важное примечание: этот ответ относится к OC > 2.0.x.x и < 2.2.x.x.
Проблема заключается в том, что неправильное слово используется (и искалось) - правильным, которое вы должны искать, является событие, и из него выводится прослушиватель событий и событие триггера (к сожалению, не было удачи при попытке найти их, а документация для 2.0 все еще отсутствует).
Теперь я считаю, что весь фон намного понятнее, особенно если у вас есть некоторые знания о событиях из других фреймворков (возможно, jQuery?), но вот просто краткое руководство по работе с событиями (в OC 2.0):
-
сначала нам нужно зарегистрировать прослушиватель событий, например:
$this->event->register('post.order.history.add', 'checkout/order/send_email');
-
в определенных местах запускается событие, например
$this->event->trigger('pre.order.history.add', $order_id);
и
$this->event->trigger('post.order.history.add', $order_id);
-
если зарегистрировано событие (идентифицированное им имя post.order.history.add
), оно будет вызываться при запуске
Для получения дополнительной информации или для ее самостоятельного изучения вы можете взглянуть на system/engine/event.php
(работать с ним сейчас нет).
Ответ 2
Важное примечание: этот ответ относится к 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 только один раз, используя модель extension/event. Вы можете сделать это в своем методе 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. Это учебное пособие, объясняющее, как работает система событий, и содержит простые примеры, которые показывают, как использовать его в своих расширениях.