[Shopkeeper 1.3.6] Доставка платная
Если надо сделать платную доставку в Shopkeepr на Modx Evo, то этот урок для Вас.
На странице Оформления заказа Вы вывели eForm? (либо Personalize) с &tpl=`shopOrderForm`, идем в этот tpl, заполняем все способы доставки, например:
<tr>
<td>Способ доставки*:</td>
<td>
<select name="delivery" id="delivery_select" style="width:260px;">
<option value=""></option>
<option value="1">Доставка по ниж. части города</option>
<option value="2">Доставка по верх. части города</option>
<option value="3">от Центра Сормова в сторону 7 мкрн</option>
</select>
</td>
</tr>
Далее создаем три ресурса с шаблоном ТОВАР - Доставка по ниж. части города , Доставка по верх. части города, от Центра Сормова в сторону 7 мкрн. Для каждого ресурса ставим цену доставки в TV price.
Теперь идем на страницу ОФОРМЛЕНИЕ ЗАКАЗА и там, перед вызовом eForm вписываем код:
<script type="text/javascript">
function setCartActionsCallback(){
var dlvrName = '1'; //value той доставки, которая платная
var dlvrRow = $("tr:contains('Доставка')","#shopCart");
var dlvrIndex = typeof(dlvrRow.get(0))!='undefined' ? dlvrRow.prevAll().size() : null;
$('#delivery_select').unbind('change').bind('change',function(){
if(this.value==dlvrName){
$.fillCart(83); //id того документа, который создавали для value1 - Доставка по ниж. части города
}else{
if(dlvrIndex!=null)
$.deleteItem(dlvrIndex);
}
});
if(dlvrIndex!=null){
$('#delivery_select').val(dlvrName);
}else{
if($('#delivery_select').val()==dlvrName)
$('#delivery_select').val('');
}
}
</script>
Таким образом, у нас сейчас получилась платная доставка по ниж. части города и бесплатные остальные.
Как сделать разную стоимость доставки в Shopkeeper для Modx evo?
Воспользуемся плагином от Ray.
Создаем плагин с именем deliveryCalc, вписываем в него код из этого файла.
Системные события ставим галочку - OnSHKcalcTotalPrice
В конфигурацию - &deliveryID=идентификатор документа "доставка";string;0 (где 0 - ваш id, который полуим далее)
На страницу оформления заказа такой код:
<script type="text/javascript">
$(document).ready(function(){
$("select").change( function() {
//отправка полей формы оформления заказа shopOrderForm в плагин
jQuery.fillCart($('#shopOrderForm'));
});
//обновление корзины после загрузки или перезагрузки страницы, например
jQuery.fillCart($('#shopOrderForm'));
});
</script>
Далее, открываем файл по адресу / assets / snippets / shopkeeper / classes /class.shopkeeper.php
и в функции getCartContent после строки
list($totalItems,$totalPrice) = $this->getTotal($purchases,$addit_params);
добавляем:
$purchases = unserialize($_SESSION['purchases']);
Теперь создаем товар с именем ДОСТАВКА, его ID вписываем выше.
Ну и теперь рассчитываем доставку, делаем это в плагине, который мы создали, у меня получилось так:
//выбор или рассчёт стоимости доставки
switch($delivery){
case "1": //Доставка по ниж. части города
$deliveryPrice = 500; /*здесь может быть рассчёт стоимости доставки для (Почта России-наложенный платёж)*/
break;
case "2": //Доставка по верх. части города
$deliveryPrice=600;
break;
case "3": //от Центра Сормова в сторону 7 мкрн
$deliveryPrice=600;
break;
default:
$deliveryPrice=0;
}
Не забываем поправить все в коде плагина, например, убрать скидку и вннести правки, если используются дополнительные параметры на сайте, влияющуие на цену товара..