2014-10-17 9 views
10

Я много искал триггеры opencart, но не нашел подходящего примера. В opencart 2.0 есть триггеры, на которых разработчик может перехватывать функцию и выполнять что-то вроде действий Wordpress и фильтров, которые, я думаю. Например, вКак мы можем использовать события opencart?

catalog/model/checkout/order.php 

есть триггер $this->event->trigger('post.order.history.add', $order_id)

Может кто-то помочь мне подключить мою функцию на выше триггера?

+2

Внимание всем, кто приходит к этому вопросу: не используйте мероприятия! Все триггеры были удалены из opencart 2.2. Я не знаю, что они все еще будут в ближайшем будущем ... – redochka

+4

Мне потребовалось некоторое время, чтобы выяснить, но старые триггеры не были удалены в 2.2, но заменены общей системой, которая действует на ВСЕ вызовы модели (и контроллеры, которые проходят через реестр и загрузчик). Это делается loader.php, который перехватывает все вызовы для объектов модели и запускает до и после триггера. Имена событий были изменены: post.order.history.add теперь является каталогом/моделью/checkout/order/addOrderHistory/after (названным в честь модели и метода, которые запускают его). Дополнительная информация: https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x – fietserwin

+0

События были введены в версии 2.0, * полностью * изменены в 2.3 и снова изменены в версии 3.0. Отличная концепция, просто недостаточно стабильная. –

ответ

5

Важное примечание: этот вопрос применимо к OC> 2.0.x.x и < 2.2.x.x.

Проблемы здесь неправильное слово используется (и искала) - правильная, вы должны искать для это события, и из него выводится событие слушателя и триггера события (к сожалению, не было удачи при попытке найти их, и документация на 2.0 все еще отсутствует).

Теперь я считаю, что весь фон намного более понятно, особенно если у вас есть некоторые знания о событиях из других структур (возможно JQuery?), Но вот только краткое руководство, как работать с событиями (в OC 2.0) :

  • сначала нужно зарегистрировать прослушиватель событий, как это:

    $this->event->register('post.order.history.add', 'checkout/order/send_email');

  • на определенных местах событие является тр iggered, например.

    $this->event->trigger('pre.order.history.add', $order_id);

    и

    $this->event->trigger('post.order.history.add', $order_id);

  • если событие (определены его имя post.order.history.add) слушателя был зарегистрирован, то он будет вызван на триггер

Для получения дополнительной информации или чтобы понять это самостоятельно, вы можете взглянуть на system/engine/event.php (работать с ним сейчас нет).

+0

большое спасибо за такую ​​полезную информацию и да слушателя событий и триггерное событие - правильные слова :) – Adnan

+0

Добро пожаловать , – shadyyx

+0

См. Комментарий № 2 в ответ на ОП; это решение уже неверно. –

5

Важное примечание: этот вопрос применимо к OC> 2.0.x.x и < 2.2.x.x.

Система событий работает следующим образом:

  1. OpenCart загружает список всех зарегистрированных обработчиков событий из базы данных. Это происходит в конце файла index.php.
  2. Затем обработчики событий регистрируются в объекте $ event, который является экземпляром класса Event (system/engine/event.php)
  3. Затем метод $ event-> trigger() вызывается из разных части системы.Метод триггера принимает имя события в качестве параметра, и все обработчики событий, зарегистрированные для этого имени события, выполняются.

Вы можете использовать объект $ event для регистрации обработчиков событий или событий запуска во время выполнения, но делать это только в особых случаях. Имейте в виду, что вам, скорее всего, потребуется доступ к объекту $ event через $ this-> event, а не $ event (в зависимости от того, где он вам нужен).

Чаще всего вам необходимо будет зарегистрировать обработчики событий в таблице db только один раз, используя расширение/событие. Вы можете сделать это в своем методе install() вашего контроллера администратора. Нечто подобное:

public function install() { 
    $this->load->model('extension/event'); 
    $this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete'); 
    $this->model_extension_event->addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add'); 
} 

обработчики событий являются третьим параметром метода addEvent(), и они находятся в виде стандартного маршрута.

Информация о мероприятии здесь: http://isenselabs.com/posts/opencart2-event-system-tutorial. Это учебное пособие, объясняющее, как работает система событий, и содержит простые примеры, которые показывают, как использовать его в своих расширениях.

+3

Рекомендуется использовать ссылки на внешние ресурсы, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. http://stackoverflow.com/help/how-to-answer – Eeji

+0

Хорошо, основные моменты здесь. Я не собираюсь тратить 10 и более минут на копирование контента со связанной страницы. – raxbg

+0

См. Комментарий № 2 в ответ на ОП; это решение уже неверно. –

Смежные вопросы