Как правильно использовать свой AJAX для плагина доставки?

Приветствую коллеги!

Прошу помощи разобраться, кто в теме.

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

На поле ввода адреса стоит дефолтный обработчик, дергающий /data/shipping, передающий несколько параметров для перерасчета, но лезть в JS код фреймворка, чтобы добавлять свои код не вижу смысла.

В документации к разработке есть абзац по использованию своего AJAX, но описан крайне сухо, без примеров с контекстом. В нем есть кусок кода,


$url_params = array(
   'action_id' => 'foo', //в этом примере будет вызван публичный метод плагина с именем 'fooAction', который должен сформировать полноценный ответ на AJAX-запрос
    'plugin_id' => $this->key,
);
wa()->getRouteUrl(sprintf('%s/frontend/shippingPlugin', $this->app_id), $url_params, true);

который где-то надо прописать, который "должен сформировать полноценный ответ на AJAX-запрос". Не понимаю куда нужно вставлять этот код, чтобы этот маршрут работал, в каком виде должен быть ответ (так же в JSON?), заменяет ли этот экшен calcualte(), если он может "обновить стоимость отображаемую доставки" (кстати там похоже опечатка в тексте), или их надо подружить, и каким образом заставить стандартный элемент формы (ввода адреса) стучать на этот маршрут (если для этого предусмотрены стандартные средства).

Может кто-то уже реализовывал нечто подобное?

Заранее благодарен за помощь.


7 ответов

  • 2
    Николай Иванов 8 января 2018 12:31 #

    Вот это

    wa()->getRouteUrl(sprintf('%s/frontend/shippingPlugin', $this->app_id), $url_params, true);

    сформирует вам урл для обращения к своему экшену в плагине доставки. И всё.
    Остальное вы делаете сами.
    То есть у вас где то будет js-код, который вы выводите на витрине в чекауте и там обрабатываете нужные вам триггеры и через .ajax/.post получаете нужные данные через этот урл.

  • 1
    Максим Лебедев 8 января 2018 12:48 #

    Николай, спасибо за пояснение!

    Подскажите пожалуйста, а куда нужно прописать wa()->getRouteUrl(sprintf('%s/frontend/shippingPlugin', $this->app_id), $url_params, true)?

  • 1
    Максим Лебедев 8 января 2018 21:19 #

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

    Тем не менее не совсем понимаю, куда двигаться дальше - реализовать всю логику пересчета в этом экшене (тогда как связать его с rates и calculate и в конечном итоге с итоговой ценой доставки, которая запишется в заказ) и юзать json ответ для перерисовки цены или у него все таки не такое назначение?


  • 2
    info@ravencode.ru 8 января 2018 22:54 #
    тогда как связать его с rates и calculate и в конечном итоге с итоговой ценой доставки

    через хуки

    и юзать json ответ для перерисовки цены или у него все таки не такое назначение?

    да тут все через такую жопу

    p.s в любой непонятной ситуации смотри чужие плагины) p.s. хотя зачастую и там треш)

  • 1
    Glavvrach 13 мая 2018 17:37 #

    Разобрались?) тоже мучает этот вопрос..

    • +2
      enso_studio@mail.ru enso_studio@mail.ru 13 мая 2018 18:34 #

      Указанный пример служит для обращения к плагину ajax запросом, например, чтобы обновить стоимость доставки на странице оформления.

      Формат данных и прочие детали реализации можно посмотреть в waSystemPlugin и waPayment.

      если в плагине нужно получить скажем данные от яндекс api, то можно создать запрос используя waNet

  • 1
    Glavvrach 14 мая 2018 08:20 #

    Вот это

    wa()->getRouteUrl(sprintf('%s/frontend/shippingPlugin', $this->app_id), $url_params, true);

    сформирует вам урл для обращения к своему экшену в плагине доставки. И всё.

    У меня не получается... пишет при обращении 404 not found http://gr.hoh-blog.ru/data/shipping/18/checkDelive...

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

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