Разработка модуля доставки Есть решение

Здравствуйте. Я разрабатываю модуль доставки и прошу помощи в решении некоторых вопросов.



В своем модуле в файле plugin.php я прописал событие 'handlers' => array('order_action.create' => 'testmethod', ), ...

В файле основного класса я пытаюсь реализовать обработчик public function testmethod($params){var_dump($params)}... Но никаких данных не получаю...



Подскажите пожалуйста как правильно реализовать событие...

12 ответов

  • 1
    Леонид Вакуленко 8 ноября 2013 11:39 # Решение
    Модули доставки не являются плагинами приложения Магазин и не могут объявлять обработчики на его хуки. Это связано с тем, что модуль доставки - плагин системный и потенциально может использоваться в разных приложениях, не только в Магазине.

    В соседнем топике человек решает подобную проблему, делая параллельно модуль доставки и плагин для магазина таким образом, чтобы они работали в паре: http://www.webasyst.ru/help/423/razrabotka-modulya-dostavki/
    • 0
      Максим Гребенник Максим Гребенник 21 января 2014 04:43 #
      Вполне возможно переписать системный плагин на шоповский, лично это делал. Тогда и на хуки шопа можно объявить свои обработчики.
  • 0
    dima dima 8 ноября 2013 11:46 #
    Спасибо огромное за ответ...
  • 0
    dima dima 12 ноября 2013 06:19 #
    Леонид, подскажите пожалуйста, вот какой момент... А какие хуки срабатывают или события срабатывают в момент когда пользователь нажимает на кнопку оформить заказ...
    • 0
      Леонид Вакуленко Леонид Вакуленко 12 ноября 2013 06:40 #
      Сходу не отвечу. Добавьте waLog::log(...) внутри waSystem->event() и посмотрите сами.
    • 0
      Леонид Вакуленко Леонид Вакуленко 12 ноября 2013 06:41 #
      Что-то типа:

      public function event($name, &$params = null, $array_keys = null)
      {
      waLog::log('Event: '.$this->getApp().' '.$name.' '.wa_dump_helper($params), 'events.log'); // !!!
  • 0
    dima dima 12 ноября 2013 07:06 #
    спасибо огромное за ответ!
  • 0
    dima dima 12 ноября 2013 10:10 #
    Леонид. Извените за беспокойство. Вопрос на счет хуков order... В моем плагине я прописал событие order_action.pay.. Реализовал обработчик (т.е. я создал тестовый, чтобы понимать выполняется событие или нет)... Но результат не получил... Прописал событие frontend_cart, все нормально работает.. Подскажите я правильно прописываю название событие или есть какие-то нюансы с событиями order
    • 0
      Леонид Вакуленко Леонид Вакуленко 14 ноября 2013 01:03 #
      Если добавить тестовый waLog::log() в waSystem->event(), он в логах появляется? Если нет, событие не вызывается вообще. Тогда расскажите, что вы делаете, чтобы его вызвать.
      Если появляется, тогда что-то не так с тем, как регистрируется обработчик. Как выглядит plugin.php? Как выглядит метод-обработчик? Или, возможно, обработчик падает с exception'ом - есть ли ошибки в wa-log/error.log?
  • 0
    dima dima 14 ноября 2013 07:47 #
    В логах событие не появляется... В plugin.php вот какая информация return array(
    'name' => 'Удаленная доставка',
    'description' => 'Плагин для рассчета доставки',
    'vendor'=>'aanda',
    'version'=>'1.0.0',
    'img'=>'img/shipping.gif',
    'handlers' => array(
    'order_action.comment' => 'orderActionComment',
    ),
    );

    Вот что в методе-обработчике
    public function orderActionComment() {
    echo 'test';
    }
    Обработчик в логах ошибок тоже не попадает...
    • 0
      Леонид Вакуленко Леонид Вакуленко 14 ноября 2013 09:38 #
      Если событие не появляется в логах (т.е. не вызывается waSystem->event()), смотреть в плагин бессмысленно.

      Что вы делаете, чтобы воспроизвести само событие-то? Если я правильно понимаю, order_action.pay кидается тогда и только тогда, когда выполняется действие pay - Оплачен. Если вы жмёте кнопку, например, Выполнен, то событие pay не кидается - кидается complete. Не исключено, что придётся подписаться на оба события, чтобы отследить то, что вам нужно. Опять-таки, смотря что именно вам нужно.
  • 0
    15 ноября 2013 06:26 #
    Вот пример... Я прописываю событие 'frontend_search' => 'frontendSearch' в plugin.php. В методе обработчике я просто вывожу слово test. Что происходит, я ввожу название товара в поле поиска и нажимаю поиск... У меня выводится список товаров и на этой же странице выводиться слово test... То есть событие воспроизвелось... Я проверил backend события тоже воспроизводятся... Что я делаю с хуками order... Там же в handlers где прописывал frontend хуки прописываю событие 'order_action.comment' => 'orderActionComment'... Как написано в доках событие срабатывает при добавлении комментария к заказу. В методе-обработчике тоже просто вывожу слово test... Добавляю комментарий к заказу в админке... И в результате в логах пусто, в Error.log тоже ничего, слова test тоже нигде нет. И вот я не могу понять... Или я не правильно название события прописываю... Или этот функционал не работает пока что... Для чего мне это нужно... Мне необходимо, что бы в момент когда администратор нажал на оплачено у меня на другой сервис
    отправлялись определенные данные... Для этого мне и нужно событие order_action.pay... Все манипуляции с хуками я проводил в плагине магазина который работает в паре с моим модулем доставки...

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите