esistema1 Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 Всем здравствуйте, прошу помощи... 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> Где кроется ошибка? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 (изменено) тут ошибка: <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> Изменено 12 июня, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Переставил - все равно цена не добавляется.. Где то еще видимо ошибка... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Если вставить родной код с radio button то стоимость доставки начинает нормально добавляться даже без изменения скрипта. А как сделать select??? Уже два дня с ним мучаюсь.. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 вот этот кусок еще не правильный. 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); } нет таких айди нигде со стоимостью доставки Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Если можно подробнее, пожалуйста - не понял что надо и где исправить. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Вообще это родной скрипт симплы и если вернуть ещё родной код с радио то скрипт срабатывает и меняет цену. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 (изменено) Вообще это родной скрипт симплы и если вернуть ещё родной код с радио то скрипт срабатывает и меняет цену. если вы изменили в нем все и понаставляли ошибок, то это НЕ родной скрипт симплы. пробуйте так <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> Изменено 12 июня, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 ООО спасибо - уже почти хорошо!!! при выборе способа доставки цена меняется, но когда перегружаешь страницу и стоит первый вариант доставки по умолчанию его стоимость не добавлена в итого. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 и ошибку еще теперь еще браузер показывает здесь: <script> select_delivery_method({$delivery_method_id}); </script> Can't find variable: $delivery_method_id Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Исправил - {/literal} - поднял перед последним скриптом. Все вроде работает, сейчас протестирую! Спасибо огромнейшее!! Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Еще один момент обнаружил - если доставка становится бесплатной (от суммы заказа) то стоимость все равно добавляется... Как исправить? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 Еще один момент обнаружил - если доставка становится бесплатной (от суммы заказа) то стоимость все равно добавляется... Как исправить? меняйте 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} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 меняйте 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? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 (изменено) А зачем такой изврат когда проверку проще сделать в JS? не вижу никакого изврата. js сразу берет нужное значение. если есть какое-то обоснование то я бы послушал. а так просто писать что-то ... Изменено 12 июня, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 12 июня, 2017 Автор Жалоба Поделиться Опубликовано 12 июня, 2017 Спасибо работает!!!Но в одном месте код исправил - чтобы заработало.. data-price="{if $total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}" Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 12 июня, 2017 Жалоба Поделиться Опубликовано 12 июня, 2017 Спасибо работает!!!Но в одном месте код исправил - чтобы заработало.. data-price="{if $total_price < $delivery_method->free_from && $delivery_method->price>0}{$delivery_method->price}{else}0{/if}" да, это во второй версии $cart->total_price. извиняюсь Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.