Категории

Система событий

Что такое файл событий?

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

Например:

  • admin/controller/extension/module/your_module.php будет содержать имя метода: notify ()

Определенное действие, полученное от Engine, затем инициирует это конкретное действие, полученное триггером, чтобы завершить запрос в электронном виде.

Что такое поле состояния?

Поле состояния - это то, что определяет активность определенного события.

Что означает порядок сортировки?

Поле порядка сортировки определяет приоритет события перед его инициацией. Он не имеет отношения к событию до или после. Он просто описывает задачу упорядочения на основе точки зрения списка заданий.

Какие параметры необходимо добавить при создании экземпляра события в модуле расширения?

При инициировании события 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, в котором находятся уведомления о заказе по электронной почте между владельцем магазина и покупателем.

При инициировании последующего события есть три параметра, которые необходимо ввести. Следуя примеру с методом notify (), третий параметр будет:

  • $output: вывод уникального индекса из скалярного массива. Например, было создано переопределение события, и выходной результат можно вывести из исходных кодов файла темы и просмотреть в браузере. Он также может быть передан как ссылочная переменная.

Каков наилучший способ проверить результаты с последующим событием?

В файле system / config / catalog.php в нижней части файла по умолчанию комментируются ключ отладки и значение в массиве, поскольку они должны быть активны только для целей отладки. После активации отладки коды можно проверить в файле catalog / controller / event / debug.php. Настоятельно рекомендуется отменить изменения в файле system / config / catalog.php после завершения теста. Если хранилище работает в режиме реального времени, рекомендуется также установить хранилище в режиме обслуживания из меню администратора -> системы -> настройки -> изменить настройки -> вкладка сервера -> режим обслуживания: включено до завершения испытаний.

Где можно следить за событиями?

События можно отслеживать на странице admin -> extensions -> events.

Как начать планирование модуля расширения?

На стороне администратора и на стороне каталога события выполняются независимо. Это означает, что события, создаваемые на стороне администратора, также не отражают события, созданные на стороне каталога. Они оба бегут отдельно. Обе стороны событий могут бегать по-своему, не мешая друг другу.

Контроллер в модель (CTAM) - Пример кода - Инициирование события перед

Далее приведен пример кода, который может быть инициирован как событие 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');

Использование событий

Для использования и события Вы должны:

  1. Установить триггер.
  2. Убедитесь, что действие (контроллер), вызываемое триггером события, существует.

Только контроллеры могут быть вызваны действием. Это означает, что если вы присоединяете действие, которое запускается при вызове события модели, оно может вызывать только контроллер, а не другую модель.

В зависимости от того, вызывается ли загружаемый класс или вызывается контроллером, моделью, представлением, языком или файлом конфигурации, действие должно называться аргументами.

Примеры:

Контроллер

Параметры
Таблицы Тип Описание
$route string (строка) получает объект библиотеки по ключу
$data array (массив) данные, поступающие в контроллер

Возвращает

Если Вы вернете данные, они прекратят любые другие действия события, которые установлены для вызова.

Модель

Параметры (2)

$route

Маршрут, который вызывается.

$route

Данные, поступающие в контроллер.

Возвращает

Если Dы вернете данные, это остановит любые другие действия, которые

Представление

Входные параметры

Просмотр загружаемого представления

данные в data

Язык

Параметры

$route

Маршрут, который вызывается.

Конфиг

В примере мы добавили событие, которое срабатывает при добавлении продукта. Вызываемый файл будет admin / controller / module / demo.php, а метод внутри класса демо-контроллера будет, eventSendAdminAlert()и если вы хотите добавить событие во внешний интерфейс (каталог), используйте catalog / controller / module / demo.php