[msDifferentPricesDelivery] - Разные цены доставки

msDifferentPricesDelivery — разные цены доставки в зависимости от общей суммы заказа для miniShop2

ОБНОВЛЕНО до версии 1.1.1-pl [21.07.16]
Пофиксена цена доставки на странице информации о доставке
В версии 1.1.0-pl
Добавлена поддержка minishop2 2.4 от 20.07.16!



Компонент реализует разную цену для определённой доставки (или нескольких) в зависимости от суммы заказа, так же компонент реализует бесплатную доставку от определенной суммы заказа.

Видео примера работы компонента

ОСОБЕННОСТИ:
  • Поддерживает как и новую версию minishop2 2.4, так и старые версии <= 2.2
  • Поддерживаемые версии php >=5.3, в т.ч. и 7.0


ОПИСАНИЕ РАБОТЫ КОМПОНЕНТА:
К примеру, для доставки «Доставка по городу» можно сделать, если сумма заказа меньше 1000 руб, то стоимость доставки будет 500 руб, при этом, если сумма заказа больше 1000 руб, но меньше 2000 руб, то стоимость доставки будет 300 руб, так же при этом, если сумма заказа будет больше 2000 руб, то стоимость доставки будет бесплатная или любая другая стоимость, таких промежутков можно сделать неограниченно. Либо можно сделать, что при сумме заказа до 1000 руб доставка к примеру 300 руб, а при сумме заказа больше 1000 руб доставка будет бесплатная.

Разные стоимости доставки можно выставлять не только для одного варианта доставки, а хоть для всех, и для каждого из них можно прописать свои зависимости стоимости доставки от суммы заказа, стоит только нужным вариантам доставки выставить класс-обработчик msDifferentPricesDelivery и прописать для их id параметры.

ИНСТРУКЦИЯ:
Для того, чтоб использовать разные цены в зависимости от общей суммы в корзине
нужно:
  • установить компонент и в настройках вариантов доставки для нужных доставок выставить Класс-обработчик msDifferentPricesDelivery (вместе с компонентом автоматически устанавливается «Доставка по городу», для minishop2 >= 2.4 чтоб она заработала, нужно не забыть выбрать для неё хотя бы один способ оплаты!)
  • Далее нужно зайти в «системные настройки -> minishop2 -> корзина» и прописать
    для параметра «ms2_cart_dpd_param» «Опции цен доставки в зависимости от общей суммы заказа» опции по следующему шаблону:
    id_доставки_для_которой_будут_применяться_следующие_условия={Сумма_до_которой_действует_цена: Сама_цена_для_этой_суммы,
    Сумма_до_которой_действует_цена: Сама_цена_для_этой_суммы,
    Сумма_до_которой_действует_цена: Сама_цена_для_этой_суммы};

    Пример:1={1000:500,2000:400,3000:300,4000:200,5000:100,6000:0};
    2={500:1500,1000:1000,1500:500,2000:0};
    Символы ={:,}; ставятся обязательно, и никаких отступов!
По этому примеру для способа доставки с id 1 (id способа доставки можно посмотреть в настройках minishop2 в вариантах доставки) будут следующие цены:
  • если сумма до 999 руб включительно, то цена доставки будет 500 руб;
  • если сумма начинается с 1000 и до 1999, то цена доставки будет 400 руб;
  • если сумма начинается с 2000 и до 2999, то цена доставки будет 300 руб и т.д.
  • Последнее значение «6000:0» (всегда!) говорит о том, что если сумма будет начинается от прошлой суммы «5000» руб, то если сумма заказа будет начинаться с 5000 руб до 6000 руб и больше, то доставка будет бесплатной, если выставить не 0, а другую цену, то эта цена будет действовать с 5000 руб, до 6000 и больше.
  • Дальше так же, только для способа доставки с id 2.
Пример как сделать бесплатную доставку при сумме заказа от 1000 руб, а до этой суммы стоимость доставки 500 руб:
1={1000:500,2000:0};

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

Компонент можно приобрести в магазине modstore.pro
Роман Воропаев (Volk)
19 июля 2016, 05:30
modx.pro
1
4 565
+5

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

Василий Наумкин
19 июля 2016, 08:37
+1
Поддержка minishop2 2.4 будет добавлена через некоторое время, как выйдет стабильная версия. А пока на minishop2 2.4 работать не будет
Сейчас версия rc8, в которой вычищаются мелкие баги.

Никаких глобальных изменений в работе дополнений нет с версии beta3 и не будет. При этом верcия 2.2 в магазине уже отключена, её можно установить только из репозитория modx.com.

В общем, мне совсем непонятно, зачем присылать новое дополнение, которое работает только со старой версией компонента.
    Роман Воропаев (Volk)
    19 июля 2016, 08:56
    0
    Делал компонент для магазина на версии 2.2, щас просто появилось время собрать в пакет. Протестировал на Modhost на minishop2 2.4 с последней версией RC там видимо что-то поменяно со времен 2.2 и кастомный класс по другому подключается, пока нет времена копать.
    В общем для тех, кто пока не планирует обновляться до последней версии минишопа этот компонент вполне подойдет, потом появится время разберусь с последней версией минишопа и сделаю уже под неё.

    Да и у последних выложенных новых компонента доставки совместимость только с новой версией минишопа, видимо не удастся сделать так, чтоб кастомный класс и на старых версиях работал и на новых, тогда напишу отдельный компонент для нового, т.к. пока еще много народу используют версию 2.2
      Володя
      19 июля 2016, 09:24
      +1
      Да и у последних выложенных новых компонента доставки совместимость только с новой версией минишопа, видимо не удастся сделать так, чтоб кастомный класс и на старых версиях работал и на новых, тогда напишу отдельный компонент для нового, т.к. пока еще много народу используют версию 2.2
      да почему можно совместимость сделать, но зачем?
      Для чего копать старое — когда есть лучше новое?
          Роман Воропаев (Volk)
          19 июля 2016, 09:45
          0
          Спасибо за подсказку.
          Скоро доделаю и обновлю компонент.
            Роман Воропаев (Volk)
            19 июля 2016, 15:06
            0
            Василий, тогда есть вопрос: если в мнишоп 2.2 для кастомного класса можно было просто унаследовать класс msDeliveryHandler следующим образом:
            class myDelivery extends msDeliveryHandler {здесь логика расчета}
            То в версии 2.4, судя документации кастомный класс должен просто реализовывать интерфейс msDeliveryInterface следующим образом:
            class myDelivery implements msDeliveryInterface {}
            Но в таком случае в бэкенде в редактировании способов доставки ошибка, что отсутствует в файле кастомного класса интерфейс msDeliveryInterface, а во фронденде на странице оформления заказа вся логика работает без ошибок, при этом в настройках ms2_services всё прописано.
            Если мы добавим в код кастомного класса
            interface msDeliveryInterface
            {public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0.0);}
            то тогда в бэкенде кастомный класс для вариантов доставок выставляется без проблем и никаких ошибок, но во фронтенде на странице оформления заказа ошибка, что имя интерфейса msDeliveryInterface уже используется в файле кастомного класса.
            Подскажи как получить тогда интерфейс msDeliveryInterface в кастомном классе?
              Василий Наумкин
              19 июля 2016, 15:12
              +1
              Что за бред?

              msDeliveryHandler реализует msDeliveryInterface. Расширяй его как раньше.
                Роман Воропаев (Volk)
                20 июля 2016, 11:05
                +2
                Спасибо. Вчера действительно чё-то всё перепутал. Расширяется всё точно так же, как и раньше.
                Теперь компонент работает и на новой версии minishop2 2.4, поддержка старых осталась. Обновил компонент в modstore, осталось дождаться модерации.
        Володя
        19 июля 2016, 10:18
        0
        кстати насчет скидок на доставку — все это есть из коробки в modstore.pro/packages/ecommerce/discontrol

        а теперь работает и с новым miniShop2!
        ps. простите за маленькую рекламку.
          Максим
          29 ноября 2017, 20:04
          -1
          Компонент неплохой, но я бы сделал логику наоборот…
          Пример: 1={6000:0};
          до 1000 = стоимость доставки из настроек
          от 1000 до 6000 = 500
          от 6000 и выше = 0
            Максим
            30 ноября 2017, 07:07
            -1
            Упс, пример должен выглядеть вот так:
            Пример: 1={1000:500,6000:0};
            Максим
            04 июля 2018, 12:45
            0
            Можно ли сделать стоимость доставки 3000 руб + 10% от стоимости заказа?
            Sergey (Sentinel)
            16 января 2019, 17:55
            0
            Если я вывожу стоимость отдельно
            {$deliveries[4].price}
            в корзине, как то можно чтобы эта сумма тоже менялась на 0?
              Sergey (Sentinel)
              18 января 2019, 10:38
              0
              т.е. нужно чтобы сума доставки тоже изменялась, реально ли это сделать?
                Кирилл
                23 сентября 2020, 17:41
                0
                тоже интересует этот вопрос.
                На странице раньше была выведена стоимость доставки.
                Теперь же это выглядит вот так
                з.ы. доставка бесплатна от 50
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              16