Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Посещение checkout_success без оформления заказа.


PVL

Recommended Posts

Всем привет!

 

Использую "Модуль Simple - упрощенная регистрация и заказ"

 

Была ошибка:

PHP Notice:  Undefined index:  last_order_id in u/vqmod/vqcache/vq2-catalog_controller_checkout_success.php on line 119

или без vqmod:

PHP Notice:  Undefined index:  last_order_id in /catalog/controller/checkout/success.php on line 86

 

 
Строчка: $this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->session->data['last_order_id'], $this->url->link('information/contact'));
 
Которая возникала при посещение страницы checkout-success без заказа.
Мне нужно было не только избавиться от этой ошибки, но и запретить открывать эту страницу по URL. Каждый переход на такую страницу - цель считается достигнутой, в метрике - "Заказ отправлен". Т.е. по статистике заказ отправлен - а на самом деле кто-то просто открыл эту страницу.
 
Сделал так, в файле: /catalog/controller/checkout/success.php добавляем условие, если у пользователя нету в сессии номера заказа => срабатывает переадресация на главную страницу.
if(isset($this->session->data['last_order_id'])){
if ($this->customer->isLogged()) {
$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/order/info&order_id=' . $this->session->data['last_order_id'], '', 'SSL'), $this->session->data['last_order_id'], $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
} 
else {

$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->session->data['last_order_id'], $this->url->link('information/contact'));

}
}
else {
$this->redirect($this->url->link('common/home'));

}

 

+

Меня всегда раздражало. В метрики настроена цель на посещение страницы /checkout.html (checkout/simplecheckout) - "Корзина". Пользователи гуляют по сайту, и иногда нажимают "Оформит заказ", или боты заходят - статистика конверсии неактуальна. Мне не нужны достигшие цели ботов, или пользователей, которые не положили товар в коризину.

 

Сделал так, в файле /catalog/controller/checkout/simplecheckout.php:

 

Ищем:

$this->data['heading_title'] = $this->language->get('heading_title');
            
$this->data['text_error'] = $this->language->get('text_empty');

Добавляем выше:

$this->redirect($this->url->link('checkout/cart'));

 

 

В итоге, если пользователь не положил товар в корзину и он переходит на страницу /checkout.html (checkout/simplecheckout), его автоматически перекидывает  на /shopping-cart.html (checkout/cart).

 

 

Хороших и правильных отчетов в метрике ;)

 

P.S. Уверен, данное решение не идеальное. Если есть более правильные решение, буду рад обсудить. Больше спасибо за помощь zubovd.

Надіслати
Поділитися на інших сайтах


  • 7 months later...

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

Меня интересует правильно ли я поняла ваши правки и хотелось бы еще значть нужны ли мне все правки которые у вас есть. Так как у нас то же используется модуль Simple, но нет ошибки:

 

PHP Notice:  Undefined index:  last_order_id in u/vqmod/vqcache/vq2-catalog_controller_checkout_success.php on line 119

или без vqmod:

PHP Notice:  Undefined index:  last_order_id in /catalog/controller/checkout/success.php on line 86

И строка

 

$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->session->data['last_order_id'], $this->url->link('information/contact'));

Имеет у меня вид

 

$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->url->link('information/contact'));

Если я правильно поняла о какой строчке идет речь в указаном фаиле.

Так вот на сколько я поняла вот эту строку: $this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->url->link('information/contact')); я дожна заменить на:

if(isset($this->session->data['last_order_id'])){
if ($this->customer->isLogged()) {
$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/order/info&order_id=' . $this->session->data['last_order_id'], '', 'SSL'), $this->session->data['last_order_id'], $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
} 
else {

$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->session->data['last_order_id'], $this->url->link('information/contact'));

}
}
else {
$this->redirect($this->url->link('common/home'));

}

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

И у меня кусок кода:

		if ($this->customer->isLogged()) {
    		$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
		} else {
    		$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->url->link('information/contact'));
		}

Становиться вот таким:

		if ($this->customer->isLogged()) {
    		$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
		} else {
    		
if(isset($this->session->data['last_order_id'])){
if ($this->customer->isLogged()) {
$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/order/info&order_id=' . $this->session->data['last_order_id'], '', 'SSL'), $this->session->data['last_order_id'], $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
}
else {

$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->session->data['last_order_id'], $this->url->link('information/contact'));

}
}
else {
$this->redirect($this->url->link('common/home'));

}

		}

Я правильно вас поняла?

Во втором случае я строки:

$this->data['heading_title'] = $this->language->get('heading_title');
            
$this->data['text_error'] = $this->language->get('text_empty');

меняю на:

            $this->redirect($this->url->link('checkout/cart'));

            $this->data['heading_title'] = $this->language->get('heading_title');
            
            $this->data['text_error'] = $this->language->get('text_empty');
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.