Перейти к содержанию
PVL

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

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

Всем привет!

 

Использую "Модуль 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.

Поделиться сообщением


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

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

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.