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


Расчет общей цены в корзине 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. Он должен вернуть цену доставки.

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

 

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

  • A

    @Andchir у меня не переходит к оплате после переделки. Я заявку в Яндекс сделал как у них в инструкции написано, что мне работа по старому протоколу нужна. В течении суток уже изменение произойдет, буду в итоге paykeeper2 использовать.

    Читать далее
  • Тут человек написал как переделать модуль оплаты от Яндекса на Shopkeeper 3
    http://forum.modx-shopkeeper.ru/topic/1261/paykeeper2-и-новый-api-яндекс-кассы/4

    Читать далее
  • Будет ли переписан модуль paykeeper2 для работы с Яндекс Кассой по новому API?

    Бесплатно нет. Я уже говорил, что Shopkeeper 3 (и всё что с ним связано) не будет развиваться. Компонент оплаты уже не продается. Но можете попробовать организовать сбор средств на эту работу. Нужно 5000 руб.

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

    Участник @Andchir написал в Подключение через Paykeeper2:

    В это компоненте нет поддержки кассовых аппаратов для Яндекс.Кассы. Поэтому он уже убран с продажи.

    А так же Яндекс Касса теперь стала работать по новому API по умолчанию, модуль для Omnipay новый API не поддерживает я так понял. @Andchir Будет ли переписан модуль paykeeper2 для работы с Яндекс Кассой по новому API?

    Читать далее