После выпуска OpenCart v2.2 + в ядро был добавлен новый движок. Событие - это встроенный механизм, разработанный Software Management, для запуска автоматизированных задач либо от администратора, либо от внешнего интерфейса платформы.
Событие завершает задачи, которые:
необходимо выполнять на серверной стороне магазина.
Владелец магазина может захотеть предоставлять рекламные функции покупателям или получать уведомления по электронной почте, которые ядро специально не предоставляет «из коробки».
Один из запросов на обслуживание, о котором владельцы магазинов могут часто публиковать, - это отправка внутренних уведомлений, когда клиенты заполняют информацию во время оформления заказа. Событие может выполнить задачу, захватив ожидаемые результаты во время проверки почти неограниченных возможностей.
Один сценарий будет о добавлении товара в магазин со страницы администратора->каталог->товары. Как мы все должны знать, к настоящему времени основные файлы никогда не должны редактироваться. Однако файлы событий могут быть захвачены до или после того, как произошло какое-либо действие, что означает, что основные файлы больше не нужно редактировать в хранилище.
Файл `system/engine/event.php` - это основной файл Engine, в котором все события вызываются после инициирования события в таблице базы данных oc_event с активным состоянием. Этот файл движка может делать следующее:
Файлы `admin/controller/startup/event.php` и `catalog/controller/startup/event.php` являются обоими местоположениями, где триггеры, действия и порядки сортировки автоматически регистрируются Engine при запуске. Папки `admin/controller/event` и `catalog/controller/event` являются основными событиями, инициируемыми автоматически по умолчанию после успешной установки Opencart.
Код - это технический идентификационный тег или заголовок, который определяет цель его использования. Пример похож на страницу `admin->catalog->products` с мета-заголовками, но в более технических терминах.
Триггер - это определенный маршрут от источника, где либо; контроллер, модель, язык или тема могут быть запрошены из. Например, один сценарий, когда владельцу магазина может потребоваться указать триггер в отношении информационных бюллетеней, которые необходимо отправлять определенным группам покупателей. Модель запрашивается, но, либо ** до ** или ** после ** загрузки этой модели завершается, владелец магазина может захотеть добавить один или несколько аспектов, чтобы уведомить своих клиентов во время выполнения триггерного источника. из локальной базы данных или от надежного поставщика услуг.
Действие - это определенный маршрут к месту назначения, из которого исходный маршрут должен отправить уведомление о событии. Например, путем создания модуля расширения в папках admin/controller/extension/module или в папках catalog/controller/extension/module необходимо назначить имя метода вместе с местоположением маршрута.
Например:
Определенное действие, полученное от Engine, затем инициирует это конкретное действие, полученное триггером, чтобы завершить запрос в электронном виде.
Поле состояния - это то, что определяет активность определенного события.
Поле порядка сортировки определяет приоритет события перед его инициацией. Он не имеет отношения к событию до или после. Он просто описывает задачу упорядочения на основе точки зрения списка заданий.
При инициировании события before необходимо ввести два параметра. Следуя примеру с методом notify (), два параметра будут следующими:
В этом случае скалярный массив $args будет содержать: $args[0] (order_id), $args[1] (order_status_id). Дополнительную информацию можно найти в catalog/controller/mail/order.php, в котором находятся уведомления о заказе по электронной почте между владельцем магазина и покупателем.
При инициировании последующего события есть три параметра, которые необходимо ввести. Следуя примеру с методом notify (), третий параметр будет:
В файле system / config / catalog.php в нижней части файла по умолчанию комментируются ключ отладки и значение в массиве, поскольку они должны быть активны только для целей отладки. После активации отладки коды можно проверить в файле catalog / controller / event / debug.php. Настоятельно рекомендуется отменить изменения в файле system / config / catalog.php после завершения теста. Если хранилище работает в режиме реального времени, рекомендуется также установить хранилище в режиме обслуживания из меню администратора -> системы -> настройки -> изменить настройки -> вкладка сервера -> режим обслуживания: включено до завершения испытаний.
События можно отслеживать на странице admin -> extensions -> events.
На стороне администратора и на стороне каталога события выполняются независимо. Это означает, что события, создаваемые на стороне администратора, также не отражают события, созданные на стороне каталога. Они оба бегут отдельно. Обе стороны событий могут бегать по-своему, не мешая друг другу.
Далее приведен пример кода, который может быть инициирован как событие before , из контроллера, чтобы вызвать модель, в данном случае, для автоматической обработки продуктов, со ссылочными переменными в параметрах метода, в admin / controller / extension / module Файл /product_notification.php (необходимо создать):
<?php
class ControllerExtensionModuleProductNotification extends Controller {
// admin/model/catalog/product/addProduct/before
public function addProduct($route, $args) {
$this->load->model('catalog/product');
// While the product being added, we add the next statement below by loading the catalog product model
// by using the route (optional) and the scalar array of $args.
}
}
Тот же метод можно использовать с последующим событием, просто заменив:
// admin/model/catalog/product/addProduct/before
public function addProduct($route, $args) {
с:
// admin/model/catalog/product/addProduct/after
public function addProduct($route, $args, $output) {
Начиная с выпуска Opencart, v2.2 и выше, система событий была обновлена, так что к контроллерам, моделям, представлениям, языку и конфигурации может быть присоединено событие. В предыдущих версиях только данные модели могли быть переопределены.
Когда Ваш модуль установлен, Вы захотите зарегистрировать все события, которые нужны Вашему скрипту.
$this->load->model('setting/event');
$this->model_setting_event->addEvent($code, $trigger, $action);
$this->model_setting_event->addEvent('product_notification', 'admin/model/catalog/product/addProduct/before',
'extension/module/product_notification/addProduct');
$this->model_setting_event->addEvent('product_notification', 'admin/model/catalog/product/addProduct/after', 'extension/module/product_notification/addProduct');
Код должен быть уникальным кодом, уникальным только для Ваших расширений. Вы можете использовать свое имя пользователя OpenCart, а затем имя расширения.
username_theme
Код также используется для удаления события, которое Вы добавили, если пользователь решит удалить Ваше расширение.
Триггер - это вызов, выполняемый для вызываемого или загружаемого контроллера, модели, представления, языка или файла конфигурации.
Триггер состоит из множества частей:
application / type / folder / file / method / before or after
Должен быть установлен для каталога или администратора.
Папка является необязательной в зависимости от того, находится ли путь к загружаемому файлу внутри подпапки или нет.
Имя файла вызывается.
Метод используется только с контроллерами и моделями.
Триггер события, когда вызывается метод контроллера или модели. Контроллеры не всегда требуют метода, но модели требуют.
Устанавливает погоду, когда событие запускается до или после загрузки файла или вызова метода.
Действие - это объект, который имеет в своем конструкторе маршрут к вызываемому контроллеру действий. Внутри контроллера Вы можете манипулировать маршрутом, данными, аргументами и возвратом данных контроллера, модели, вызываемого вида.
folder/file/method
Если метод не установлен, он будет вызывать index.
Когда Ваш модуль будет удален, Вам необходимо убедиться, что Вы удалили все события, которые Вы зарегистрировали.
$this->model_setting_event->deleteEventByCode('my_theme');
Для использования и события Вы должны:
Только контроллеры могут быть вызваны действием. Это означает, что если вы присоединяете действие, которое запускается при вызове события модели, оно может вызывать только контроллер, а не другую модель.
В зависимости от того, вызывается ли загружаемый класс или вызывается контроллером, моделью, представлением, языком или файлом конфигурации, действие должно называться аргументами.
Примеры:
Таблицы | Тип | Описание |
$route |
string (строка) |
получает объект библиотеки по ключу |
$data |
array (массив) |
данные, поступающие в контроллер |
Возвращает
Если Вы вернете данные, они прекратят любые другие действия события, которые установлены для вызова.
$route
Маршрут, который вызывается.
$route
Данные, поступающие в контроллер.
Возвращает
Если Dы вернете данные, это остановит любые другие действия, которые
Входные параметры
Просмотр загружаемого представления
данные в data
$route
Маршрут, который вызывается.
В примере мы добавили событие, которое срабатывает при добавлении продукта. Вызываемый файл будет admin / controller / module / demo.php, а метод внутри класса демо-контроллера будет, eventSendAdminAlert()и если вы хотите добавить событие во внешний интерфейс (каталог), используйте catalog / controller / module / demo.php