Moushe.ru

Блог обо всём

OpenCart изменяем регистрацию (от Олега)



До:                                                      После:

beforeposle

Статья от Олега, ICQ – ПятьПятьПятьСемьСемьПять.

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

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

И на самом деле, все точно так же и в интернет-шопах. Для успешных продаж существует масса своих нюансов и тонкостей. Одним из них является простота и доступность оформления заказа. Ведь, если верить различным маркетинговым исследования, то очень велик «отскок» покупателей ввиду запутанной и многоэтапной регистрации для заказа. В нашем любимом опенкарте тоже не все гладко, и в этой статье я расскажу, как оптимизировал оформление заказа на своем сайте. У меня ocStore v0.2.2 (OpenCart 1.4.9.4)

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

В файле catalog/controller/checkout/shipping.php

$this->redirect(HTTPS_SERVER . 'index.php?route=account/login');

заменяем на

$this->redirect(HTTPS_SERVER . 'index.php?route=checkout/guest_step_1');

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

Перед нами графы с персональными данными. Интересно, почему авторы опенкарта, не вынесли и «Отчество» в отдельную строку *sarcasm*

Первый этап избавления от строк – это снятие «обязательности»

Открываем файл catalog\controller\checkout\guest_step_1.php

Находим примерно в 463 строке

private function validate() {

И ниже идет перечисление функций обязательных для заполнения. Комментируем не нужное, так чтобы осталось только обязательное для заполнения.

/*if ((strlen(utf8_decode($this->request->post['lastname'])) < 1) || (strlen(utf8_decode($this->request->post['lastname'])) > 32)) {

$this->error['lastname'] = $this->language->get('error_lastname');

}*/

Этим я закомментировал обязательное заполнение фамилии.

А вот часть кода, как у меня. Я оставил обязательными для заполнения «Имя, Отчество», емаил и телефон. Остальное все закомментил. Если что-то надо оставить обязательным, то по коду не сложно разобрать, что за что отвечает.

private function validate() {

if ((strlen(utf8_decode($this->request->post['firstname'])) < 1) || (strlen(utf8_decode($this->request->post['firstname'])) > 32)) {

$this->error['firstname'] = $this->language->get('error_firstname');

}

/*if ((strlen(utf8_decode($this->request->post['lastname'])) < 1) || (strlen(utf8_decode($this->request->post['lastname'])) > 32)) {

$this->error['lastname'] = $this->language->get('error_lastname');

}*/

if (!preg_match(EMAIL_PATTERN, $this->request->post['email'])) {

$this->error['email'] = $this->language->get('error_email');

}

if ((strlen(utf8_decode($this->request->post['telephone'])) < 3) || (strlen(utf8_decode($this->request->post['telephone'])) > 32)) {

$this->error['telephone'] = $this->language->get('error_telephone');

}

/*if ((strlen(utf8_decode($this->request->post['address_1'])) < 3) || (strlen(utf8_decode($this->request->post['address_1'])) > 128)) {

$this->error['address_1'] = $this->language->get('error_address_1');

}

if ((strlen(utf8_decode($this->request->post['city'])) < 3) || (strlen(utf8_decode($this->request->post['city'])) > 128)) {

$this->error['city'] = $this->language->get('error_city');

}

$this->load->model('localisation/country');

$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);

if ($country_info && $country_info['postcode_required']) {

if ((strlen(utf8_decode($this->request->post['postcode'])) < 2) || (strlen(utf8_decode($this->request->post['postcode'])) > 10)) {

$this->error['postcode'] = $this->language->get('error_postcode');

}

}

if ($this->request->post['country_id'] == 'FALSE') {

$this->error['country'] = $this->language->get('error_country');

}

if ($this->request->post['zone_id'] == 'FALSE') {

$this->error['zone'] = $this->language->get('error_zone');

}

if (isset($this->request->post['shipping_indicator'])) {

if ((strlen(utf8_decode($this->request->post['shipping_firstname'])) < 3) || (strlen(utf8_decode($this->request->post['shipping_firstname'])) > 32)) {

$this->error['shipping_firstname'] = $this->language->get('error_firstname');

}

if ((strlen(utf8_decode($this->request->post['shipping_lastname'])) < 3) || (strlen(utf8_decode($this->request->post['shipping_lastname'])) > 32)) {

$this->error['shipping_lastname'] = $this->language->get('error_lastname');

}

if ((strlen(utf8_decode($this->request->post['shipping_address_1'])) < 3) || (strlen(utf8_decode($this->request->post['shipping_address_1'])) > 128)) {

$this->error['shipping_address_1'] = $this->language->get('error_address_1');

}

if ((strlen(utf8_decode($this->request->post['shipping_city'])) < 3) || (strlen(utf8_decode($this->request->post['shipping_city'])) > 128)) {

$this->error['shipping_city'] = $this->language->get('error_city');

}

$country_info = $this->model_localisation_country->getCountry($this->request->post['shipping_country_id']);

if ($country_info && $country_info['postcode_required']) {

if ((strlen(utf8_decode($this->request->post['shipping_postcode'])) < 2) || (strlen(utf8_decode($this->request->post['shipping_postcode'])) > 10)) {

$this->error['shipping_postcode'] = $this->language->get('error_postcode');

}

}

if ($this->request->post['shipping_country_id'] == 'FALSE') {

$this->error['shipping_country'] = $this->language->get('error_country');

}

if ($this->request->post['shipping_zone_id'] == 'FALSE') {

$this->error['shipping_zone'] = $this->language->get('error_zone');

}

}*/

if (!$this->error) {

return TRUE;

} else {

return FALSE;

}

}

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

Обязательное заполнение мы убрали, но звездочки и поля все равно остались. Исправим это…

Открываем в редакторе catalog\view\theme\default\template\checkout\guest_step_1.tpl

если надо, то просто убираем звездочки *

Если надо убрать графы с поля зрения покупателя, то проделаем следующее:

<tr>

<td><span class="required">*</span> <?php echo $entry_lastname; ?></td>

<td><input type="text" name="lastname" value="<?php echo $lastname; ?>" />

<?php if ($error_lastname) { ?>

<span class="error"><?php echo $error_lastname; ?></span>

<?php } ?></td>

</tr>

Эта часть кода отвечает за вывод фамилии. Делаем небольшое изменение, загоняя фамилию в невидимый слой.

<tr style="display:none">

<td><span class="required">*</span> <?php echo $entry_lastname; ?></td>

<td><input type="text" name="lastname" value="<?php echo $lastname; ?>" />

<?php if ($error_lastname) { ?>

<span class="error"><?php echo $error_lastname; ?></span>

<?php } ?></td>

</tr>

С прочими ненужными полями проделываем все аналогичо.

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

<tr style="display:none"> обратно на <tr>

А теперь, чтобы и вовсе было все очень красиво, идем сюда

\catalog\language\russian\checkout

В нужных файлах, вносим свои правки и обзываем название полей как угодно.

Можно в address.php переименовать

$_['entry_firstname'] = 'Имя, Отчество:';

На

$_['entry_firstname'] = 'Имя, Фамилия:';

Ну в общем, как угодно=)

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

На этом вроде бы все. Я лишь описал принцип, как убрать и гасить строки, от каких избавиться, выбирайте сами. Мне удобнее, как я описал, далее работа с клиентом ведется по телефону.

Всем удачи и успешных продаж.

Автор: Олег ICQ 555775

36 Комментариев

  1. Артур

    26.11.2011 at 17:01

    Спасибо Олегу за урок, всё работает.

  2. kvartnikstroy.ru

    28.11.2011 at 10:30

    Уважаемые мастера! А как сделать, чтобы осталось оба вида и с личным кабинетом и без него, с сокращением количества полей естественно.
    Чтобы пользователь выбрал или регистрацию кабинета или без нее.
    С регистрацией личного кабинета разобрался. А вот без регистрации не получается сократить поля.

    Попробовал сделать с файлом catalogcontrollercheckoutguest_step_1.php выше перечисленные действия,

    так как мне не нужно сразу после «оформить» попадать в гостевое оформление, то я по логике и не делал замену :

    В файле catalog/controller/checkout/shipping.php
    $this->redirect(HTTPS_SERVER . 'index.php?route=account/login');
    заменяем на
    $this->redirect(HTTPS_SERVER . 'index.php?route=checkout/guest_step_1');

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

  3. я по логике и не делал замену :

    В файле catalog/controller/checkout/shipping.php
    $this->redirect(HTTPS_SERVER . ‘index.php?route=account/login’);
    заменяем на
    $this->redirect(HTTPS_SERVER . ‘index.php?route=checkout/guest_step_1′);

    Верно, этого не делаете, остальное все, что написано ниже, надо сделать)

  4. kvartnikstroy

    28.11.2011 at 19:56

    Разобрался! Спасибо! Работает все!
    При копировании кода отсюда, проверяйте его корректность, а то у меня он покоцался после вставки ( х/з почему) потому и не заработало сразу

  5. kvartnikstroy

    28.11.2011 at 20:28

    от 109 строки ( у меня) где есть shipping_indicator и до строки 114

    Всего удаляем 5 строк

  6. Антон

    02.12.2011 at 12:00

    Здравствуйте.Подскажите пожалуйста (ибо я так и не понял)как сделать чтобы так же мало полей было и в регистрации личного кабинета?заранее спасибо:)

  7. Владислав Храмцов
    vkontakte.ru Владислав Храмцов

    02.12.2011 at 13:32

    Используем эту статью — http://moushe.ru/nashi-stati/web-dizajn-2/opencart-izmenyaem-registraciyu-1-chast/#comments

  8. Раиль

    04.01.2012 at 22:56

    Здраствуйте! Подскажите, пожалуйста,
    выдаёт ошибку E-Mail адрес введен неверно. при регистрации и в других местах где нужно вводить E-Mail. В чём может быть причина?

  9. Владислав Храмцов
    vkontakte.ru Владислав Храмцов

    05.01.2012 at 00:45

    Возможно вы закомментировали в контроллере код который отвечает за проверку (сравнение) введённого email’а

    • Раиль

      05.01.2012 at 22:04

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

    • Раиль

      05.01.2012 at 22:07

      А точнее какой код за это отвечает?

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      05.01.2012 at 23:38

      тот в котором есть это — email

  10. Владимир

    03.02.2012 at 14:42

    Здравствуйте, Владислав!
    Я установил версию OpenCart 1.5. Нашёл у вас как сократить форму регистрации.
    Попробовал изменить по вашей инстукции, выглядит замечательно. Проблема в том, что после заполнения всех полей, при нажатии кнопки «далее», открывается страница с кучей ошибок. Возможно ли как-нибудь исправить такую беду и как?

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      03.02.2012 at 16:22

      Урок написан для OpenCart 1.4.9+, а 1.5.0+ немного отличается по коду, решение можно увидеть на офф форуме, а в скором времени я напишу его и у себя на блоге.

  11. Артем

    13.02.2012 at 17:16

    Скажите а как убрать Step_2 и сразу переходить к третьему, а так же убрать возможность Ссылки «Изменить»,

    Способ доставки
    Самовывоз
    Изменить

    Способ оплаты
    Оплата при доставке
    Изменить Адрес доставки
    варвар
    Российская Федерация
    Изменить Адрес оплаты
    варвар
    Российская Федерация
    Изменить

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      13.02.2012 at 21:22

      В файле catalogcontrollercheckoutguest_step_1.php переделываете переход удаляете из ссылки перехода guest_step_2 и делаете переход на guest_step_3. Если будет свободное время в пятницу постараюсь написать урок на эту тему.

  12. Здравствуйте!
    Спасибо большое за статью!
    У меня всё получилось)
    Скажите, пожалуйста, а будет статья про изменение регистрации в OpenCart 1.5.13?
    Очень нужно изменить регистрацию и оформление заказа в 1.5.13.

  13. Сергей

    24.03.2012 at 14:07

    А можно ли удалить регистрацию вообще?

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      24.03.2012 at 21:12

      Постараюсь сделать такой урок.

  14. Сергей

    17.04.2012 at 18:20

    Спасибо за урок! Всё работает, но застрял в самом простом месте. В address.php не получается переименовать строки. Адрес 1 не переименовывается на Адрес доставки.

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      17.04.2012 at 21:07

      В confirm.php адрес доставки переименуйте.

  15. Антон

    07.06.2012 at 22:04

    Подскажите пожалуйста, как разделить Имя, Отчество в пункте «Редактировать учетную запись» на два поля отдельно Имя и отдельно отчество

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      08.06.2012 at 20:58

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

  16. Спасибо Олег, очень помогла статья.

  17. Алексей

    16.06.2012 at 13:00

    Кто-нибудь знает как сделать отчество отдельной графой для заполнения?

  18. Андрей

    19.11.2012 at 18:46

    Добрый день! Замечательный урок! Подскажите, а где-то можно найти ссылку на точно такой же но для версии Opencart 1.5.3.1. Спасибо!

  19. павел

    01.03.2013 at 06:27

    отличный урок, а как сделать проверку ввода фамилии что она на русском. Помогите.

  20. Алексей

    18.04.2013 at 09:01

    Здравствуйте. Ребят может у кого есть уже готовые файлики этого урока?

  21. facebook.com Viktor Gorohov

    21.09.2013 at 04:02

    Здравствуйте,спасибо за урок,всё получилось,всё супер.Вы не могли бы написать статью,как оплату и доставку разместить на одной странице с персональными данными.Хочется что бы всё было на одной странице.Заранее спасибо.

  22. Здравствуйте подскажите как убрать вход и регитстрацию с помощью соц.сетей, я то установила а убрать не знаю какой файл надо чистить, или как сделать чтоб заработал вход через соц.сети а то ошибки выдаёт. Зараннее спасибо, вот сайт tiane-sklad.ru

    • Владислав Храмцов
      vkontakte.ru Владислав Храмцов

      31.10.2014 at 10:14

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

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

Your email address will not be published.

*

CAPTCHA image
*

© 2016 Moushe.ru При копировании материалов, ссылка на нас обязательна!

Вверх ↑



Яндекс.Метрика