Event - События
(Статья всё ещё в процессе написания)
Что такое файл событий?
Начиная с Opencart v2.2+, в ядро был добавлен новый движок. Событие - это встроенный механизм, разработанный Software Management, для запуска автоматизированных задач либо от административного, либо от внешнего интерфейса платформы.
Для чего нужен файл событий?
Событие дополняет задачи, которые:
- контроллер
- модель
- представление
- язык
- конфиг
выполняют в фоновом режиме.
В каком сценарии должен быть разработан файл событий?
Владелец магазина может захотеть предоставлять рекламные функции покупателям или получать уведомления по электронной почте, которые ядро не предоставляет «из коробки».
Один из запросов на обслуживание, который владельцы магазинов могут часто спрашивать, - это отправка внутренних уведомлений, когда клиенты заполняют информацию во время оформления заказа. Событие может выполнить задачу, захватив ожидаемые результаты во время оформления заказа для, практически, всех возможных вариантов.
Один сценарий будет о добавлении товара в магазин со страницы администратор -> каталог -> товары. Как всем известно, файлы ядра нельзя редактировать. Однако файлы событий могут быть захвачены до (before) или после (after) того, как произошло какое-либо действие. Это означает, что файлы ядра платформы больше нет необходимости редактировать.
Какие файлы обрабатывают инициированные события?
Файл system/engine/event.php - это основной файл движка, в котором производится обработка и вызов всех событий, которые находятся в таблице базы данных oc_event в активном статусе. Этот файл движка может делать следующее:
- Зарегистрировать триггер и действие
- Запустить событие и аргументы
- Отменить регистрацию триггера и маршрута
- Очистить триггер
Как триггеры, действия и порядок сортировки запускаются автоматически в каталоге?
Файлы admin/controller/startup/event.php и catalog/controller/startup/event.php являются теми местами, где триггеры, действия и порядки сортировки автоматически регистрируются движком при запуске. Папки admin/controller/event и catalog/controller/event содержат основные события, инициируемые автоматически по умолчанию после успешной установки Opencart.
Что такое код события?
Код события - это технический идентификационный тег или заголовок, который определяет цель его использования. Пример похож на страницу admin -> catalog -> products с мета-заголовками, но в более техническом смысле.
Что такое триггер?
Триггер - это определенный маршрут от источника, где либо; контроллер, модель, язык или тема могут быть запрошены из. Например, такой сценарий, когда владельцу магазина может потребоваться указать триггер в отношении информационных писем, которые необходимо отправлять определенным группам покупателей. Модель запрашивается, но, либо "до" (before) или "после" (after) завершения загрузки этой модели, владелец магазина может захотеть добавить один или несколько аспектов уведомления своих клиентов во время выполнения источника триггера, из локальной базы данных или от надежного поставщика услуг.
Что такое действие?
Действие - это определенный маршрут к месту назначения, из которого исходный маршрут должен отправить уведомление о событии. Например, путем создания модуля расширения в папках admin/controller/extension/module или в папках catalog/controller/extension/module необходимо назначить название метода вместе с местоположением маршрута.
Например:
- admin/controller/extension/module/your_module.php будет содержать название метода: notify()
Определенное действие, полученное от движка, инициирует это конкретное действие, полученное триггером, чтобы завершить запрос в электронном виде.
Что такое поле состояния?
Поле статуса - это то, что определяет активность определенного события.
Что означает порядок сортировки?
Поле порядка сортировки определяет приоритет события перед его инициацией. Он не имеет отношения к событию до (before) или после (after). Он просто описывает задачу упорядочения на основе точки зрения списка заданий.
Какие параметры должны быть добавлены при создании экземпляра события в модуле расширения?
При инициировании события before необходимо ввести два параметра. Следуя примеру с методом notify(), два параметра будут следующими:
- $route: происходит от запроса маршрута (route = x). Он также может быть передан как ссылочная переменная.
- $args: скалярный массив, использующий индексные числа, полученные из источника. Например, при добавлении записи заказа в историю: $this->model_checkout_order->addOrderHistory($order_id, $order_status_id). Он также может быть передан как ссылочная переменная.
В этом случае скалярный массив $args будет содержать: $args[0] (order_id), $args[1] (order_status_id). Дополнительную информацию можно найти в файле catalog;/controller/mail/order.php, в котором находятся уведомления о заказе по электронной почте между владельцем магазина и покупателем.
При инициировании события after есть три параметра, которые необходимо ввести. Следуя примеру с методом notify(), третий параметр будет:
- $output: вывод уникального индекса из скалярного массива. Например, было создано переопределение события, и результат может быть выведен из исходных кодов файла темы и доступен для просмотра в браузере. Он также может быть передан как ссылочная переменная.
Каков наилучший способ проверить результаты с событием after?
В файле system/config/catalog.php, внизу файла, ключ отладки и значение в массиве комментируются по умолчанию, поскольку они должны быть активны только для целей отладки. После активации отладки коды можно проверить в файле catalog/controller/event/debug.php. Настоятельно рекомендуется отменить изменения в файле system/config/catalog.php после завершения теста. Если магазин работает в режиме реального времени, рекомендуется также установить магазин в режим обслуживания из меню администратор -> система -> настройки -> редактировать настройки -> вкладка сервер -> режим обслуживания: включено до завершения тестирования.
Где можно следить за событиями?
События можно отслеживать на странице Админ - > Расширения - > События.
Как начать планирование модуля расширения событий?
На стороне администратора и на стороне каталога события выполняются независимо. Это означает, что события, создаваемые на стороне администратора, не зависят от событий, созданных на стороне каталога. Они выполняются независимо друг от друга и не мешают друг другу.
Controller-to-a-Model (CTAM) - Пример кода - Инициирование события before
Ниже приведен пример кода, который может быть инициирован как событие 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'); // Пока продукт добавляется, мы добавляем следующее утверждение ниже, загружая модель продукта каталога // используя маршрут (необязательно) и скалярный массив $ args. } }
Тот же метод можно использовать с событием after, просто заменив:
// 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);
- Инициировать событие before.
$this->model_setting_event->addEvent('product_notification', 'admin/model/catalog/product/addProduct/before', 'extension/module/product_notification/addProduct');
- Чтобы инициировать событие after, просто замените это на:
$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)
Application - Приложение
Необходимо установить для каталога или администратора.
Type - Тип
- controller - контроллер
- model - модель
- view - представление
- language - язык
- config - конфигурация
Folder - Папка
Папка является необязательной в зависимости от того, находится ли путь к загружаемому файлу внутри подпапки или нет.
File - Файл
Должно быть название файла.
Method - Метод
Метод используется только с контроллерами и моделями.
Событие срабатывает, когда вызывается метод контроллера или модели. Контроллеры не всегда требуют метода, но модели требуют.
Before / After - До/После
Устанавливает, когда событие запускается, до или после загрузки файла или вызова метода.
Action - Действие
Действие - это объект, который имеет в своем конструкторе маршрут к вызываемому контроллеру действий. Внутри контроллера вы можете манипулировать маршрутом, данными, аргументами и возвратом данных контроллера, модели, вызываемого представления.
Пример
folder/file/method
Если метод не установлен, событие будет вызывать index.
Удаление вашего события
Когда ваш модуль будет удален, вам необходимо убедиться, что вы удалили все события, которые вы зарегистрировали.
Удалить ваше событие
$this->model_setting_event->deleteEvent('my_theme');
Использование событий
Для использования и события вы должны:
- Установить триггер.
- Убедиться, что действие (контроллер), вызываемое триггером события, существует.
Только контроллеры могут быть вызваны действием. Это означает, что если вы присоединяете действие, которое должно запускаться при вызове события модели, оно может вызывать только контроллер, а не другую модель.
В зависимости от того, загружаемый класс загружается или вызывается контроллером, моделью, представлением, языком или файлом конфигурации, действие должно вызываться аргументами.
Примеры:
Controller - Контроллер
Parameters
Tables Type Description
$route string получает объект библиотеки по ключу $data array Данные, поступающие в контроллер
Return
Если вы вернете данные, они прекратят любые другие действия события, которые установлены для вызова.
Model - Модель
Параметры (2)
$route
Маршрут, который вызывается.
$data
Данные, поступающие в контроллер.
Return
Если вы вернете данные, это остановит любые другие действия, которые установлены для вызова
View - Представление
Входные параметры
Просмотр загружаемого представления
data the data
Language - Язык
Параметры
$route
Маршрут, который вызывается.
Config - Конфигурация
В примере добавилено событие, которое срабатывает при добавлении товара. Вызванный файл будет admin/controller/module/demo.php , а метод внутри класса демо-контроллера будет
eventSendAdminAlert()
и если вы хотите добавить событие в интерфейс (каталог), используйте catalog/controller/module/demo.php