Последние темы


Расчет общей цены в корзине Shopkeeper3

  • Добрый день! У меня возникла такая необходимость - написать калькулятор для подсчета доставки. Там нестандартный алгоритм, по типу если вес заказа более 50кг - один коэффициент, если меньше то другой + этажи, до подъезда, до двери и т.д. Сам калькулятор я сделал, но считается он в корзине. Картина состоит в следующем: посетитель выбрал способ доставки, внес данные, нажал кнопку "рассчитать" и вывелась цена доставки, далее необходимо эту цену приплюсовать к общей цене $price_total. Как лучше всего это сделать? Я так полагаю, будет использоваться ajax-запрос. У меня было два варианта:

    1. Через плагин с событием OnSHKcalcTotalPrice, но отправить туда POST запрос с ценой доставки никак;
    2. В самом ajax-коннекторе connector_fe.php. Там я ради теста прописал простое условие:
    if(isset($_POST['newDeliveryPrice'])) {
        $newDeliveryPrice = $_POST['newDeliveryPrice'];
    }else{
        $newDeliveryPrice = 0;
    }
    $output = array(
        'price_total' => Shopkeeper::$price_total + $newDeliveryPrice,//здесь плюсуем посланный расчет из корзины
        'items_total' => Shopkeeper::$items_total,
        'items_unique_total' => Shopkeeper::$items_unique_total,
        'delivery_price' => ( !empty( $shopCart->delivery['price'] ) ? $shopCart->delivery['price'] + $newDeliveryPrice : 0 ),
        'delivery_name' => ( !empty( $shopCart->delivery['label'] ) ? $shopCart->delivery['label'] : '' ),
        'ids' => $shopCart->getProdIds(),
        'html' => $cart_html
    );
    

    Также добавил в Shopkeeper.js еще одну функцию для ajax-запросов:

    newDelivery: function( value ){
        var params = { newDeliveryPrice: value };
        SHK.options.is_first = true;
        this.ajaxRequest( params );      
    }
    

    Использую эту функцию при клике на кнопку "Расчитать". По факту, массив с ключом newDeliveryPrice попадает в коннектор и он приплюсовывается к общей цене. Проблема в том, что при любом ajax-запросе из корзины будь то дефолтное увеличение количества товара, посылается 2 ajax запроса в коннектор, и возвращается 2 ответа, дак вот в первом ответе я вижу измененную цену с приплюсованным newDeliveryPrice, а во втором ответе изначальная цена без сложения. По факту, в корзине ничего не меняется.Обратил внимание, что при первом ответе присутствует html с data-shopcart-1, а во втором ответе data-shopcart-2. Может это как-то влияет, я до конца не разобрался. Помогите плз сформировать общую цену, заранее спасибо!

  • Проблема в том, что при любом ajax-запросе из корзины будь то дефолтное увеличение количества товара, посылается 2 ajax запроса в коннектор, и возвращается 2 ответа

    Значит у вас две корзины (два вызова сниппета Shopkeeper) в шаблоне.

    Проблема с сохранением цены в заказе?

  • @andchir аа ну все верно, да, 2 корзины, 1 корзина - это просто значок корзины в шапке, типа перейти в корзину, вторая корзина - это непосредственно при оформлении заказа.
    Да. проблема с сохранением цены в заказе! Хотелось бы сделать, чтобы при нажатии кнопки "рассчитать", общая цена формировалась подобно изменениям способа доставки или количества товара! Спасибо!

  • @andchir Не подскажете как и где конкретно формируется общая цена $price_total? Просто в connector_fe.php я вообще убрал элемент массива 'price_total' => Shopkeeper::$price_total , но цена, все равно, нормально формируется в корзине.

  • Сам калькулятор я сделал, но считается он в корзине.

    Сделали на JavaScript? Не боитесь. что кто-то понимающий придет и поставит себе нулевую доставку там где её быть не должно? Такие вещи нужно делать на стороне сервера или дублировать на стороне сервера. Поэтому нужно через плагин, а не плагину отправлять готовую цену.

  • Действительно! Именно поэтому паршивое чувство не отпускало, что что-то не так! Но, в таком случае, как поместить данные, введенные пользователем в плагин?

  • Эта запись удалена!
  • @andchir В общем, я пробовал по-разному добиться попадания параметров для расчета в плагин, но все как то не очень... через сессии - не вариант) Если Вы мне подскажете хотя бы как у Вас реализована функция обновления общей цены, допустим, при изменении количества товара? Просто не хотелось бы тратить много времени на изучение всей архитектуры приложения, если Вам не сложно, конечно!

  • я пробовал по-разному добиться попадания параметров для расчета в плагин

    Что за параметр? Если это параметр товара, то надо брать из базы данных.

  • @andchir параметры доставки, которые укажет посетитель сайта для расчета! Ну, например, сайт по доставке сейфов. Если вес более 50кг то 10р за 1 кг будет стоимость доставки + 200р (если на лифте) либо + 100р за каждый этаж если нет лифта.
    То есть, приблизительные параметры, которые надо передать в плагин:

    1. Общий вес всех товаров в корзине;
    2. Количество этажей;
  • Для обновления доставки есть JS-функция

    SHK.selectDelivery('Название доставки')
    

    Вот код:
    https://github.com/andchir/shopkeeper3/blob/master/assets/components/shopkeeper3/web/js/shopkeeper.js#L846

    Вы можете написать свою функцию, которая будет делать POST-запрос на URL:

    SHK.options.site_base_url + 'assets/components/shopkeeper3/connector_fe.php'
    

    с параметром shk_action: 'update_delivery' Потом в плагине ловить все данные из $_POST и устанавливать цену доставки.

    Событие плагина - OnSHKgetDeliveryPrice. Он должен вернуть цену доставки.

  • Отлично! Это помогло! Спасибо!

 

Последние комментарии

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее
  • J

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее