Система Событий (Event) в OpenCart. Часть 2 из 3 - Добавление Обработчика Событий в своем модуле.
О том что такое События (Event) в OpenCart и как происходит обработка Событий я писал в первой части статьи. В этой статье речь пойдет о том
как добавить новый Обработчик События в своем модуле.
Важное замечание! Система Событий только появилась в OpenCart 2.0 и находится в разработке, поэтому со временем может немного измениться. Если вы обнаружили такие изменения - напишите об этом в комментариях, добавлю в статью.
Как добавить Обработчик События в своем модуле?
Для этого существует модель admin/model/extension/event.php, приведу ее код ниже:
class ModelExtensionEvent extends Model { public function addEvent($code, $trigger, $action) { $this->db->query("INSERT INTO " . DB_PREFIX . "event SET `code` = '" . $this->db->escape($code) . "', `trigger` = '" . $this->db->escape($trigger) . "', `action` = '" . $this->db->escape($action) . "'"); } public function deleteEvent($code) { $this->db->query("DELETE FROM " . DB_PREFIX . "event WHERE `code` = '" . $this->db->escape($code) . "'"); } }
Мы видим, что она содержим всего 2 метода:
1. addEvent - для добавления нового Обработчика.
Он получает 3 параметра:
$code - код (идентификатор) обработчика, обычно название модуля
$triger - само Событие, которое мы будем обрабатывать
$action - обработчик или метод, который будет вызван для обработки События.
2. deleteEvent - для удаления Обработчика
Добавить и удалить свои обработчики можно в методах install и uninstall своего модуля при установке и удалении модуля.
Пример добавления нового Обработчика События
Для примера возьмем код модуля pp_login, где это уже реализовано:
public function install() { $this->load->model('extension/event'); $this->model_extension_event->addEvent( 'pp_login', 'post.customer.logout', 'module/pp_login/logout' ); }
Мы видим, что сначала подключается модель Event, после чего добавляется новый Обработчик.
Это означает что когда в catalog/controller/account/logout.php будет запущен
$this->event->trigger('post.customer.logout');
то будет вызван метод контроллера этого модуля module/pp_login/logout:
public function logout() { if (isset($this->session->data['pp_login'])) { unset($this->session->data['pp_login']); } }
который удалит pp_login из сессии
Пример удаления Обработчика События
public function uninstall() { $this->load->model('extension/event'); $this->model_extension_event->deleteEvent('pp_login'); }
Для удаления Обработчика нужно указать только код (идентификатор) этого Обработчика.
Заключение
Как видим, несмотря на много текста, все очень просто:
1. В самом модуле в методе install добавляем свой Обработчик События, указав в нем какой метод контроллера нужно вызвать когда это Событие произойдет.
2. Когда Событие произошло то вызывается этот Обработчик, запускается метод контроллера, который произведет какие-то действия с данными или выполнит
какое-то свое действие.
События делают OpenCart намного гибче и избавляют всех от кучи конфликтов, которые нам дает vQmod. На данный момент События еще не очень развиты в OpenCart и не покрывают весь OpenCart. Но очень радует что они уже появились. И, хочется надеяться, что со временем OpenCart полностью откажется от "костыля" vQmod (OCMOD) в пользу Событий.