Стоимость доставки

Уроки и советы по работе с TSVshop
ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 23 мар 2016, 18:03

блин все равно не заработало, консоль показывает ошибку
Uncaught ReferenceError: recalc is not defined checkout:275
код который делает эту ошибку отображается так: <select name="shiptype" onChange="recalc()" ><option value="Самовывоз" >Самовывоз</option><option value="Доставка курьером" >Доставка курьером</option></select>

ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 23 мар 2016, 21:11

посмотрите тут тоже как будет возможность?

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Стоимость доставки

Сообщение admin » 23 мар 2016, 21:29

Похоже, у вас нету функции recalc, о которой я писал. Если я ошибаюсь и она есть, приведите, пож., ее код.

ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 23 мар 2016, 21:43

точно, видимо я не понял как использовать это, с modx не так давно

Код: Выделить всё

function recalc(subtotal) {
   1) Считываем текущее значение поля shiptype
   2) Определяем цену доставки для выбранного метода
   3) Определяем конечную стоимость: total = subtotal + стоимость доставки
   4) Выводим в шаблоне везде куда надо информацию о доставке. Только нужно добавить в чанке корзины в нужные места id или class, по которым jquery будет выводить данные с помощью html()     
}

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Стоимость доставки

Сообщение admin » 23 мар 2016, 21:47

Я просто не стал писать код этой функции, а только описал, что в ней должно быть.

ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 24 мар 2016, 04:53

А не затруднит вас написать? И показать как её использовать?

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Стоимость доставки

Сообщение admin » 24 мар 2016, 10:22

1) В чанке Shop_Checkout корзины, там где у вас секция <!--shipping--><!--/shipping-->, нужно убрать эти метки и оставить только то, что между ними. Только сделать небольшое изменение,вот код для замены:

Код: Выделить всё

<tr class="subtotal">
<td colspan="3"><b>Доставка:</b></td>
<td colspan="1"><span id="mynewshipping">[+shop.basket.shipping+]</span> [+shop.basket.monetary+]</td>
<td></td>
</tr>


А код секции <!--total--><!--/total--> поменять вот на этот (сами метки НЕ убирайте):

Код: Выделить всё

<!--total-->
<tr class="total">
<td colspan="3"><b>К оплате:</b></td>
<td colspan="1"><span id="mynewtotal">[+shop.basket.topay+]</span> [+shop.basket.monetary+]</td>
<td></td>
</tr>
<!--/total-->


2) Вставляете в самое начало чанка Shop_Checkout такой код:

Код: Выделить всё

<script type="text/javascript">
function recalc(subtotal) {
   //тут определяем массив со стоимостью доставки, измените как надо
   var shiparray = {
      'Самовывоз' : 0,
      'Доставка курьером' : '0-3000==300||0',
   };
   
   var shiptype = this.value;
   var shipping = parseFloat(tryCalc(shiparray[shiptype],subtotal));
   var total = subtotal + shipping;
   getId('mynewshipping').innerHTML = shipping;
   getId('mynewtotal').innerHTML = total;
}
</script>


Правда здесь будет неудобство в том, что нужно дважды в двух местах задавать массив с типами доставки и ценами. Первый раз - в плагине, а второй - в этом коде в функции recalc. Этой проблемы нету при использовании аддона Методы доставки

ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 24 мар 2016, 13:07

что то все равно не хочет.. то есть он вроде срабатывает, но когда выбирается на платную доставку, он сумму и стоимость доставки сбрасывает в значение NaN

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Стоимость доставки

Сообщение admin » 24 мар 2016, 14:08

Это не беда, вот попробуйте исправленный код:

Код: Выделить всё

<script type="text/javascript">
function recalc(subtotal) {
   //тут определяем массив со стоимостью доставки, измените как надо
   var shiparray = {
      'Самовывоз' : 0,
      'Доставка курьером' : '0-3000==300||0',
   };
   subtotal = parseFloat(subtotal);
   var shiptype = this.value;
   var shipping = parseFloat(tryCalc(shiparray[shiptype],subtotal));
   var total = subtotal + parseFloat(shipping);
   getId('mynewshipping').innerHTML = parseFloat(shipping);
   getId('mynewtotal').innerHTML = parseFloat(total);
}
</script>

ekcreate
Сообщения: 76
Зарегистрирован: 04 мар 2016, 12:08

Re: Стоимость доставки

Сообщение ekcreate » 24 мар 2016, 14:11

тоже самое(
причем он стоимость доставки в таблице выводит без числа изначально, только руб.
может с плагином беда:

Код: Выделить всё

global $modx, $tsvshop, $session;
$e = &$modx->Event;
//Определяем массив в виде Название доставки => цена/формула
$shipping = array('Доставка курьером' => '0-5000==300||0', // тут как раз ваш вариант цены
           'Самовывоз' => '0'
);

if($e->name == 'TSVshopOnUserFormFieldsRender'){
   /*тут у нас доступен массив $fields, в котором хранятся все переменные, отправленные формой оформления заказа и о самом заказе, которые потом записываются в БД. Их можно переопределить. Так и поступаем.
   Сначала смотрим, какой методы доставки выбрал заказчик. Это хранится в переменной $fields['shiptype'] (поле формы shiptype)
   И уже делаем то, что нужно. А нам нужно посмотреть, какая сумма заказа $fields['subtotal'], в зависимости от этой суммы и выбранного метода доставки записываем, столько стоит доставка в $fields['shipping']. Потом подсчитываем итоговую сумму заказа $fields['total'] и $fields['topay'];
   Нужно переопределить переменные:
   $fields['shiptype'] - 'Название доставки', остается без изменений, т.к. пришла из формы
   $fields['shipping'] - стоимость доставки
   $fields['total'] и $fields['topay'] - итоговая цена доставки: доставка+подитог
   */
   //считаем стоимость доставки встроенной функцией TSVshop, но можно по-своему сделать.
   $fields['shipping']=floatval(tsv_CalcPrice($shipping[$fields['shiptype']],round($fields['subtotal']),''));
   //считаем итоговую сумму заказа в любом случае
   $fields['total'] = $fields['topay'] = $fields['subtotal'] + $fields['shipping'];   
}

if($e->name == 'TSVshopOnBeforeUserFormRenderComplete'){
   $tpl = str_replace('[+shop.basket.subtotal+]',$_SESSION[$session]['result']['subtotal'],$tpl);
   $e->output($tpl);
}


Вернуться в «Как сделать ... ?»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость