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

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

catalog/model/checkout/order.php

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

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

10

Решение

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

5

Другие решения

Важная заметка: этот ответ относится к OC> 2.0.x.x и <2.2.x.x.

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

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

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

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

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

5

По вопросам рекламы [email protected]