Как мы можем использовать события 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 и
система событий работает так:
- OpenCart загружает список со всеми зарегистрированными обработчиками событий из базы данных. Это происходит в конце индекса.PHP-файл.
- затем обработчики событий регистрируются в объекте $event, который является экземпляром класса Event (system/engine / event.в PHP)
- тогда метод $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. Это учебник, объясняющий, как работает система событий и имеет простые примеры, которые показывают вам, как использовать его в своих расширениях.