[ms2DeliveryCost] - получение стоимости доставки для каждого пункта доставки


И так задача:
Получать цену доставки каждого пункта доставки до его выбора не зависимо от того, какой handler стоит у пункта доставки и какие службы доставки установлены вообще. Забегая немного вперед у каждого объекта msDelivery есть метод getCost, на нем и основан компонент, речь о котором пойдет дальше.

Проблемы:
1) В большинстве своем службы доставки взаимодействуют с API других сервисов и не все из них быстрые, другая проблема это то, что служб доставки может быть не один десяток, я думаю вы понимаете что расчет десятка разных служб доставки дело не быстрое и заставлять пользователя ждать по 1-10 секунд чтобы загрузить страницу оформления заказа дело не благодарное.
2) Стоимость доставки может зависеть от множества полей пользователя, хорошо бы чтобы цена всех пунктов изменялась динамически

Решение:
Условно бесплатный компонент ms2DeliveryCost!

Описание:


Особенности компонента заключаются в том, что изначально он отдает самый обычный список пунктов доставки, затем проверяет заполнены ли необходимые поля и только в случае их заполнения подгружает уже список пунктов доставок с рассчитанной ценой. При изменении этих полей компонент также перезагружает список пунктов доставки, по этому вы всегда будите иметь актуальную цену на каждом пункте.
Также компонент умеет рассчитывать как цену только доставки, так и цену всего заказа учитывая стоимость заказа

Модель распространения:

Компонент бесплатен и доступен на GitHub собирайте, на своем проекте и вручную проверяйте обновления, но если вам нужна будет поддержка/доработка какого либо функционала/обновление из админки — компонент будет доступен в modstore сразу после проверки.
Цена компонента составит всего 490р

Установка:

1) Устанавливаем/собираем компонент
2) Переходим в чанк оформления заказа, по умолчанию tpl.msOrder
3) Заменяем кусок вывода пунктов доставки сниппетом ms2DeliveryCost:


//с полями по умолчанию
{'!ms2DeliveryCost' | snippet: [
    'cost' => 0,
    'tpl' => 'tpl.ms2DeliveryCost',
    'required' => 'city,index',
]}
либо
{'!ms2DeliveryCost' | snippet}
4) Готово!

Параметры сниппета:
1) tpl — чанк вывода по умолчанию tpl.ms2DeliveryCost
2) cost — сумма заказа, если расчет нужно делать с учетом всего заказа подставляем сюда плейсхолдер totatlCost, по умолчанию 0
3) jsPath — путь до кастомного js, если вас не устраивает родной
4) required — name полей которые нужно проверять перед тем как загрузить методы доставки с расчетом

Параметры чанка
В чанк приходит два массива order и costs, order содержит текущие поля заказа, а costs содержит все остальное:
cost — стоимость доставки перебираемого метода (приходит false если не заполнены необходимые поля)
delivery — текущий перебираемый метод доставки
payments — массив доступных способов оплаты для перебираемого метода доставки

Ссылки
Демо-сайт
Скачать на GitHub
Купить на modstore за 490р
Pavel Zarubin
08 апреля 2018, 17:21
modx.pro
2 627
+3
Поблагодарить автора Отправить деньги

Комментарии: 8

Pavel Zarubin
09 апреля 2018, 06:14
+1
upd: Стоимость доставки для какой-то службы доставки может не рассчитываться только в том случае, если разработчик этого метода достает id не из объекта delivery, а из объекта order. Но пока что из всех мне доступных служб доставки в modstor'е я такого не встречал
    Pavel Zarubin
    15 апреля 2018, 15:33
    0
    Компонент опубликован в Modstore
      Сергей
      03 июля 2019, 15:09
      0
      Добрый день!
      Верно понимаю, что компонент не работает и Вы его забросили?

      Проверил на последней версии minishop2 и к сожалению данный функционал не работает. Список доставок выводиться, но стоимость к сожалению нет.
        Pavel Zarubin
        03 июля 2019, 15:11
        0
        Добрый день, нет, не верно, совсем недавно использовал его на одном из проектов клиента, все прекрасно работало
          Сергей
          03 июля 2019, 15:14
          0
          Может как то дополнительно надо выводить?
          1. Установил.
          2. Заменил код доставки.

          У способов доставки указал стоимость.
          Проверил чанк, берется все верно, ошибок нет, но и не чего не выводиться.
          Что я мог упустить?
            Сергей
            03 июля 2019, 15:17
            0
            Извиняюсь, все работает, это усталость и не внимательность) Есть же поле required) Заполнил и все заработало) Спасибо за такое интересное решение)
              Сергей
              03 июля 2019, 15:23
              0
              А выводить «Стоимость доставки составит 250 руб»… Это еще раз вызывать сниппет как то отдельно можно вывести только цифру?
            Сергей
            03 июля 2019, 15:51
            0
            Как отдельно вывести доставку? Пока, что то не как не разберусь(
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8