Jump to content
Sign in to follow this  
PVL

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

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.

Share this post


Link to post
Share on other sites

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

Меня интересует правильно ли я поняла ваши правки и хотелось бы еще значть нужны ли мне все правки которые у вас есть. Так как у нас то же используется модуль 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');

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.