Убираем ненужные шаги оформления заказа, или быстрый заказ OpenCart

OpenCart  — это один из самых популярных движков для магазина в России, Украине и в принципе в мире. Но как и у любого другого движка есть недостатки, в OpenCart — это форма заказа. Этот движок рассчитан на многие страны, на разные требования, условия доставки и заказа. Поэтому ваш сайт по умолчанию нашпигован всем чем только можно. Даже более того, если вам будет не хватать стандартного функционала, вы можете скачать необходимые модули в интернете, которые не проблема установить даже пользователю который не знает PHP.

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

В этой статье мы рассмотрим правку, которая нужна буквально всем владельцам магазина на базе OpenCart, а именно:

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

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

  1. Добавляем товар в корзину и пробуем оформить заказ. Изначально, по умолчанию, нам предлагают оформить заказ с регистрацией. Для покупателя это не удобно, потому что 90% покупателей не хотят регистрироваться. Записываем себе Поставить галочку «оформить заказ без регистрации» по умолчанию
  2. На втором шаге куча обязательных и никому не нужных полей. В моем бизнесе, да и в принципе для любых бизнесов, рекомендую свести обязательные поля к минимуму, а именно Email, имя и телефон. Все остальные данные вы можете выяснить во время звонка клиенту. Записываем себе:
    • Поле «Фамилия» сделать необязательным.
    • Поле «Факс» убрать.
    • Поле компания можно оставить, можно убрать в зависимости от вашего бизнеса.
    • ID компании убрать.
    • Адрес — сделать не обязательным.
    • Поле «Адрес продолжение» убрать.
    • Город — сделать не обязательным.
    • Поля Индекс, страна, регион/область убрать.
  3. Шаг 3, 4, 5 убрать
  4. Шаг 6 переименовать на «Шаг 3»

Делаем понятную форму заказа OpenCart, ставим галочку «оформить заказ без регистрации» по умолчанию.

Итак, мы узнали и спланировали что нам надо. Осталось только воплотить наши идеи в жизнь. Давайте сначала поставим галочку «оформить заказ без регистрации» по умолчанию.

Оформить заказ без регистрации OpenCart

  1. Найдите и скопируйте на рабочий стол файл. Не забудьте оригинальный файл сохранить в исходном состоянии: если мы что-то поменяем не правильно, то можем всегда восстановить оригинал
    1
    
    catalog/view/theme/Ваша тема/template/checkout/login.tpl
  2. Найдите строчку <
    1
    
    <input type="radio" name="account" value="register" id="register" checked="checked" />

    и замените ее на

    1
    
    <input type="radio" name="account" value="register" id="register"/>
  3. Найдите строчку
    1
    
    <input type="radio" name="account" value="guest" id="guest" />

    и замените ее на

    1
    
    <input type="radio" name="account" value="guest" id="guest" checked="checked"/>
  4. Загрузите файл назад. Все, теперь по умолчанию должна стоять правильная галочка.

Самый легкий пункт нашего плана мы сделали. Давайте переходить к самой тяжелой части.

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

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

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

  1. Находим и копируем на рабочий стол файл
    1
    
     catalog/view/theme/Ваша тема/template/checkout/guest.tpl

    не забываем сделать его резервную копию.

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

Убираем поле «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="<?php echo $company_id; ?>" class="large-field" />
<br />
<br />
</div>

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

Убираем поле «Компания»

Если вы занимаетесь в основном продажами клиенту, (B2C продажи), то вам лучше всего поле «Компания» убрать (как это сделать вы можете найти чуть ниже). Но если у вас бизнес ориентирован на компании (B2B  продажи), то лучше это поле не трогать, а оставить как есть.

Итак, чтобы убрать поле «Компания», в том же файле удалите строчки

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

И загрузите файл назад на FTP.

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

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

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 />

 Убираем поле «Адрес (Продолжение)»

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

Чтобы убрать это поле удалите строчки:

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

После внесения всех изменений мы получили такую картину:

Второй шаг при оформлении заказа

 

Как видим, все не обязательные поля мы удалили без проблем. Остались поля двух типов:

  • Нужные поля, но нужно сделать так, чтобы они были не обязательны для заполнения. К примеру: Фамилия, Город, Адрес
  • Поля которые нужно вообще убрать: Страна, Регион/область.

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

Итак, находим и копируем к себе на компьютер два файла: знакомый нам файл шаблона

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

ну и файл контролера

1
catalog/controller/checkout/guest.php

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

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

    1. Найдите файл
      1
      
      catalog/view/theme/Ваша тема/template/checkout/guest.tpl
    2. и удалите такие строчки
      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 />
    3. Загрузите файл назад на хостинг. Если вы сейчас попробуйте оформить заказ, то движок вам выдаст многоэтажную ошибку. Это связанно с тем, что в контролере, который передает информацию дальше,  эти поля обязательны для заполнения. Чтобы клиенту не выдавалась эта ошибка надо удалить пару блоков кода.
    4. Находим файл
      1
      
       catalog/controller/checkout/guest.php
    5. Находим и удаляем такие строчки:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      
      $country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
       
      			if ($country_info) {
      				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');
      				}
       
      				// 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');
      			}
    6. И такие:
      1
      2
      
      $this->session->data['guest']['payment']['country_id'] = $this->request->post['country_id'];
      $this->session->data['guest']['payment']['zone_id'] = $this->request->post['zone_id'];
    7. И эти тоже удаляем:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      
      $country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
       
      			if ($country_info) {
      				$this->session->data['guest']['payment']['country'] = $country_info['name'];	
      				$this->session->data['guest']['payment']['iso_code_2'] = $country_info['iso_code_2'];
      				$this->session->data['guest']['payment']['iso_code_3'] = $country_info['iso_code_3'];
      				$this->session->data['guest']['payment']['address_format'] = $country_info['address_format'];
      			} else {
      				$this->session->data['guest']['payment']['country'] = '';	
      				$this->session->data['guest']['payment']['iso_code_2'] = '';
      				$this->session->data['guest']['payment']['iso_code_3'] = '';
      				$this->session->data['guest']['payment']['address_format'] = '';
      			}
       
      			$this->load->model('localisation/zone');
       
      			$zone_info = $this->model_localisation_zone->getZone($this->request->post['zone_id']);
       
      			if ($zone_info) {
      				$this->session->data['guest']['payment']['zone'] = $zone_info['name'];
      				$this->session->data['guest']['payment']['zone_code'] = $zone_info['code'];
      			} else {
      				$this->session->data['guest']['payment']['zone'] = '';
      				$this->session->data['guest']['payment']['zone_code'] = '';
      			}
       
      			if (!empty($this->request->post['shipping_address'])) {
      				$this->session->data['guest']['shipping_address'] = true;
      			} else {
      				$this->session->data['guest']['shipping_address'] = false;
      			}
       
      			// Default Payment Address
      			$this->session->data['payment_country_id'] = $this->request->post['country_id'];
      			$this->session->data['payment_zone_id'] = $this->request->post['zone_id'];
    8. ну и эти:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      
      $this->session->data['guest']['shipping']['country_id'] = $this->request->post['country_id'];
      				$this->session->data['guest']['shipping']['zone_id'] = $this->request->post['zone_id'];
       
      				if ($country_info) {
      					$this->session->data['guest']['shipping']['country'] = $country_info['name'];	
      					$this->session->data['guest']['shipping']['iso_code_2'] = $country_info['iso_code_2'];
      					$this->session->data['guest']['shipping']['iso_code_3'] = $country_info['iso_code_3'];
      					$this->session->data['guest']['shipping']['address_format'] = $country_info['address_format'];
      				} else {
      					$this->session->data['guest']['shipping']['country'] = '';	
      					$this->session->data['guest']['shipping']['iso_code_2'] = '';
      					$this->session->data['guest']['shipping']['iso_code_3'] = '';
      					$this->session->data['guest']['shipping']['address_format'] = '';
      				}
       
      				if ($zone_info) {
      					$this->session->data['guest']['shipping']['zone'] = $zone_info['name'];
      					$this->session->data['guest']['shipping']['zone_code'] = $zone_info['code'];
      				} else {
      					$this->session->data['guest']['shipping']['zone'] = '';
      					$this->session->data['guest']['shipping']['zone_code'] = '';
      				}
       
      				// Default Shipping Address
      				$this->session->data['shipping_country_id'] = $this->request->post['country_id'];
      				$this->session->data['shipping_zone_id'] = $this->request->post['zone_id'];
      				$this->session->data['shipping_postcode'] = $this->request->post['postcode'];
    9. Загружаем файл назад и проверяем что получилось. А получилось не очень хорошо, выскакивает ошибка при оформлении заказа в OpenCartOpenCart ошибка при оформлении заказаНо ничего страшного. Поскольку в ошибке кроется ответ, что не так. А именно в строчках 243, 248, 251, 252. Давайте их удалим
    10. Удаляем:
      1
      
      $this->session->data['guest']['fax'] = $this->request->post['fax'];
      1
      
      $this->session->data['guest']['payment']['company_id'] = $this->request->post['company_id'];
      1
      
      $this->session->data['guest']['payment']['address_2'] = $this->request->post['address_2'];
    11. Загружаем файл назад и проверяем! Отлично! Нас перебрасывают на следующий шаг.

Все! В этом шаге мы убрали надоедливые поля при оформлении заказа Страна и Регион. Но на этом наш путь не закончился, поскольку по плану нам надо еще сделать еще пару полей не обязательными для заполнения. Приступаем.

OpenCart как сделать Фамилию не обязательным полем

  1. Как и в прошлом шаге, мы будем править два файла: контроллер и файл шаблона. Начнем как всегда с простого — с файла шаблона.
    1
    
    catalog/view/theme/Ваша тема/template/checkout/guest.tpl
  2. Найдите в этом файле строчку
    1
    
    <span class="required">*</span> <?php echo $entry_lastname; ?><br />
  3. И удалите из нее
    1
    
    <span class="required">*</span>

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

  4. Находим файл контролера по маршруту
  5. Удаляем следующие сроки
    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. Загружаем файл назад на хостинг и проверяем. Если поле фамилия оставить пустым и нас пропустят к следующему шагу, то можно вас поздравить — вы все сделали правильно. Но, нам осталось еще сделать пару полей не обязательными.

Делаем поля «Город» и «Адрес» необязательными. 

Делаем все по аналогии с прошлым пунктом, а именно в файле шаблона guest.tpl находим строчки:

1
2
3
4
5
6
7
8
9
<span class="required">*</span> <?php echo $entry_address_1; ?><br />
  <input type="text" name="address_1" value="<?php echo $address_1; ?>" class="large-field" />
  <br />
  <br />
 
  <span class="required">*</span> <?php echo $entry_city; ?><br />
  <input type="text" name="city" value="<?php echo $city; ?>" class="large-field" />
  <br />
  <br />

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

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

Следующим шагом надо удалить строчки из файла guest.php, уже не буду снова писать путь, поскольку вы его  уже знаете наизусть 🙂

Удаляем строчку, которая отвечает за проверку заполения поля «Адрес»

1
2
3
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');
			}

И удаляем код, который отвечает за проверку заполнения поля «город»

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

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

Готовая форма для заказа Opencart

 

С полями мы разобрались. Осталось совсем чуть-чуть. Удалить шаги 3, 4, 5, потому что они тоже понижают конверсию как минимум тем, что человек зашел в корзину, увидел эти шаги и сразу закрыл ваш магазин, ведь каждый человек ценит свое время и не будет заполнять эти кучи полей.

Как убрать шаг 3, 4 при оформлении заказа OpenCart

  1. Найдите и скопируйте к себе на компьютер файл
    1
    
    system/library/cart.php
  2. Найдите строчку
    1
    
    public function hasShipping() {
  3. И после нее напишите
    1
    
    return false;
  4. Сохраните изменения и загрузите файл назад. После этого у вас останется всего 4 шага.

Убираем шаг 5 при оформлении заказа OpenCart

Убрать шаг с оплатой будет чуть сложнее, чем третий и четвертый шаг, но не на много.

  1. Для начала найдите файл
    1
    
     catalog/view/theme/Ваша тема/template/checkout/payment_method.tpl
  2. В самом начале этого файла добавьте скрипт
  3. Найдите строчку
    1
    
    <input type="checkbox" name="agree" value="1" />
  4. И замение ее на
    1
    
    <input type="checkbox" name="agree" value="1" checked="checked" />
  5. В самом начале файла добавьте такой код:
    1
    2
    3
    4
    5
    
    <script language="Javascript" type="text/javascript">
     $(document).ready(function(){
     $('#button-payment-method').trigger('click');
     });
    </script>
  6. Все, с этим файлом мы закончили. Если вы сейчас попробуйте оформить заказ, то увидите, что сам шаг не пропал, но система его проскакивает. Давайте его скроем. Найдем файл
    1
    
    catalog/view/theme/Ваша тема/stylesheet/stylesheet.css
  7. И в самом конце напишите
    1
    2
    3
    4
    
    }
    #payment-method {
     display:none;
     }
  8. Все. Пятый шаг скрыт, и осталось всего три шага. Все что нам осталось — это переименовать шестой шаг, и назвать его «шаг 3».

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

Как переименовать Шаг 6

Все, теперь все, что нам осталось — это соблюсти правила нумерации и переименовать Шаг 6 в Шаг 3. Для этого:

  1. Скопируйте к себе на компьютер файл
    1
    
    catalog/language/russian/checkout/checkout.php
  2. Найдите строчку
    1
    
    $_['text_checkout_confirm']          = 'Шаг 6: Подтверждение заказа';

    и измените Шаг 6 на Шаг 3

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

Работа над ошибками

Совет из комментариев №1:

Малость добавлю.
Если у Вас Ошибка Undefined index: shipping_address in …
Удалите контейнер полностью
if ($this->session->data[‘guest’][‘shipping_address’]) {

}
Но на этом мои беды не закончились. В Шаге -6 появились ошибки:
darkghost.pp.ua/catalog/controller/checkout/confirm.php — все те же кантри, зона и тд. Указанные строки удалил.
После ее вылезла следующая — darkghost.pp.ua/catalog/model/checkout/order.php on line 4 — те же маркеры. В этой строке (она длинная) удалил все записи с маркерами (они где-то посредине строки)
После нажатия кнопки —- Ваш заказ сформирован!

________

 

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

Если у вас остались какие либо вопросы и пожелания — напишите в комментариях, я попробую вам помочь.

загрузка...
163 комментария
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
        • Andrey
          • Andrey
          • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
      • Andrey
    • Andrey
    • Andrey
    • Andrey
      • Andrey
    • Andrey
    • Andrey
        • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
        • Katren
    • Andrey
    • Katren
        • Katren
    • Katren
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey
    • Andrey

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

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