Перейти к содержанию
Официальный форум поддержки Simpla

Варианты доставки через select - не добавляется стоимость доставки


Рекомендуемые сообщения

Всем здравствуйте, прошу помощи...

 

Simpla 1.4 (не переезжаю потому что сделано много доработок) - пытаюсь реализовать выбор варианта доставки через select, все работает правильно и при заказе выбранный вариант доставки и его стоимость встает правильно.

 

Но в корзине на автомате не меняется цена как это было с radio button. 

 

Код select c выбором вариантов доставки:

<select  name="delivery_method_id"
      {foreach name=delivery from=$delivery_methods item=delivery_method}
      onchange="select_delivery_method({$delivery_method->delivery_method_id});">
  
 <option  value='{$delivery_method->delivery_method_id}' {if $delivery_method->delivery_method_id == $delivery_method_id}selected{/if}>
     
        {$delivery_method->name}

         </option>

        {/foreach}
                </select>
   
       <div class="total_line">
        <span class='total_sum'>Итого с доставкой: <span id='total_price'>{$total_price *$currency->rate_from/$currency->rate_to|string_format:"%.0f"}</span> {$currency->sign}</span>

Код скрипта:

{literal}
    <script>
      function select_delivery_method(method_id)
      {
        option = document.getElementsByName('delivery_method_id');
        for(var i=0;i<option.length;i++)
        {
          if(option[i].value == method_id)
          {
            option[i].selected = 1;
          }
        }
    
      var subtotal = parseFloat(document.getElementById('subtotal_price').innerHTML);
      var delivery = 0;
      if(document.getElementById('delivery_price_'+method_id))
delivery = parseFloat(document.getElementById('delivery_price_'+method_id).innerHTML);
      total = subtotal+delivery;
      document.getElementById('total_price').innerHTML = total.toFixed(2);
      }
    </script>
    {/literal}    
            
    <script>
      select_delivery_method({$delivery_method_id});
    </script>       

 

 

Где кроется ошибка?

Ссылка на сообщение
Поделиться на другие сайты

тут ошибка:

 

<select  name="delivery_method_id"
      {foreach name=delivery from=$delivery_methods item=delivery_method}
      onchange="select_delivery_method({$delivery_method->delivery_method_id});">
  
 <option  value='{$delivery_method->delivery_method_id}' {if $delivery_method->delivery_method_id == $delivery_method_id}selected{/if}>
     
        {$delivery_method->name}

         </option>

        {/foreach}
                </select>

цикл должен быть ПЕРЕД <option ... а не там где он сейчас.

вот так

 

 

<select name="delivery_method_id" onchange="select_delivery_method({$delivery_method->delivery_method_id});">
    {foreach name=delivery from=$delivery_methods item=delivery_method}
    	<option  value='{$delivery_method->delivery_method_id}' {if $delivery_method->delivery_method_id == $delivery_method_id}selected{/if}>{$delivery_method->name}</option>
    {/foreach}
</select>
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Если вставить родной код с radio button то стоимость доставки начинает нормально добавляться даже без изменения скрипта. А как сделать select??? Уже два дня с ним мучаюсь..

Ссылка на сообщение
Поделиться на другие сайты

вот этот кусок еще не правильный. 

 

      if(document.getElementById('delivery_price_'+method_id))
delivery = parseFloat(document.getElementById('delivery_price_'+method_id).innerHTML);
      total = subtotal+delivery;
      document.getElementById('total_price').innerHTML = total.toFixed(2);
      }

нет таких айди нигде со стоимостью доставки

Ссылка на сообщение
Поделиться на другие сайты

Вообще это родной скрипт симплы и если вернуть ещё родной код с радио то скрипт срабатывает и меняет цену.

Ссылка на сообщение
Поделиться на другие сайты

Вообще это родной скрипт симплы и если вернуть ещё родной код с радио то скрипт срабатывает и меняет цену.

 

если вы изменили в нем все и понаставляли ошибок, то это НЕ родной скрипт симплы.

 

пробуйте так

<select name="delivery_method_id" onchange="select_delivery_method(this.value);">
    {foreach name=delivery from=$delivery_methods item=delivery_method}
    	<option value='{$delivery_method->delivery_method_id}' id="delivery_price_{$delivery_method->delivery_method_id}" data-price="{$delivery_method->price}" {if $delivery_method->delivery_method_id == $delivery_method_id}selected{/if}>{$delivery_method->name}</option>
    {/foreach}
</select>

 

и js

{literal}
    <script>
	function select_delivery_method(method_id)
	{
		var subtotal = parseFloat(document.getElementById('subtotal_price').innerHTML);
		var delivery = 0;

        if(document.getElementById('delivery_price_'+method_id)) {
      		current = document.getElementById('delivery_price_'+method_id);
      		delivery = parseFloat( current.getAttribute('data-price') );
        }

  		total = subtotal+delivery;
      	document.getElementById('total_price').innerHTML = total.toFixed(2);
    }
    </script>
{/literal}     

<script>
	select_delivery_method({$delivery_method_id});
</script>       
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

ООО спасибо - уже почти хорошо!!!  при выборе способа доставки цена меняется, но когда перегружаешь страницу и стоит первый вариант доставки по умолчанию его стоимость не добавлена в итого.

Ссылка на сообщение
Поделиться на другие сайты

и ошибку еще теперь еще браузер показывает здесь:

 

<script>
      select_delivery_method({$delivery_method_id});
</script>       

 

Can't find variable: $delivery_method_id
Ссылка на сообщение
Поделиться на другие сайты

Исправил - {/literal} - поднял перед последним скриптом. Все вроде работает, сейчас протестирую! Спасибо огромнейшее!!

Ссылка на сообщение
Поделиться на другие сайты

Еще один момент обнаружил - если доставка становится бесплатной (от суммы заказа) то стоимость все равно добавляется... Как исправить?

Ссылка на сообщение
Поделиться на другие сайты

Еще один момент обнаружил - если доставка становится бесплатной (от суммы заказа) то стоимость все равно добавляется... Как исправить?

 

меняйте 

data-price="{$delivery_method->price}"

на

data-price="{if $cart->total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}
Ссылка на сообщение
Поделиться на другие сайты

меняйте 

data-price="{$delivery_method->price}"
на
data-price="{if $cart->total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}
А зачем такой изврат когда проверку проще сделать в JS?

 

 

Ссылка на сообщение
Поделиться на другие сайты

А зачем такой изврат когда проверку проще сделать в JS?

 

не вижу никакого изврата. js сразу берет нужное значение. если есть какое-то обоснование то я бы послушал. а так просто писать что-то ... 

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Спасибо работает!!!

Но в одном месте код исправил - чтобы заработало..

 

data-price="{if $total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}"
Ссылка на сообщение
Поделиться на другие сайты

 

Спасибо работает!!!

Но в одном месте код исправил - чтобы заработало..

 

data-price="{if $total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}"

 

да, это во второй версии $cart->total_price. извиняюсь

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...