Всё о web

Для чайников и не только


Быстрый заказ opencart 2

Февраль 3, 2015

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

Есть конечно платный модуль решающий эту проблему, но можно потратить 10 минут и сделать всё на много красивей.

1. Начнём делать простой заказ на opencart с формы регистрации:

logo1

Уберём этот лишний шаг и автоматически переключимся на гостевой аккаунт. В файле: /catalog/view/theme/default/template/checkout/login.tpl в самом верху находим:

    <div class="radio">
      <label>
        <?php if ($account == 'register') { ?>
        <input type="radio" name="account" value="register" checked="checked" />
        <?php } else { ?>
        <input type="radio" name="account" value="register" />
        <?php } ?>
        <?php echo $text_register; ?></label>
    </div>
    <?php if ($checkout_guest) { ?>
    <div class="radio">
      <label>
        <?php if ($account == 'guest') { ?>
        <input type="radio" name="account" value="guest" checked="checked" />
        <?php } else { ?>
        <input type="radio" name="account" value="guest" />
        <?php } ?>
        <?php echo $text_guest; ?></label>
    </div>

Меняем на

    <div class="radio">
      <label>
        <?php if ($account == 'register') { ?>
        <input type="radio" name="account" value="register" />
        <?php } else { ?>
        <input type="radio" name="account" value="register" />
        <?php } ?>
        <?php echo $text_register; ?></label>
    </div>
    <?php if ($checkout_guest) { ?>
    <div class="radio">
      <label>
        <?php if ($account == 'guest') { ?>
        <input type="radio" name="account" value="guest" checked="checked" />
        <?php } else { ?>
        <input type="radio" name="account" value="guest" checked="checked"/>
        <?php } ?>
        <?php echo $text_guest; ?></label>
    </div>

Теперь по умолчанию всегда выбрано «без регистрации».

logo2

К сожалению в opencart 2 версии $('#button-account').trigger('click') сразу после загрузки не срабатывает, по этому придётся вешать таймаут в 1 секунду:

<script>
 $(document).ready(function(){
 setTimeout(function(){
  $('#button-account').trigger('click');
  },1000);
 });
</script>

Этот скрипт нужно добавить в начало файла. В завершении нужно полностью скрыть этот шаг, открываем: /catalog/view/theme/default/template/checkout/checkout.tpl и находим первую секцию вот такого:

<div class="panel-group" id="accordion">
  <div class="panel panel-default">

Меняем на:

<div class="panel-group" id="accordion">
  <div class="panel panel-default" style="display:none;">

2. Дальше займёмся лишними полями формы: /catalog/view/theme/default/template/checkout/guest.tpl. Задача такая: нужно стилями скрыть каждую секцию с инпутом и в скрываемом инпуте вручную проставить value, что бы при клике на «продолжить» opencart не ругался на незаполненные поля. Пример:

Скрываем поле "фамилия". Меняем код:

      <div class="form-group required">
        <label class="control-label" for="input-payment-lastname"><?php echo $entry_lastname; ?></label>
        <input type="text" name="lastname" value="<?php echo $lastname; ?>" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" />
      </div>

На:

      <div class="form-group required" style="display:none;">
        <label class="control-label" for="input-payment-lastname"><?php echo $entry_lastname; ?></label>
        <input type="text" name="lastname" value="&nbsp" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" />
      </div>

В необязательные поля вроде "Компания" или "Факс" не нужно подставлять какие-либо значения, достаточно их скрыть стилями. А вот со страной и регионом история другая, там нужно подставить какие-нибудь значения. Находим:

      <div class="form-group required">
        <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label>
        <select name="country_id" id="input-payment-country" class="form-control">
          <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>
      </div>

Меняем на

      <div class="form-group required" style="display:none;">
        <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label>
	  <input type="text" value="176" name="country_id" id="input-payment-country" class="form-control">
      </div>

Здесь value="176" - выставляет страну "Российская Федерация". Далее так же поступаем с регионом:

      <div class="form-group required">
        <label class="control-label" for="input-payment-zone"><?php echo $entry_zone; ?></label>
        <select name="zone_id" id="input-payment-zone" class="form-control">
        </select>
      </div>

Меняем на:

      <div class="form-group required" style="display:none;">
        <label class="control-label" for="input-payment-zone"><?php echo $entry_zone; ?></label>
        <input type="text" value="2761" name="zone_id" id="input-payment-zone" class="form-control">
      </div>

value="2761" - регион г.Москва. Значения для страны и региона можно посмотреть в базе данных.

3. Нам остаётся подправить файл перевода: /catalog/language/russian/checkout/checkout.php и быстрый заказ на opencart готов!

logo4

Если Вас устраивает мой вариант, то можете скачать готовый архив или посмотреть пример использования.



Комментарии

93 комментариев | “Быстрый заказ opencart 2


  1. Илья Илья:

    На демо я мог что-нибудь ещё прикрутить, демо- это экспериментальный сервер.

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

  3. Аватар Oxothuk:

    Вопрос как сделать E-mail не обязательным?

    1. Илья Илья:

      Так же как и остальные поля. Будьте внимательнее, + почитайте комментарии, узнаете много интересного…

      1. Аватар Oxothuk:

        я поправлял не тупой)
        не получается не знаю почему,все что здесь и так знаю,а имейл никак не получается

  4. Аватар joestalin14:

    работает хорошо только в неавторизованном состоянии. если пользователь зарегистрирован в магазине и под своим аккаунтом пытается оформить заказ — после раздела «платежная информация» ни один раздел не открывается.

  5. Аватар joestalin14:

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

  6. Аватар Николай:

    Архив файла не соответствует демо, которое вы показываете!

    1. Илья Илья:

      Вполне возможно, не редко на демо сайтах я экспериментирую.

      1. Очень полезная статья! Применил — работает. Действительно, есть проблема у авторизованных пользователей. У меня после выбора способа доставки не переходит к следующему шагу.
        Просьба к автору помочь

  7. Аватар Дмитрий:

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

    <input type="text" name="fax" value="» placeholder=»» id=»input-payment-fax» class=»form-control» />

    1. Илья Илья:

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

  8. Аватар igor:

    Выложите файлики с настройками как у вас на демо. подскажите как в самой верхней строке убрать личный кабинет.

    вы могли бы эти файлики которые у вас на демо выложить? как в верхней строке убрать личный кабинет?

    1. Илья Илья:

      Как переделать верхнее меню описано в этой статье: http://allwebstuff.info/переделываем-верхнее-меню-opencart/

  9. Аватар igor:

    скинте пожалуйста эти файлы с вашего демо checkout.tpl, guest.tpl, login.tpl, payment_method.tpl.
    не получается так сделать, обязательно где то косяк, плиз

  10. Привет всем! Сделал все по инструкции, все работает, почти.. На этапе подтверждения заказа вылетают вот такие ошибки :(

    Notice: Indirect modification of overloaded property ControllerCheckoutConfirm::$data has no effect in /var/www/u0217657/data/www/mobidu.ru/catalog/controller/checkout/confirm.php on line 12Notice: Undefined index: shipping in /var/www/u0217657/data/www/mobidu.ru/catalog/controller/checkout/confirm.php on line 482Notice: Undefined index: payment in /var/www/u0217657/data/www/mobidu.ru/catalog/controller/checkout/confirm.php on line 504Notice: Indirect modification of overloaded property ControllerCheckoutConfirm::$data has no effect in /var/www/u0217657/data/www/mobidu.ru/catalog/controller/checkout/confirm.php on line 851
    Fatal error: Call to undefined method ControllerCheckoutConfirm::render() in /var/www/u0217657/data/www/mobidu.ru/catalog/controller/checkout/confirm.php on line 860

    Где я накосячил? Спасайте)

  11. поправка — в файле guest.tpl

  12. Аватар Владимир:

    Архив файлов не даёт такого результата как на демо. Пробовал на версии 2.0.3.1 — кто-то может помочь разобраться почему?


Comments are closed.