Как мы можем использовать события opencart?

Я много искал о триггерах opencart, но не нашел подходящего примера. В opencart 2.0 есть триггеры, на которых разработчик может подключить функцию и выполнить что-то вроде действия wordpress и фильтров, я думаю. Например, в

catalog/model/checkout/order.php

есть триггер $this->event->trigger('post.order.history.add', $order_id)

может ли кто-нибудь помочь мне подключить мою функцию на вышеуказанном триггере?

2 ответов


Важное Замечание: этот ответ относится к OC >2.0.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 (сейчас больше не с чем работать).


Важное Замечание: этот ответ относится к OC >2.0.X. x и

система событий работает так:

  1. OpenCart загружает список со всеми зарегистрированными обработчиками событий из базы данных. Это происходит в конце индекса.PHP-файл.
  2. затем обработчики событий регистрируются в объекте $event, который является экземпляром класса Event (system/engine / event.в PHP)
  3. тогда метод $event->trigger() находится звонили из разных частей системы. Метод trigger принимает имя события в качестве параметра, и все обработчики событий, зарегистрированные для этого имени события, выполняются.

объект $event можно использовать для регистрации обработчиков событий или запуска событий во время выполнения, но только в особых случаях. Имейте в виду, что вам, скорее всего, потребуется получить доступ к объекту $event через $this->event, а не $event (в зависимости от того, где вам это нужно).

чаще всего, вы необходимо зарегистрировать обработчики событий в таблице БД только один раз с помощью расширение/событие - модели . Вы можете сделать это в своем установить() метод контроллера администратора, например. Что-то вроде этого:--4-->

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