Как мы можем использовать события 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. Это учебное пособие, объясняющее, как работает система событий, и содержит простые примеры, которые показывают, как использовать его в своих расширениях.