sv2109

  • записи
    52
  • комментариев
    9
  • просмотра
    5 373

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

sv2109

1 591 просмотр

bigstock-events-7444309.jpgО том что такое События (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) в пользу Событий. 

 

Список существующих Событий смотрите в третьей части этой статьи

 

 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 


0


0 комментариев


Нет комментариев для отображения

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас
  • Актуальные темы на форуме

  • Последние сообщения

    • Здравствуйте! Пол года назад открыл Интернет-Магазин на  Opencart 2.1.0.1 Сейчас решил изменить простой список подкатегорий - именно тот, который выводится в отдельном окне при нажатии например на категорию в меню. Знаю что размер шрифта и цвет можно задать в файле "stylesheet.css" и вполне могу сам это сделать, но не могу найти в этом файле раздел, в котором описываются стили для вывода подкатегории в отдельном окне. Ведь откуда то берется цвет шрифта а также цвет при наведении на текст! Подскажите пожалуйста - от куда подтягиваются настройки цвета и размера шрифта подкатегории, которая выводится в отдельном окне?   Заранее благодарен, Бычков Виталий
    • в опенкарте, в самом движке, это не реализовано
      + артикул это как идентификатор товара, поэтому для разных артикулов нужны разные товары, на некоторых сайтах так реализовано напр. для каждого цвета товара отдельный артикул и отдельный товар. 
    • Возможно ли создать опцию, чтобы при выборе размера менялся и артикул? Если возможно, то как это сделать?