СтатьяСистема Событий (Event) в OpenCart. Часть 2 из 3 - Добавление Обработчика Событий в своем модуле.

как добавить новый Обработчик События в своем модуле.
 
Важное замечание! Система Событий только появилась в 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) в пользу Событий. 
 

 

Добавить комментарий

CAPTCHA
Защита от спама
Image CAPTCHA
Enter the characters shown in the image.
You are reporting a typo in the following text:
Simply click the "Send typo report" button to complete the report. You can also include a comment.