Joe Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Обычно мы выбираем в корзине доставку и заполняем свои данные. Потом переход идёт на страницу УЖЕ заказа и там выбирается оплата. Можно ли убрать этап перехода на страницу заказа и завершить заказ в корзине, выбрав в ней способ оплаты? другими словами не делать 1 лишний переход на новую страницу Цитата Ссылка на сообщение Поделиться на другие сайты
Simplamarket Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Можно. Такая доработка называется "Оформление заказа на одной странице" Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Пишите в скайп simplacms, сделаю.Делал это уже много кому. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 в view/CartView.php после (строка 45): if(isset($_POST['checkout'])) { добавляем: $order->payment_method_id=$this->request->post('payment_method_id', 'integer'); после (строка 172): // Способы доставки $deliveries = $this->delivery->get_deliveries(array('enabled'=>1)); добавляем выбор методов оплаты: foreach($deliveries as $delivery) $delivery->payment_methods = $this->payment->get_payment_methods(array('delivery_id'=>$delivery->id, 'enabled'=>1)); в /design/themes/cart.tpl добавляем после доставки: {if $deliveries} {foreach $deliveries as $delivery} {if $delivery->payment_methods} <div class="delivery_payment {if $delivery@first}first{/if}" id="delivery_payment_{$delivery->id}" style="display:none" > <h2>Выберите способ оплаты</h2> <ul id="deliveries"> {foreach $delivery->payment_methods as $payment_method} <li> <div class="checkbox"> <input class="{if $payment_method@first}payment_first{/if}" type=radio name=payment_method_id value='{$payment_method->id}' {if $payment_method@first}checked{/if} id=payment_{$payment_method->id}> </div> {$total_price_with_delivery = $cart->total_price} {if !$delivery->separate_payment} {$total_price_with_delivery = $cart->total_price + $delivery->price} {/if} <h3><label for=payment_{$payment_method->id}> {$payment_method->name}, к оплате {$total_price_with_delivery|convert:$payment_method->currency_id} {$all_currencies[$payment_method->currency_id]->sign}</label></h3> <div class="description"> {$payment_method->description} </div> </li> {/foreach} </ul> </div> {/if} {/foreach} {/if} также в самый конец добавить скрипт переключения оплаты в зависимости от выбранного способа доставки <script> $(document).ready(function(){ $("#deliveries .first").click(); }); function change_payment_method($id) { $("#delivery_payment_"+$id+" .payment_first").attr('checked','checked'); $(".delivery_payment").css("display","none"); $("#delivery_payment_"+$id).css("display","block"); } </script> Цитата Ссылка на сообщение Поделиться на другие сайты
Joe Опубликовано 24 мая, 2015 Автор Жалоба Поделиться Опубликовано 24 мая, 2015 не очень понял по поводу добавить после доставки. Раздел доставки у меня выглядит так {* Доставка *} {if $deliveries} <div class="profile_block_head back3">Выберите способ доставки: </div> <div class="profile_block_body clearfix"> <ul id="deliveries" class="no"> {foreach $deliveries as $delivery} <li> <div class="checkbox"> <input type="radio" name="delivery_id" value="{$delivery->id}" {if $delivery_id==$delivery->id}checked{elseif $delivery@first}checked{/if} id="deliveries_{$delivery->id}"> </div> <h3> <label for="deliveries_{$delivery->id}"> {$delivery->name} {if $cart->total_price < $delivery->free_from && $delivery->price>0} ({$delivery->price|convert} {$currency->sign}) {elseif $cart->total_price >= $delivery->free_from} (бесплатно) {/if} </label> </h3> <div class="description"> {$delivery->description} </div> </li> {/foreach} </ul> </div> </div> и вот после этого я добавил то, что Вы указали. Фик. ничего не изменилось вообще Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 нужно немного изменить еще саму доставку, чтобы в итоге вышло так: {* Доставка *} {if $deliveries} <h2>Выберите способ доставки:</h2> <ul id="deliveries"> {foreach $deliveries as $delivery} <li> <div class="checkbox"> <input {if $delivery@first}class="first"{/if} onclick="change_payment_method({$delivery->id})"{*/*/order-on-one-page*/*} type="radio" name="delivery_id" value="{$delivery->id}" {if $delivery_id==$delivery->id}checked{elseif $delivery@first}checked{/if} id="deliveries_{$delivery->id}"> </div> <h3> <label for="deliveries_{$delivery->id}"> {$delivery->name} {if $cart->total_price < $delivery->free_from && $delivery->price>0} ({$delivery->price|convert} {$currency->sign}) {elseif $cart->total_price >= $delivery->free_from} (бесплатно) {/if} </label> </h3> <div class="description"> {$delivery->description} </div> </li> {/foreach} </ul> {/if} {* Оплата *} {if $deliveries} {foreach $deliveries as $delivery} {if $delivery->payment_methods} <div class="delivery_payment {if $delivery@first}first{/if}" id="delivery_payment_{$delivery->id}" style="display:none" > <h2>Выберите способ оплаты</h2> <ul id="deliveries"> {foreach $delivery->payment_methods as $payment_method} <li> <div class="checkbox"> <input class="{if $payment_method@first}payment_first{/if}" type=radio name=payment_method_id value='{$payment_method->id}' {if $payment_method@first}checked{/if} id=payment_{$payment_method->id}> </div> {$total_price_with_delivery = $cart->total_price} {if !$delivery->separate_payment} {$total_price_with_delivery = $cart->total_price + $delivery->price} {/if} <h3><label for=payment_{$payment_method->id}> {$payment_method->name}, к оплате {$total_price_with_delivery|convert:$payment_method->currency_id} {$all_currencies[$payment_method->currency_id]->sign}</label></h3> <div class="description"> {$payment_method->description} </div> </li> {/foreach} </ul> </div> {/if} {/foreach} {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
drakulitkas Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Ошибку выдает в view/CartView.php $order->payment_method_id=$this->request->post('payment_method_id', 'integer'); и // Очищаем корзину (сессию) $this->cart->empty_cart(); // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); Цитата Ссылка на сообщение Поделиться на другие сайты
drakulitkas Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 (изменено) Warning: Creating default object from empty value in C:\OpenServer\domains\localhost\view\CartView.php on line 45Warning: Cannot modify header information - headers already sent by (output started atC:\OpenServer\domains\localhost\view\CartView.php:45) in C:\OpenServer\domains\localhost\view\CartView.php on line 126Warning: Cannot modify header information - headers already sent by (output started atC:\OpenServer\domains\localhost\view\CartView.php:45) in C:\OpenServer\domains\localhost\index.php on line 65 Изменено 24 мая, 2015 пользователем drakulitkas Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Ошибку выдает в view/CartView.php $order->payment_method_id=$this->request->post('payment_method_id', 'integer'); и // Очищаем корзину (сессию) $this->cart->empty_cart(); // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); поставьте $order->payment_method_id=$this->request->post('payment_method_id', 'integer'); после $order = new stdClass; Цитата Ссылка на сообщение Поделиться на другие сайты
drakulitkas Опубликовано 24 мая, 2015 Жалоба Поделиться Опубликовано 24 мая, 2015 Заработало )) спасибо )) Цитата Ссылка на сообщение Поделиться на другие сайты
Joe Опубликовано 25 мая, 2015 Автор Жалоба Поделиться Опубликовано 25 мая, 2015 спасибо большое) Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 мая, 2015 Жалоба Поделиться Опубликовано 28 мая, 2015 итак в итоге: в view/CartView.php после (строка 45): if(isset($_POST['checkout'])) { $order = new stdClass;добавляем: $order->payment_method_id=$this->request->post('payment_method_id', 'integer'); после (строка 172): // Способы доставки $deliveries = $this->delivery->get_deliveries(array('enabled'=>1)); добавляем выбор методов оплаты: foreach($deliveries as $delivery) $delivery->payment_methods = $this->payment->get_payment_methods(array('delivery_id'=>$delivery->id, 'enabled'=>1)); в /design/themes/cart.tpl меняем: {if $deliveries} {foreach $deliveries as $delivery} {if $delivery->payment_methods} <div class="delivery_payment {if $delivery@first}first{/if}" id="delivery_payment_{$delivery->id}" style="display:none" > <h2>Выберите способ оплаты</h2> <ul id="deliveries"> {foreach $delivery->payment_methods as $payment_method} <li> <div class="checkbox"> <input class="{if $payment_method@first}payment_first{/if}" type=radio name=payment_method_id value='{$payment_method->id}' {if $payment_method@first}checked{/if} id=payment_{$payment_method->id}> </div> {$total_price_with_delivery = $cart->total_price} {if !$delivery->separate_payment} {$total_price_with_delivery = $cart->total_price + $delivery->price} {/if} <h3><label for=payment_{$payment_method->id}> {$payment_method->name}, к оплате {$total_price_with_delivery|convert:$payment_method->currency_id} {$all_currencies[$payment_method->currency_id]->sign}</label></h3> <div class="description"> {$payment_method->description} </div> </li> {/foreach} </ul> </div> {/if} {/foreach} {/if} на: {* Доставка *} {if $deliveries} <h2>Выберите способ доставки:</h2> <ul id="deliveries"> {foreach $deliveries as $delivery} <li> <div class="checkbox"> <input {if $delivery@first}class="first"{/if} onclick="change_payment_method({$delivery->id})"{*/*/order-on-one-page*/*} type="radio" name="delivery_id" value="{$delivery->id}" {if $delivery_id==$delivery->id}checked{elseif $delivery@first}checked{/if} id="deliveries_{$delivery->id}"> </div> <h3> <label for="deliveries_{$delivery->id}"> {$delivery->name} {if $cart->total_price < $delivery->free_from && $delivery->price>0} ({$delivery->price|convert} {$currency->sign}) {elseif $cart->total_price >= $delivery->free_from} (бесплатно) {/if} </label> </h3> <div class="description"> {$delivery->description} </div> </li> {/foreach} </ul> {/if} {* Оплата *} {if $deliveries} {foreach $deliveries as $delivery} {if $delivery->payment_methods} <div class="delivery_payment {if $delivery@first}first{/if}" id="delivery_payment_{$delivery->id}" style="display:none" > <h2>Выберите способ оплаты</h2> <ul id="deliveries"> {foreach $delivery->payment_methods as $payment_method} <li> <div class="checkbox"> <input class="{if $payment_method@first}payment_first{/if}" type=radio name=payment_method_id value='{$payment_method->id}' {if $payment_method@first}checked{/if} id=payment_{$payment_method->id}> </div> {$total_price_with_delivery = $cart->total_price} {if !$delivery->separate_payment} {$total_price_with_delivery = $cart->total_price + $delivery->price} {/if} <h3><label for=payment_{$payment_method->id}> {$payment_method->name}, к оплате {$total_price_with_delivery|convert:$payment_method->currency_id} {$all_currencies[$payment_method->currency_id]->sign}</label></h3> <div class="description"> {$payment_method->description} </div> </li> {/foreach} </ul> </div> {/if} {/foreach} {/if} в самый конец этого файла добавляем скрипт для переключения оплаты в зависимости от доставки: <script> $(document).ready(function(){ $("#deliveries .first").click(); }); function change_payment_method($id) { $("#delivery_payment_"+$id+" .payment_first").attr('checked','checked'); $(".delivery_payment").css("display","none"); $("#delivery_payment_"+$id).css("display","block"); } </script> Цитата Ссылка на сообщение Поделиться на другие сайты
Joe Опубликовано 31 мая, 2015 Автор Жалоба Поделиться Опубликовано 31 мая, 2015 а вот есть одна проблема. к примеру при заказе на сумму от 3000 рублей - доставка бесплатна. если меньше, то 300 рублей. и какую бы сумму заказа не набрал - доставка на странице заказа учитывается +300. а когда оформил, то уже идёт правильный пересчёт на следующей странице и там уже корректно. просто сбивает покупателя с толку сумма к оплате (3000+ сумма заказа)+300 за доставку. а в итоге просто 3000+ Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 7 июня, 2015 Жалоба Поделиться Опубликовано 7 июня, 2015 а вот есть одна проблема. к примеру при заказе на сумму от 3000 рублей - доставка бесплатна. если меньше, то 300 рублей. и какую бы сумму заказа не набрал - доставка на странице заказа учитывается +300. а когда оформил, то уже идёт правильный пересчёт на следующей странице и там уже корректно. просто сбивает покупателя с толку сумма к оплате (3000+ сумма заказа)+300 за доставку. а в итоге просто 3000+ нужно смотреть ваш код, в моем вроде как учитывается что если заказ больше суммы то доставка бесплатно. Цитата Ссылка на сообщение Поделиться на другие сайты
flamedeluxe Опубликовано 12 июня, 2015 Жалоба Поделиться Опубликовано 12 июня, 2015 Граждане, у меня смежный вопрос, хотел сделать при клике на "закончить заказ" чтобы ajax ом подгружало страничку с вариантами оплаты, но чего то не пойму почему не обрабатывает данные в POST $('body').on('submit', 'form[name=cart]', function(){ var form = $(this); var item_cart = $('#cart-in #item-content'); var data = form.serialize(); $.ajax({ url: '/order/', type: 'POST', dataType: 'html', data: data, success: function(data){ var cut_data = $(data).find('#qvw').html(); item_cart.html(cut_data); } }); return false; }); Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 26 июля, 2016 Жалоба Поделиться Опубликовано 26 июля, 2016 Попробовал воспользоваться предложенным методом.Работает. Но обнаружились недостатки: 1. Методы оплаты извлекаются в цикле, по каждому методу доставки отдельно. Это создает излишнюю нагрузку на базу.2. В коде страницы методы оплаты повторяются несколько раз - по каждому методу доставки, для которой разрешен. Опять избыточная нагрузка. В итоге - весьма нерационально... Цитата Ссылка на сообщение Поделиться на другие сайты
Vladq Опубликовано 26 июля, 2016 Жалоба Поделиться Опубликовано 26 июля, 2016 Почто забанили то? (кабы не секрет) Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 30 июля, 2016 Жалоба Поделиться Опубликовано 30 июля, 2016 Обнаружилась еще одна ошибка - в функциональности.3. Если открыть страницу корзины, и сразу же попробовать переключать способы оплаты, то переключение правильно работает и при клике на радиокнопку и при клике на текст названия оплаты. Если же изменить способ доставки, то после этого переключение при клике на текст названия оплаты работает неверно - просто отключаются все способы оплаты. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.