Упрощаем заказ с регистрацией или увеличиваем конверсию OpenCart

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

OpenCart оформление заказа с регистрацией

Единственная радость — шагов всего 3, потому что еще три не нужных шага мы уже убрали. В этой статье мы проделаем практически тоже самое что и в прошлой части, только будут другие файлы.

Для тех у кого возникают ошибки или кто не хочет копаться в коде рекомендую статью Установка и настройка модуля simple на opencart. В ней не нужно копаться в коде, там все предельно ясно настраивается с помощью мышки.

Итак, приступаем.

Как убрать необязательные поля из формы заказа OpenCart

Для начала, так сказать для разогрева давайте попробуем сделать сначала самую легкую часть работы — уберем поля которые не обязательны для заполнения.

Как убрать поле «ID компании», и поле «Компания»

Поскольку ID компании мало кому надо, как в B2B продажах так и в B2C, то это поле мы можем смело удалять. С полем компания все не так очевидно. Если вы продаете часным лицам то можете смело удалять поле «Компания», если ваш основной потребитель это компании то лучше всего оставьте.

  1. Найдите и скопируйте файл к себе на компьютер
    1
    
    catalog/view/theme/Ваша тема/template/checkout/register.tpl
  2. Чтобы удалить «ID компании» найдите такие строчки
    1
    2
    3
    4
    5
    
     <div id="company-id-display"><span id="company-id-required" class="required">*</span> <?php echo $entry_company_id; ?><br />
        <input type="text" name="company_id" value="" class="large-field" />
        <br />
        <br />
      </div>

    и удалите их

  3. Чтобы удалить поле компания найдите и удалите такие строчки:
    1
    2
    3
    4
    
    <?php echo $entry_company; ?><br />
      <input type="text" name="company" value="" class="large-field" />
      <br />
      <br />
  4. Загрузите файл назад и проверьте изменения.

Убираем поле «Адрес (продолжение)» в форме заказа

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

1
catalog/view/theme/Ваша тема/template/checkout/register.tpl

Удалить код

1
2
3
4
<?php echo $entry_address_2; ?><br />
  <input type="text" name="address_2" value="" class="large-field" />
  <br />
  <br />

И загрузить измененный файл назад.

Убираем поле «Индекс»

Это поле нужно только если вы часто отправляете товары обычной почтой, но поскольку в странах СНГ этой службой практически никто не пользуется, потому что она работает из рук вон плохо, то и это поле можно смело удалить. Для этого в том же файле найдите строчки:

1
2
3
4
<span id="payment-postcode-required" class="required">*</span> <?php echo $entry_postcode; ?><br />
  <input type="text" name="postcode" value="<?php echo $postcode; ?>" class="large-field" />
  <br />
  <br />

И удалите их, в этом ничего сожного нет, все как мы и делали.

Убираем поле «Факс»

Поскольку как таковым факсом никто в современном мире не пользуется, ведь уже изобретены сканеры, PDF документы и прочее, то это поле тоже можно удалять, для это достаточно найти и «уничтожить» код:

1
2
3
4
<?php echo $entry_fax; ?><br />
  <input type="text" name="fax" value="" class="large-field" />
  <br />
  <br />

Казалось бы все просто? Но не совсем так, когда мы попробуем оформить заказ то нам выдаст такие ошибки:

1
2
3
4
5
6
SyntaxError: JSON Parse error: Unrecognized token '<'
OK
<b>Notice</b>: 
Undefined index: fax in <b>/home/www/catalog/model/account/customer.php</b> on line <b>14</b><b>Notice</b>: Undefined index: company_id in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b><b>Notice</b>: Undefined index: address_2 in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b><b>Notice</b>: Undefined index: postcode in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b><b>Notice</b>: Undefined index: country_id in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b><b>Notice</b>: Undefined index: zone_id in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b>
 
Undefined index: postcode in <b>/home/www/catalog/controller/checkout/register.php</b> on line <b>190</b><b>Notice</b>: Undefined index: fax in <b>/home/www/catalog/model/account/customer.php</b> on line <b>14</b><b>Notice</b>: Undefined index: postcode in <b>/home/www/catalog/model/account/customer.php</b> on line <b>18</b>[]

Замечательно, давайте их исправим. Находим файл

1
catalog/model/account/customer.php

И удаляем из него следующий код (строчка 14)

1
, fax = '" . $this->db->escape($data['fax']) . "'

Из того же файла только строчка 18

1
company_id = '" . $this->db->escape($data['company_id']) . "',
1
address_2 = '" . $this->db->escape($data['address_2']) . "',
1
postcode = '" . $this->db->escape($data['postcode']) . ",

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

Так, понял что совсем вас запутал. Смотрите, после первого тестового заказа вам больше не будут предлагать регистрироваться, а только сменить адрес. Чтобы повторять эксперименты с регистрацией вам надо:

  1. В новой вкладке открыть админку вашего сайта
  2. Перейти в Продажи->Покупатели->Покупатели
  3. И удалить свежесозданого покупателя.

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

1
2
3
SyntaxError: JSON Parse error: Unrecognized token '<'
OK
<b>Notice</b>: Undefined index: postcode in <b>/home/www/catalog/controller/checkout/register.php</b> on line <b>190</b>[]

Чтобы исправить ее нам надо:

  1. Найти файл
    1
    
    catalog/controller/checkout/register.php
  2. Удалить из него код:
    1
    2
    3
    
    if ($country_info['postcode_required'] && (utf8_strlen($this->request->post['postcode']) < 2) || (utf8_strlen($this->request->post['postcode']) > 10)) {
    					$json['error']['postcode'] = $this->language->get('error_postcode');
    				}

На этом наконец все! Все полня не обязательные к заполнению мы удалили, осталось только сделать два пункта, удалить некоторые поля обязательные к заполнению, и сделать некоторые поля не обязательные для заполнения, к примеру город. Если у вас на данном этапе возникили проблемы вы можете спросить совета в комментариях или по Email

Удалить обязательные поля в OpenCart

В этом абзаце мы удалим такие поля:

  1. Страна
  2. Регион/Область

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

  1. Чтобы удалить эти две строчки нам понадобятся два файла, первый — контролер, второй, уже знакомый нам файл шаблона. Чтобы долго не блуждать начнем с файла шаблона register.tpl, который мы уже изменяли, находим в нем и удаляем такие строчки:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    <span class="required">*</span> <?php echo $entry_country; ?><br />
      <select name="country_id" class="large-field">
        <option value=""><?php echo $text_select; ?></option>
        <?php foreach ($countries as $country) { ?>
        <?php if ($country['country_id'] == $country_id) { ?>
        <option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option>
        <?php } else { ?>
        <option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option>
        <?php } ?>
        <?php } ?>
      </select>
      <br />
      <br />
      <span class="required">*</span> <?php echo $entry_zone; ?><br />
      <select name="zone_id" class="large-field">
      </select>
      <br />
      <br />
      <br />
  2. Заливаем файл назад на хоистинг и проверяем удалились ли поля. Если удалились, то радоваться пока рано, ведь эти поля были обязательные для заполнения. Чтобы клиент мог приступить к последнему третьему шагу, и ему не выдавалась ошибка
    1
    2
    3
    
    SyntaxError: JSON Parse error: Unrecognized token '<'
    OK
    <b>Notice</b>: Undefined index: country_id in <b>/home/www/catalog/controller/checkout/register.php</b> on line <b>187</b><b>Notice</b>: Undefined index: country_id in <b>/home/www/catalog/controller/checkout/register.php</b> on line <b>200</b><b>Notice</b>: Undefined index: zone_id in <b>/home/www/catalog/controller/checkout/register.php</b> on line <b>204</b>{"error":{"country":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0443!","zone":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u043e\u043d \/ \u043e\u0431\u043b\u0430\u0441\u0442\u044c"}}

    надо изменить файл контролера, который мы уже меняли ранее:

    1
    
    catalog/controller/checkout/register.php
  3. Удаляем из него такие строки:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    $country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
     
    			if ($country_info) {
     
     
    				// VAT Validation
    				$this->load->helper('vat');
     
    				if ($this->config->get('config_vat') && $this->request->post['tax_id'] && (vat_validation($country_info['iso_code_2'], $this->request->post['tax_id']) == 'invalid')) {
    					$json['error']['tax_id'] = $this->language->get('error_vat');
    				}				
    			}
     
    			if ($this->request->post['country_id'] == '') {
    				$json['error']['country'] = $this->language->get('error_country');
    			}
     
    			if ($this->request->post['zone_id'] == '') {
    				$json['error']['zone'] = $this->language->get('error_zone');
    			}
  4. Также еще и этот код:
    1
    2
    
    $this->session->data['payment_country_id'] = $this->request->post['country_id'];
    				$this->session->data['payment_zone_id'] = $this->request->post['zone_id'];
  5. Из файла
    1
    
    catalog/model/account/customer.php

    удалите:

    1
    
    , country_id = '" . (int)$data['country_id'] . "', zone_id = '" . (int)$data['zone_id'] . "'

    Будьте осторожны, каждый символ имеет значение

Все! На этом наша операция по извлечению из движка OpenCart выбора региона и страны закончена, но впереди нас ждет еще одна, более легкая операция. Нам надо будет сделать некоторые обязательные поля не обязательными. А именно, чтобы Фамилия, Адрес, Город клиенту не обязательно надо было заполнять, к примеру если он хочет забрать самовывозом.

Изменяем обязательные для заполнения поля в корзине OpenCart

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

1
catalog/controller/checkout/register.php

и

1
catalog/view/theme/Ваша тема/template/checkout/register.tpl

Во втором файле находим такие коды:

1
<span class="required">*</span> <?php echo $entry_address_1; ?><br />
1
<span class="required">*</span> <?php echo $entry_city; ?><br />
1
<span class="required">*</span> <?php echo $entry_lastname; ?><br />

И удаляем из всех трех такой участок:

1
<span class="required">*</span>

Именно этот код аывод красную зведочку обозначающую что поле обязателено для заполнения.

Следующим шагом давайте редактировать первый файл, register.php

Удалите из него следующие:

1
2
3
4
5
6
7
if ((utf8_strlen($this->request->post['address_1']) < 3) || (utf8_strlen($this->request->post['address_1']) > 128)) {
				$json['error']['address_1'] = $this->language->get('error_address_1');
			}
 
			if ((utf8_strlen($this->request->post['city']) < 2) || (utf8_strlen($this->request->post['city']) > 128)) {
				$json['error']['city'] = $this->language->get('error_city');
			}

и

1
2
3
if ((utf8_strlen($this->request->post['lastname']) < 1) || (utf8_strlen($this->request->post['lastname']) > 32)) {
				$json['error']['lastname'] = $this->language->get('error_lastname');
			}

После чего загрузите файл назад на хостинг. На этом все. Если вы все делали правильно то вы значительно облегчили работу вашему клиенту, и конверсия должна на порядок вырасти. Но внимательные пользователи увидели что после того как вы вбили все поля адреса6 пароля и.т.д. и перешли к следующему шагу — обзору корзины, то появляется кнопка «Изменить» при нажатии на которую мы увдими все теже поля. Как это исправить читайте в статье Opencart изменить и удалить поля в «платежная информация».  Также не забывайте, что кроме уменьшения шагов покупки с регистрацией нам надо уменьшить шаги и покупку без регистрации, и собственно саму регистрацию без покупки. Как это сделать вы можете почитать в статьях:

На этом все, напомню вопросы вы можете задавать в комментариях или на почту.

загрузка...
7 комментариев
    • Andrey

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *