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

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

Здравствуйте.

Подскажите, пожалуйста, в чем может быть проблема:

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

 

файл 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}

 

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

Не стоило использовать ворованный шаблон, а нужно было покупать его у автора, тогда бы и получили техподдержку.

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

Не стоило использовать ворованный шаблон, а нужно было покупать его у автора, тогда бы и получили техподдержку.

Очень ценный ответ. Только это вопросы не ко мне. Меня попросили помочь с сайтом. Самостоятельно не нашел проблемы, по этому обратился за помощью

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

Очень ценный ответ. Только это вопросы не ко мне. Меня попросили помочь с сайтом. Самостоятельно не нашел проблемы, по этому обратился за помощью

 

такая проблема может возникнуть когда жмешь пару раз на кнопку оформить. нужно блокировать форму через js например

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

такая проблема может возникнуть когда жмешь пару раз на кнопку оформить. нужно блокировать форму через js например

я сначала тоже так подумал, но проблема не в двойном нажатии, так как форма просто остается заполненной, перехода никуда не происходит, а заказ формируется сразу же. И только при повторном нажатии корзина становиться пустой, но при этом формируется такой же заказ. 

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

тогда проблема может быть в контролере view/CartView.php 

либо какая-то то ошибка мешает редиректу смотрите есть ли все поля, капча и тд

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

думал использовать модуль заказа на одной странице решил сравнить 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)));

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

думаю различия в 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);
Ссылка на сообщение
Поделиться на другие сайты

это проблему не решило(( 

 

и в чем разница? приведенного кода от нового вашего. он делает то же самое. только в одну строку. получает массив заказов и возвращает первый из массива. этот код вообще для того чтобы ниже в поля передать данные из последнего заказа пользователя. телефон, почта, мейл в форму заказа. никак не влияет на оформление заказа

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

В чем может быть проблема, я что-то все проглядел, ничего не вижу.

Дело в не в теме, так как какую бы не ставил на всех одна и та же проблема

Файл 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');
	}
	
}
Ссылка на сообщение
Поделиться на другие сайты

возможно это как-то связано с уведомлениями в телеграм, закомментируйте эти строки

if($this->settings->tg_notify==1)
$this->tgnotify->message($order->id);

если нет, смотрите еще логи ошибок, может там что-то есть

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

возможно это как-то связано с уведомлениями в телеграм, закомментируйте эти строки

if($this->settings->tg_notify==1)
$this->tgnotify->message($order->id);

если нет, смотрите еще логи ошибок, может там что-то есть

Это не связано с уведомлением в телеграмм.

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

У вас похоже неработает вот этот код

	    	// Очищаем корзину (сессию)
			$this->cart->empty_cart();
						
			// Перенаправляем на страницу заказа
			header('Location: '.$this->config->root_url.'/order/'.$order->url);

Почему - непонятно.

Возможно, header не работает, потому, что какие-то заголовки отдаются ранее.

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

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

У вас похоже неработает вот этот код

	    	// Очищаем корзину (сессию)
			$this->cart->empty_cart();
						
			// Перенаправляем на страницу заказа
			header('Location: '.$this->config->root_url.'/order/'.$order->url);

Почему - непонятно.

Возможно, header не работает, потому, что какие-то заголовки отдаются ранее.

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

Возможно, по идее при формировании письма пользователю, генерируется ссылка на заказ. Но при переходе не отображается просто заказ, а отображается последний этап заказа, отображаются детали и выбор способа оплаты и активная кнопка "Закончить заказ", а это должно отображаться ранее перед тем как чиститься корзина. 

Как это можно исправить и как такое вообще могло получиться?

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

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

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

Да, ВСЕ ПРАВИЛЬНО!!!

ТАК И ДОЛЖНО БЫТЬ!!!

Как вам еще обьяснить?

После нажатия ОФОРМИТЬ - вы попадаете на страницу ЗАКАЗА, где его можно ОПЛАТИТЬ

Что тут непонятного???

Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

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

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

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

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

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

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

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

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

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