Кастомный класс доставки. Бесплатно дост. от суммы

Имеется кастомный класс доставки:
<?php
class msxxxDeliveryHandler extends msDeliveryHandler{
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $cart = $this->ms2->cart->status();
        $total = $_SESSION['minishop2']['mode_total'];
        
        if ($total<10000) { 
            $add_price = $delivery->get('price');
            if (preg_match('/%$/', $add_price)) {
                $add_price = str_replace('%', '', $add_price);
                $add_price = $cost / 100 * $add_price;
            }
            $cost += $add_price;
        }
        return $cost;
    }
}
При достижении суммы корзины свыше 10000, страница обновляется и вся корзина пересчитывается по оптовым ценам. Доставка становится бесплатной (по условию, свыше 10000, доставка бесплатная ).

Пример, Товар стоимостью 3500р (розничная цена), 3300р (оптовая).
Добавляем 3 наименования.
ИТОГ: в корзине 9900р, доставка бесплатная (по обычной цене сумма получилась 10500)

ВОПРОС: Подскажите, пожалуйста, как сделать, чтобы доставка всегда считалась по оптовой цене?
Klike
13 августа 2015, 09:48
modx.pro
4
2 548
0

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

Klike
16 августа 2015, 06:26
0
Может кто уже сталкивался с таким?)
    Воеводский Михаил
    16 августа 2015, 09:28
    0
    Расширить класс корзины или плагинами добавить автоматический пересчет стоимости товаров в корзине. Тогда классу доставки не надо будет думать — оптовая или розничная цена в корзине.
      Klike
      16 августа 2015, 10:23
      0
      Так и есть, я писал об этом:
      При достижении суммы корзины свыше 10000, страница обновляется и вся корзина пересчитывается по оптовым ценам.
      Но класс доставки видимо считает после пересчета корзины, что там больше 10 т.(по розн. ценам) Хотя по факту меньше.
      Как быть?)
        Воеводский Михаил
        16 августа 2015, 12:26
        0
        Как уменьшается стоимость товаров? При выводе страницы?

        Нужно менять стоимость товаров непосредственно в корзине, тогда класс доставки сразу будет получать измененную стоимость.
      Павел Гвоздь
      16 августа 2015, 10:42
      0
      А msDiscount такого не позволяет реализовать? Хороший компонент умеющий многое. Может и это умеет…

      Я имею ввиду скидку при достижении определенной цены.
        Василий Наумкин
        16 августа 2015, 12:19
        0
        Нет, там есть личная скидка покупателя на всё, а тут нужно скидку от суммы заказа.

        Тут поможет только свой класс заказа. И нужно посмотреть исходники, как именно доставка проверяет стоимость заказа, там были какие-то тонкости вроде флагов $with_cart или как-то так, не помню.
          Слава
          20 марта 2016, 18:44
          0
          Добрый день.
          Подскажите, что не так:
          Имеется доставка и необходимо чтобы при определенной сумме заказа менялась стоимость доставки.
          Сделал по примеру, общая сумма меняется, при оформлении заказа получается, что общая сумма становится равно 0, а собственно сама доставка становится равной сумме заказа + доставка. нет разграничения. Как правильно сделать кастомилизацию?
          Может есть примеры?

          <?php
          class msxxxDeliveryHandler extends msDeliveryHandler{
              public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
                  $cart = $this->ms2->cart->status();
                  $total = $_SESSION['minishop2']['mode_total'];
                  
           if (($cart['total_cost'] >= 0) AND ($cart['total_cost'] <= 1100))
                                                                  {
                                                                          $cost = $cart['total_cost'] + 250;
                                                                  }
                                                          if (($cart['total_cost'] >= 1101) AND ($cart['total_cost'] <= 3500))
                                                                  {
                                                                          $cost = $cart['total_cost'] + 100;
                                                                  }
          
                  return $cost;
              }
          }


          Вот что получается: prnt.sc/ahnovc, что не верно.
        eflit
        21 мая 2017, 20:15
        0
        Доброго дня подскажите реализовал ваш пример для бесплатной доставки от суммы, сейчас пытаюсь сделать что бы если город Москва тогда бесплатная доставка а если любой другой то допустим 300 возможно это реализовать с помощью кастомного класса?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8