Система подій (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 при виконанні обробників подій, що може призвести до погіршення швидкості роботи.

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 включно в метод 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. Але завдяки їй можна зрозуміти принцип роботи, щоб виконувати складніші операції.


Рекомендовані модулі


Інші статті