Мы не работаем с клиентами из страны-оккупанта РФ и их пособников - РБ.

Нет войне в Украине! Остановите убийства мирных жителей Украины! Остановите путина!

Система событий (Events) в OpenCart 4

OpenCartBot - 12.02.2023
Система событий (Events) в OpenCart 4

CMS OpenCart 4.0 имеет систему событий (Events), позволяющую выполнять определенные действия в определенные моменты выполнения кода. Это позволяет расширять функциональность OpenCart без изменения исходного кода.

Когда происходит событие, система событий вызывает все зарегистрированные обработчики этого события. Каждый обработчик может иметь свой код для обработки этого события.

OpenCart имеет встроенные события, такие как "catalog/view/common/header/before", "catalog/controller/product/product/before", "admin/controller/catalog/product/before" и т. д. Вы можете использовать эти события изменяют поведение OpenCart или добавляют собственный функционал.

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

Какая разница между event и ocmod?

Event и ocmod – это два разных механизма расширения функциональности OpenCart.

Event используется для реакции на определенные события, происходящие в системе, например при добавлении товара в корзину или при создании заказа. Обработчик события, зарегистрированный в системе, может выполнять определенные действия при возникновении этих событий. Event не изменяет основной код OpenCart, поэтому его использование безопасно и не влияет на стабильность системы.

Ocmod, с другой стороны, позволяет изменять основной код OpenCart путем применения патчей к существующему коду. Это может повлиять на стабильность системы, особенно при обновлении системы до новой версии. Использование ocmod позволяет изменять основной код системы, поэтому имеет более глубокие возможности для расширения функциональности системы.

Основное различие между event и ocmod состоит в том, что event позволяет реагировать на события в системе, в то время как ocmod позволяет изменять основной код системы. Оба механизма имеют свои преимущества и недостатки и должны использоваться в зависимости от потребностей проекта и обстоятельств. Но в модулях OpenCart 4 ocmod больше не поддерживается, поэтому начиная с этой ветки нужно использовать только систему событий (Events).

Преимущества Events:

  1. Более гибкий подход к изменениям кода: при использовании системы событий вам не нужно вносить изменения в основной код OpenCart или устанавливать ocmod, что делает расширение более гибким и удобным для разработки и поддержки.
  2. Скорость: система событий позволяет зарегистрировать обработчик события и выполнять его при возникновении события, что может быть быстрее, чем установка ocmod и переработка файлов.
  3. Совместимость: система событий обычно сохраняет совместимость с предыдущими версиями OpenCart, в то время как ocmod может столкнуться с проблемами установки или работы на различных версиях OpenCart.
  4. Легкость использования: система событий позволяет разработчикам добавлять новый функционал или изменять поведение OpenCart, не имея большого опыта в разработке расширений.

Система событий полезна в OpenCart для расширения функционала и изменения поведения без необходимости вносить изменения в код OpenCart или устанавливать ocmod. В то же время ocmod может быть полезен для выполнения более глубоких изменений в коде OpenCart.

Недостатки Events:

  1. Ограничение изменения HTML: с помощью системы событий нельзя вносить изменения в HTML-код страницы, что можно сделать с использованием ocmod.
  2. Сложность: некоторые типы событий могут быть более сложными в использовании, требуя высокой квалификации в программировании для разработки и поддержки.
  3. Требуется доступ к базе данных: система событий требует доступа к базе данных, чтобы зарегистрировать обработчик события, что может создавать определенные проблемы с безопасностью.
  4. Может снизить производительность: система событий может повлиять на производительность OpenCart при выполнении обработчиков событий, что может привести к ухудшению скорости работы.
  5. Events-cистема має свої обмеження та недоліки в порівнянні з ocmod, що може бути корисним для виконання більш глибоких змін в коді OpenCart. Але система подій є корисною для розширення функціоналу та зміни поведінки без необхідності вносити зміни в код OpenCart або встановлювати ocmod.

Создание обработчика события в OpenCart 4

В OpenCart обработчик события или хука (event handler или hook) - это функция, которая автоматически выполняется при возникновении определенного события в системе. Например, при создании заказа или добавлении нового товара в каталог.

В программировании и разработке ПО, хук (hook) - это механизм, который позволяет вступать в действие программы или системы, вставляя определенный код для выполнения специфических функций в определенной точке выполнения программы. Хуки могут использоваться для подключения дополнительного функционала или для изменения поведения программы без изменения исходного кода. Например, плагины для редакторов кода могут использовать хуки, чтобы предоставить пользователям дополнительные функции, такие как автодополнение кода, подсказки о функциях или дополнительную информацию о структуре кода.

В OpenCart, хуки названы почему-то событиями (Events), они используются для подключения модулей и расширений к различным точкам выполнения кода платформы. Это позволяет расширять функциональность OpenCart и добавлять новые функции без необходимости вносить изменения в основной код платформы. Найдите список событий в OpenCart 4 в разделе Расширение > События.

Список событий (хуков)

Чтобы создать хук, обработчик события - нужно его зарегистрировать в системе. Для этого мы формируем массив $event и передаем его в метод addEvent. До версии OpenCart 4.0.1.1.1 включительно в метод addEvent нужно было передавать три аргумента в такой последовательности: $code, $trigger, $action.

Следовательно массив $event, который мы собираемся зарегистрировать должен иметь такие элементы:

  • 'code' - уникальный код нашего хука
  • 'trigger' - возбудитель, событие
  • 'action' - действие, адрес метода обработчика события
  • 'description' - краткое описание хука
  • 'sort_order' - порядок запуска хука
  • 'status' - статус хука (включен/выключен)

Чтобы наглядно показать, как создать обработчик события в OpenCart приведем пример добавить собственный код сразу после тега <body>. Итак регистрируем обработчик события:

$this->load->model('setting/event');
$event = [
'code' => 'my_first_event',
'trigger' => 'catalog/view/common/header/after',
'action' => 'extension/opencartbot/module/my_module.myEventHandler',
'description' => 'My first Event in OpenCart 4',
'sort_order' => 1,
'status' => true
];
$this->model_setting_event->addEvent($event);

После регистрации хука мы увидим его в списке Событий в админке и сможем просмотреть его. Это выглядит так:

Просмотр события-хука

Теперь в файле контроллера нашего модуля добавляем метод обработки события:

public function myEventHandler(string &$route, array &$data, mixed &$output): void {
$module = $this->load->view('extension/opencartbot/module/my_module', $data);
$output = str_replace('<body>',  '<body>' . $module,  $output);
}

Список возможных аргументов, которые передаются в метод и пояснения к ним:

  • &$route – содержит данные о пути этого события;
  • &$data - содержит массив данных для работы события, например, для view-файлов это данные, которые передают из controller в view
  • &$output - содержит результат работы события, для файлов view - это содержимое twig шаблона

Для controller, model, view, language набор аргументов, передаваемых в обработчик, одинаков. Но список аргументов меняется в зависимости от типа события:

  • при before: &$route, &$data
  • при after: &$route, &$data, &$output

То есть, если наш обработчик реагирует перед событием /before, тогда обработчик будет выглядеть так:

public function myEventHandler(string &$route, array &$data): void {
$data['my_param'] = 'My value;'
}

Пример удаления обработчика события:

$this->load->model('setting/event');
$this->model_setting_event->deleteEventByCode('my_first_event');

Для проверки наличия обработчика события в системе можно использовать следующий код:

$this->load->model('setting/event');
if ($this->model_setting_event->getEventByCode('my_first_event')) {
// Событие зарегистрировано в системе
} else {
// События нет
}

Конечно, это только базовая информация о системе событий OpenCart 4.0. Но благодаря ей можно понять принцип работы, чтобы выполнять более сложные операции.


Рекомендуемые товары


Связанные статьи