catdontes Опубликовано 10 января, 2017 Жалоба Поделиться Опубликовано 10 января, 2017 Здравствуйте.Подскажите, пожалуйста, в чем может быть проблема:При оформлении заказа после ввода всех необходимых полей заказ отправляется в систему, поля остаются заполненными, и требуется еще раз нажать оформить заказ после чего формируется еще один такой же заказ и переходит в пустую корзину. файл cart.tpl {* Шаблон корзины *} {$meta_title = "Корзина" scope=parent} <section class="titlebar"> <div class="container"> <div class="sixteen columns"> <h2 id="cart_title">{include file="cart_title.tpl"}</h2> <nav id="breadcrumbs"> <ul> <li><a href="./">Главная</a></li> <li>Корзина</li> </ul> </nav> </div> </div> </section> {if $cart->purchases} <form method="post" name="cart" id="purchases"> <div class="container cart"> <div class="sixteen columns"> {if $error} <div class="notification error"> <p> {if $error == 'empty_name'}Введите имя{/if} {if $error == 'empty_email'}Введите email{/if}{$error} </p> </div> {/if} {if $coupon_error} {if $coupon_error == 'invalid'} <div class="notification error"> <p>Купон недействителен</p> </div> {/if} {/if} <!-- Cart --> <table class="cart-table responsive-table" > <tr> <th> </th> <th>Товар</th> <th>Цена</th> <th>Количество</th> <th>Итого</th> <th> </th> </tr> {foreach from=$cart->purchases item=purchase} <tr id="cart_item_{$purchase->variant->id}"> <td> {$image = $purchase->product->images|first} {if $image} <a href="products/{$purchase->product->url}"> <img src="{$image->filename|resize:80:80}" alt="{$product->name|escape}"> </a> {/if} </td> <td class="cart-title"> <a href="products/{$purchase->product->url}">{$purchase->product->name|escape}</a> <div>{$purchase->variant->name|escape}</div> </td> <td>{($purchase->variant->price)|string_format:"%.2f"|replace:' ':' '} {$currency->sign}</td> <td> <div class="qtyminus"></div> <input type="text" name="amounts[{$purchase->variant->id}]" value="{$purchase->amount}" class="qty qty-{$purchase->variant->id}" data-id="{$purchase->variant->id}" autocomplete="off"> <div class="qtyplus"></div> </td> <td><strong class="cart_item_total_{$purchase->variant->id}">{($purchase->variant->price*$purchase->amount)|string_format:"%.2f"|replace:' ':' '} {$currency->sign}</strong></td> <td><a href="cart/remove/{$purchase->variant->id}" class="cart-remove" data-id="{$purchase->variant->id}"></a></td> </tr> {/foreach} </table> <!-- Apply Coupon Code / Buttons --> {if $coupon_request} <table class="cart-table bottom"> <tr> <th> <div class="apply-coupon"> <input class="search-field" type="text" name="coupon_code" placeholder="Код купона" value="{$cart->coupon->code|escape}"/> <a href="#" class="button gray" id="coupon_apply" >Применить купон</a> <span class="pull-left" id="coupon_result"></span> </div> </th> </tr> </table> {/if} </div> <div class="eight columns cart-delivery"> {* Доставка *} {if $deliveries} <h3 class="headline">Выберите способ доставки</h3><span class="line"></span><div class="clearfix"></div> <div id="accordion"> {include file="delivery.tpl"} </div> {/if} </div> <!-- Cart Totals --> <div class="eight columns cart-totals"> <h3 class="headline">Итого</h3><span class="line"></span><div class="clearfix"></div> <table class="cart-table margin-bottom-45"> <tr> <th>Стоимость заказа</th> <td id="cart_items_total">{include file="cart_items_total.tpl"}</td> </tr> {if $user->discount} <tr> <th>Cкидка</th> <td>{$user->discount} %</td> </tr> {/if} <tr id="coupon" {if !$cart->coupon || ($cart->coupon->min_order_price > $cart->total_price)}class="hidden"{/if}> <th>Купон</th> <td >{include file="cart_coupon.tpl"}</td> </tr> <tr> <th>Доставка</th> <td id="delivery_cost">{include file="delivery_cost.tpl"}</td> </tr> <tr> <th>Итого</th> <td><strong id="cart_total">{include file="cart_total.tpl"}</strong></td> </tr> </table> <h3 class="headline">Адрес получателя</h3><span class="line"></span><div class="clearfix"></div> <div class="checkout-content"> <div class="fullwidth"> <label for="cart_name">Имя, фамилия: <abbr>*</abbr></label> <input type="text" name="name" id="cart_name" value="{$name|escape}" required/> </div> <div class="half first"> <label for="cart_email">Email: <abbr>*</abbr></label> <input type="email" name="email" id="cart_email" value="{$email|escape}" required/> </div> <div class="half"> <label for="cart_phone">Телефон:</label> <input type="text" name="phone" id="cart_phone" value="{$phone|escape}"> </div> <div class="clearfix"></div> <div class="fullwidth"> <label for="cart_address">Адрес доставки:</label> <input type="text" name="address" id="cart_address" value="{$address|escape}" /> </div> <div class="fullwidth"> <label for="cart_comment">Комментарий к заказу:</label> <textarea name="comment" id="cart_comment" cols="40" rows="4">{$comment|escape}</textarea> </div> <div class="clearfix"></div> </div> <input type="submit" name="checkout" class="button cart-order" value="Оформить заказ" /> </div> </div> </form> {else} <div class="container"> <div class="sixteen columns"> <div class="notification notice margin-bottom-50"> <p>В корзине нет товаров.</p> </div> </div> </div> {/if} Файл cart_items_total.tpl {$cart->cart_price|string_format:"%.2f"|replace:' ':' '} {$currency->sign} Файл cart_total.tpl {if $delivery} {if $cart->total_price < $delivery->free_from && $delivery->price > 0} {($cart->total_price + $delivery->price)|string_format:"%.2f"|replace:' ':' '} {$currency->sign} {elseif $cart->total_price >= $delivery->free_from} {$cart->total_price|string_format:"%.2f"|replace:' ':' '} {$currency->sign} {/if} {else} {if $cart->total_price < $deliveries[0]->free_from && $deliveries[0]->price > 0} {($cart->total_price + $deliveries[0]->price)|string_format:"%.2f"|replace:' ':' '} {$currency->sign} {elseif $cart->total_price >= $deliveries[0]->free_from} {$cart->total_price|string_format:"%.2f"|replace:' ':' '} {$currency->sign} {/if} {/if} Файл cart_item_total.tpl {($variant->price*$amount)|string_format:"%.2f"|replace:' ':' '} {$currency->sign} файл cart_title.tpl {if $cart->purchases}В корзине {$cart->total_products} {$cart->total_products|plural:'товар':'товаров':'товара'}{else}Корзина пуста{/if} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 10 января, 2017 Жалоба Поделиться Опубликовано 10 января, 2017 Не стоило использовать ворованный шаблон, а нужно было покупать его у автора, тогда бы и получили техподдержку. Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 Не стоило использовать ворованный шаблон, а нужно было покупать его у автора, тогда бы и получили техподдержку.Очень ценный ответ. Только это вопросы не ко мне. Меня попросили помочь с сайтом. Самостоятельно не нашел проблемы, по этому обратился за помощью Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 10 января, 2017 Жалоба Поделиться Опубликовано 10 января, 2017 Очень ценный ответ. Только это вопросы не ко мне. Меня попросили помочь с сайтом. Самостоятельно не нашел проблемы, по этому обратился за помощью такая проблема может возникнуть когда жмешь пару раз на кнопку оформить. нужно блокировать форму через js например Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 такая проблема может возникнуть когда жмешь пару раз на кнопку оформить. нужно блокировать форму через js напримеря сначала тоже так подумал, но проблема не в двойном нажатии, так как форма просто остается заполненной, перехода никуда не происходит, а заказ формируется сразу же. И только при повторном нажатии корзина становиться пустой, но при этом формируется такой же заказ. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 10 января, 2017 Жалоба Поделиться Опубликовано 10 января, 2017 (изменено) тогда проблема может быть в контролере view/CartView.php либо какая-то то ошибка мешает редиректу смотрите есть ли все поля, капча и тд Изменено 10 января, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 (изменено) думал использовать модуль заказа на одной странице решил сравнить cartview.php и вот что получилось - https://www.diffchecker.com/OFlcDzgQ Думаю все дело в строке 176- это у меня if($this->user) { $last_order = $this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1)); $last_order = reset($last_order); а в файле стандартном с модулем используется это: if($this->user) { $last_order = reset($this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1))); Изменено 10 января, 2017 пользователем catdontes Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 думаю различия в 176 строкенадо использовать if($this->user) { $last_order = reset($this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1)));вместо if($this->user) { $last_order = $this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1)); $last_order = reset($last_order); Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 это проблему не решило(( Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 10 января, 2017 Жалоба Поделиться Опубликовано 10 января, 2017 (изменено) это проблему не решило(( и в чем разница? приведенного кода от нового вашего. он делает то же самое. только в одну строку. получает массив заказов и возвращает первый из массива. этот код вообще для того чтобы ниже в поля передать данные из последнего заказа пользователя. телефон, почта, мейл в форму заказа. никак не влияет на оформление заказа Изменено 10 января, 2017 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 10 января, 2017 Автор Жалоба Поделиться Опубликовано 10 января, 2017 В чем может быть проблема, я что-то все проглядел, ничего не вижу.Дело в не в теме, так как какую бы не ставил на всех одна и та же проблемаФайл view/CartView.php <?PHP /** * Simpla CMS * * @copyright 2009 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Корзина покупок * Этот класс использует шаблон cart.tpl * */ require_once('View.php'); class CartView extends View { ////////////////////////////////////////// // Изменения товаров в корзине ////////////////////////////////////////// public function __construct() { parent::__construct(); // Если передан id варианта, добавим его в корзину if($variant_id = $this->request->get('variant', 'integer')) { $this->cart->add_item($variant_id, $this->request->get('amount', 'integer')); header('location: '.$this->config->root_url.'/cart/'); } // Удаление товара из корзины if($delete_variant_id = intval($this->request->get('delete_variant'))) { $this->cart->delete_item($delete_variant_id); if(!isset($_POST['submit_order']) || $_POST['submit_order']!=1) header('location: '.$this->config->root_url.'/cart/'); } // Если нажали оформить заказ if(isset($_POST['checkout'])) { $order = new stdClass; $order->delivery_id = $this->request->post('delivery_id', 'integer'); $order->name = $this->request->post('name'); $order->email = $this->request->post('email'); $order->address = $this->request->post('address'); $order->phone = $this->request->post('phone'); $order->comment = $this->request->post('comment'); $order->ip = $_SERVER['REMOTE_ADDR']; $this->design->assign('delivery_id', $order->delivery_id); $this->design->assign('name', $order->name); $this->design->assign('email', $order->email); $this->design->assign('phone', $order->phone); $this->design->assign('address', $order->address); // Скидка $cart = $this->cart->get_cart(); $order->discount = $cart->discount; if($cart->coupon) { $order->coupon_discount = $cart->coupon_discount; $order->coupon_code = $cart->coupon->code; } // if(!empty($this->user->id)) $order->user_id = $this->user->id; if(empty($order->name)) { $this->design->assign('error', 'empty_name'); } elseif(empty($order->email)) { $this->design->assign('error', 'empty_email'); } else { // Добавляем заказ в базу $order_id = $this->orders->add_order($order); $_SESSION['order_id'] = $order_id; // Если использовали купон, увеличим количество его использований if($cart->coupon) $this->coupons->update_coupon($cart->coupon->id, array('usages'=>$cart->coupon->usages+1)); // Добавляем товары к заказу foreach($this->request->post('amounts') as $variant_id=>$amount) { $this->orders->add_purchase(array('order_id'=>$order_id, 'variant_id'=>intval($variant_id), 'amount'=>intval($amount))); } $order = $this->orders->get_order($order_id); // Стоимость доставки $delivery = $this->delivery->get_delivery($order->delivery_id); if(!empty($delivery) && $delivery->free_from > $order->total_price) { $this->orders->update_order($order->id, array('delivery_price'=>$delivery->price, 'separate_delivery'=>$delivery->separate_payment)); } // Отправляем письмо пользователю $this->notify->email_order_user($order->id); // Отправляем письмо администратору $this->notify->email_order_admin($order->id); //Уведомим в Telegram if($this->settings->tg_notify==1) $this->tgnotify->message($order->id); // Очищаем корзину (сессию) $this->cart->empty_cart(); // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); } } else { // Если нам запостили amounts, обновляем их if($amounts = $this->request->post('amounts')) { foreach($amounts as $variant_id=>$amount) { $this->cart->update_item($variant_id, $amount); } $coupon_code = trim($this->request->post('coupon_code', 'string')); if(empty($coupon_code)) { $this->cart->apply_coupon(''); header('location: '.$this->config->root_url.'/cart/'); } else { $coupon = $this->coupons->get_coupon((string)$coupon_code); if(empty($coupon) || !$coupon->valid) { $this->cart->apply_coupon($coupon_code); $this->design->assign('coupon_error', 'invalid'); } else { $this->cart->apply_coupon($coupon_code); header('location: '.$this->config->root_url.'/cart/'); } } } } } ////////////////////////////////////////// // Основная функция ////////////////////////////////////////// function fetch() { // Способы доставки $deliveries = $this->delivery->get_deliveries(array('enabled'=>1)); $this->design->assign('deliveries', $deliveries); // Данные пользователя if($this->user) { $last_order = $this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1)); $last_order = reset($last_order); if($last_order) { $this->design->assign('name', $last_order->name); $this->design->assign('email', $last_order->email); $this->design->assign('phone', $last_order->phone); $this->design->assign('address', $last_order->address); } else { $this->design->assign('name', $this->user->name); $this->design->assign('email', $this->user->email); } } // Если существуют валидные купоны, нужно вывести инпут для купона if($this->coupons->count_coupons(array('valid'=>1))>0) $this->design->assign('coupon_request', true); // Выводим корзину return $this->design->fetch('cart.tpl'); } } Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 11 января, 2017 Жалоба Поделиться Опубликовано 11 января, 2017 возможно это как-то связано с уведомлениями в телеграм, закомментируйте эти строки if($this->settings->tg_notify==1) $this->tgnotify->message($order->id); если нет, смотрите еще логи ошибок, может там что-то есть Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 11 января, 2017 Автор Жалоба Поделиться Опубликовано 11 января, 2017 возможно это как-то связано с уведомлениями в телеграм, закомментируйте эти строки if($this->settings->tg_notify==1) $this->tgnotify->message($order->id); если нет, смотрите еще логи ошибок, может там что-то естьЭто не связано с уведомлением в телеграмм. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2017 Жалоба Поделиться Опубликовано 11 января, 2017 Вы это проверили?Код комментировали? Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 11 января, 2017 Автор Жалоба Поделиться Опубликовано 11 января, 2017 Вы это проверили?Код комментировали?да, закомментировал и сделал заказ Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2017 Жалоба Поделиться Опубликовано 11 января, 2017 У вас похоже неработает вот этот код // Очищаем корзину (сессию) $this->cart->empty_cart(); // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); Почему - непонятно.Возможно, header не работает, потому, что какие-то заголовки отдаются ранее.Встречал такое на одном сайте. Так и не разобрался, почему. Пришлось делать костыльный редирект через джаваскрипт. Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 11 января, 2017 Автор Жалоба Поделиться Опубликовано 11 января, 2017 (изменено) У вас похоже неработает вот этот код // Очищаем корзину (сессию) $this->cart->empty_cart(); // Перенаправляем на страницу заказа header('Location: '.$this->config->root_url.'/order/'.$order->url); Почему - непонятно.Возможно, header не работает, потому, что какие-то заголовки отдаются ранее.Встречал такое на одном сайте. Так и не разобрался, почему. Пришлось делать костыльный редирект через джаваскрипт.Возможно, по идее при формировании письма пользователю, генерируется ссылка на заказ. Но при переходе не отображается просто заказ, а отображается последний этап заказа, отображаются детали и выбор способа оплаты и активная кнопка "Закончить заказ", а это должно отображаться ранее перед тем как чиститься корзина. Как это можно исправить и как такое вообще могло получиться? Изменено 11 января, 2017 пользователем catdontes Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2017 Жалоба Поделиться Опубликовано 11 января, 2017 Это нормально, так и должно быть Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 11 января, 2017 Автор Жалоба Поделиться Опубликовано 11 января, 2017 Протестировал на другом магазине, после нажатия оформить заказ, переходит на выбор способа оплаты, и там отображается страница с деталями заказа и выбор оплаты и только потом закончить заказ. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 11 января, 2017 Жалоба Поделиться Опубликовано 11 января, 2017 Да, ВСЕ ПРАВИЛЬНО!!!ТАК И ДОЛЖНО БЫТЬ!!!Как вам еще обьяснить?После нажатия ОФОРМИТЬ - вы попадаете на страницу ЗАКАЗА, где его можно ОПЛАТИТЬЧто тут непонятного??? Цитата Ссылка на сообщение Поделиться на другие сайты
catdontes Опубликовано 13 января, 2017 Автор Жалоба Поделиться Опубликовано 13 января, 2017 (изменено) Тему можно закрывать. Изменено 13 января, 2017 пользователем catdontes Цитата Ссылка на сообщение Поделиться на другие сайты
Tarasbulba Опубликовано 8 октября, 2017 Жалоба Поделиться Опубликовано 8 октября, 2017 у меня такая же ошибка. как то это решилось? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.