Расчет стоимости доставки через внешний калькулятор

Расчет стоимости доставки через внешний калькулятор

В интернет-магазине uShop, кроме вычисления стоимости доставки по матрице или через сервис “Яндекс.Доставка”, есть возможность подключать собственные алгоритмы расчета. Для этого используется модуль “Внешний калькулятор”:

Чтобы начать пользоваться модулем, включите опцию “Использовать модуль расчёта стоимости доставки” и выберите в ней значение “Внешний калькулятор”. После этого нажмите на кнопку “Сохранить”.

Когда пользователь выбирает способ доставки с внешним калькулятором, в форме заказа учитывается скрытое поле (шаблон “Страница служебных форм”, $ORDER_FIELDS$):

<input type="hidden" name="custom_delivery_tax" value="">

Значение атрибута value этого поля прибавится к стоимости заказа в качестве наценки за доставку.

Особенности:

  • значение в поле custom_delivery_tax записывается в условных единицах магазина и не зависит от выбранной пользователем валюты
  • значение может иметь отрицательную величину, таким образом сумма будет вычтена из общей стоимости заказа (в этом случае такса фактически превратится в скидку)
  • значение может быть отредактировано на странице заказа администратором

Чтобы наценка отобразилась при оформлении заказа, необходимо записать в скрытое поле значение и обновить форму заказа:

<script>
// переменная, в которую будет помещена величина наценки
var calcPrice = 0;
// выбираем способ доставки с внешним калькулятором
var calcDelivery = $('#del-type-1');
// обработчик событий выбора способа доставки с внешним калькулятором
calcDelivery.on('click', function(){
// произвести расчет calcPrice
// …
// если поле custom_delivery_tax не существует
if($('input[name="custom_delivery_tax"]').length == 0){
// добавить его
$('#checkout-form').append('<input type="hidden" name="custom_delivery_tax" value="0">');
}
// записать стоимость доставки в поле custom_delivery_tax
$('input[name="custom_delivery_tax"]').val(calcPrice);
// обновить форму заказа
shEvOrd('delivery', calcDelivery);
});
</script>

#del-type-1 — идентификатор способа доставки (может быть #del-type-1, #del-type-2, #del-type-3 и так далее).

Эту функцию можно спрятать в отдельный файл, а вызывать после подключения скрипта прямо из шаблона служебных форм таким образом:

myCalculator($DAY$);

Если собрать все воедино, то получим следующий код, который нужно разместить после $ORDER_FIELDS$ шаблона "Страница служебных форм":

<script src="/js/myCalculator.js"></script>
<script>myCalculator($DAY$);</script>

Конечно, это только один из примеров, как можно использовать внешний калькулятор. Попробуйте реализовать самостоятельно калькулятор:

  • для товаров из определенной категории;
  • для товаров с определенным id;
  • для пользователей определенной группы;
  • в зависимости от указанного города.

В данном случае логика расчета может быть реализована на JavaScript или PHP. С помощью внешнего калькулятора реализованы следующие скрипты:

Расчет стоимости доставки через внешний калькулятор