"Быстрая покупка" для отдельно взятого стиля без установки модулей

Тема в разделе "Инструкции и FAQ", создана пользователем Zlata Jesen, 7 июн 2015.

  1. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Всем привет!
    Хотите сделать возможность быстрой покупки на opencart 2.0.3.1 без регистрации? Легко!
    (возможно, в шаблонах более поздних версий что-то изменится, но принцип, надеюсь, всё равно останется прежним).
    Картинок не будет, но будет много-много кода... (внимательнее!)
    Итак, вооружаемся Notepad++ и поехали!

    Делаем "заказ без регистрации" основным по умолчанию:

    Файл /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>
    Готово. Далее.

    Если вы хотите СОВСЕМ убрать возможность регистрации из формы оформления заказа, после этого в начало ЭТОГО же файла добавляем в самое начало:

    Код:
    <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;">
    Этим самым первый шаг, дающий возможность регистрации в форме оформления заказа, будет скрыт.

    Далее:
    Открываем файл: /catalog/view/theme/default/template/checkout/guest.tpl

    Обрабатываем поле "Имя"
    (если хотите, можете оставить, как есть и тогда гость должен будет указать какое-то имя)

    Ищем:

    Код:
      <div class="form-group required">
      <label class="control-label" for="input-payment-firstname"><?php echo $entry_firstname; ?></label>
      <input type="text" name="firstname" value="<?php echo $firstname; ?>" placeholder="<?php echo $entry_firstname; ?>" id="input-payment-firstname" class="form-control" />
      </div>
    Меняем на:

    Код:
      <div class="form-group required" style="display:none;">
      <label class="control-label" for="input-payment-firstname"><?php echo $entry_firstname; ?></label>
      <input type="text" name="firstname" value="Гость" placeholder="<?php echo $entry_firstname; ?>" id="input-payment-firstname" class="form-control" />
      </div>
    style="display:none;" скроет поле, а значение, указанное в value позволит пройти проверку "обязательному" полю.

    Далее так же поступаем с фамилией

    Код:
      <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="Фамилия не указана" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" />
      </div>
    и забываем про него.
    Следующие e-mail и телефон, давайте их оставим? Переходим к факсу. Тут просто:

    Есть:

    Код:
      <div class="form-group">
      <label class="control-label" for="input-payment-fax"><?php echo $entry_fax; ?></label>
      <input type="text" name="fax" value="<?php echo $fax; ?>" placeholder="<?php echo $entry_fax; ?>" id="input-payment-fax" class="form-control" />
      </div>
    добавим всего одно слово hide после класса и поле скрыто:

    Код:
    <div class="form-group hide">
      <label class="control-label" for="input-payment-fax"><?php echo $entry_fax; ?></label>
      <input type="text" name="fax" value="<?php echo $fax; ?>" placeholder="<?php echo $entry_fax; ?>" id="input-payment-fax" class="form-control" />
      </div>
    Справа у нас куча обязательных полей, заполним их за посетителя и удалим необязательные:

    Компания (скрываем):

    Код:
      <div class="form-group">
      <label class="control-label" for="input-payment-company"><?php echo $entry_company; ?></label>
      <input type="text" name="company" value="<?php echo $company; ?>" placeholder="<?php echo $entry_company; ?>" id="input-payment-company" class="form-control" />
      </div>
    меняем на

    Код:
      <div class="form-group hide">
      <label class="control-label" for="input-payment-company"><?php echo $entry_company; ?></label>
      <input type="text" name="company" value="<?php echo $company; ?>" placeholder="<?php echo $entry_company; ?>" id="input-payment-company" class="form-control" />
      </div>
    Адрес 2 (скрываем)

    Код:
      <div class="form-group">
      <label class="control-label" for="input-payment-address-2"><?php echo $entry_address_2; ?></label>
      <input type="text" name="address_2" value="<?php echo $address_2; ?>" placeholder="<?php echo $entry_address_2; ?>" id="input-payment-address-2" class="form-control" />
      </div>
    Меняем на:
    Код:
      <div class="form-group hide">
      <label class="control-label" for="input-payment-address-2"><?php echo $entry_address_2; ?></label>
      <input type="text" name="address_2" value="<?php echo $address_2; ?>" placeholder="<?php echo $entry_address_2; ?>" id="input-payment-address-2" class="form-control" />
      </div>
    Адрес 1 (если он вам не нужен) не просто скрываем, а обязательно меняем значение атрибута value на что-то, что подскажет вам фантазия. Вместо:

    Код:
      <div class="form-group required">
      <label class="control-label" for="input-payment-address-1"><?php echo $entry_address_1; ?></label>
      <input type="text" name="address_1" value="<?php echo $address_1; ?>" placeholder="<?php echo $entry_address_1; ?>" id="input-payment-address-1" class="form-control" />
      </div>
    я сделала так:

    Код:
      <div class="form-group required">
      <label class="control-label" for="input-payment-address-1"><?php echo $entry_address_1; ?></label>
      <input type="text" name="address_1" value="Введите адрес или оставьте как есть" placeholder="<?php echo $entry_address_1; ?>" id="input-payment-address-1" class="form-control" />
      </div>
    То есть я его оставила, но сама заполнила форму ответа и посетитель сможет этого уже не делать.

    Город и индекс тоже скрываем, если надо.
    Город:

    Код:
      <div class="form-group required">
      <label class="control-label" for="input-payment-city"><?php echo $entry_city; ?></label>
      <input type="text" name="city" value="<?php echo $city; ?>" placeholder="<?php echo $entry_city; ?>" id="input-payment-city" class="form-control" />
      </div>
    заменим на:

    Код:
      <div class="form-group required" style="display:none;">
      <label class="control-label" for="input-payment-city"><?php echo $entry_city; ?></label>
      <input type="text" name="city" value="Не указан" placeholder="<?php echo $entry_city; ?>" id="input-payment-city" class="form-control" />
      </div>
    Индекс:
    Код:
      <div class="form-group required">
      <label class="control-label" for="input-payment-postcode"><?php echo $entry_postcode; ?></label>
      <input type="text" name="postcode" value="<?php echo $postcode; ?>" placeholder="<?php echo $entry_postcode; ?>" id="input-payment-postcode" class="form-control" />
      </div>
    на

    Код:
      <div class="form-group required" style="display:none;">
      <label class="control-label" for="input-payment-postcode"><?php echo $entry_postcode; ?></label>
      <input type="text" name="postcode" value="000000" placeholder="<?php echo $entry_postcode; ?>" id="input-payment-postcode" class="form-control" />
      </div>
    Страну и регион я оставила для симметричности формы (ну женщина же!)... Если хотите, про скрытие региона почитайте тут: Оформление заказа, Шаг 5 (там описаны два метода).

    Что осталось?
    Сменить надписи... Легко!
    Идем в файл /catalog/language/russian/checkout/checkout.php и правим там что и как хотим... Я просто убрала "Шаги", оставив названия.

    Всё? Вопросов по быстрой форме заказа в опенкарт БЕЗ регистрации больше быть не должно...

    Один полезный совет для тех, кто дочитал до конца.
    НЕ правьте все это на дефолтном шаблоне, создайте свой (как это сделать, написано тут: Руководство дизайнера) и тогда, если что-то пойдет не так, не будет паники, а можно будет просто взять и создать еще один новый шаблон.
    И да, бекапы перед внесением какиx-то серьезных обновлений нужно делать не только на хостинге, но и на локалке.
    Если вы цените свой труд, конечно :)
    Всем удачи!

    На авторство метода не претендую, просто собрала по разным источникам все советы, проверила на своем магазине и оформила в виде единой темы, чтобы другим не приходилось искать и додумывать.
     
    Zman, ant09, Сако и 13 другим нравится это.
  2. Владимир31

    Владимир31 Новичок

    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте. Подскажите, пжл, в чем может быть проблема? Выполнил все изменения и в итоге поверх страницы выскакивает окно с след надписью:

    "
    Not Found

    Not Found

    <!DOCTYPE html>
    <!--[if IE]><![endif]-->
    <!--[if IE 8 ]><html dir="ltr" lang="ru" class="ie8"><![endif]-->
    <!--[if IE 9 ]><html dir="ltr" lang="ru" class="ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!-->
    <html dir="ltr" lang="ru">
    <!--<![endif]-->
    <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Запрашиваемая страница не найдена!</title>
    <base href="http://localhost/ocart/" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link href="http://localhost/ocart/image/catalog/cart.png" rel="icon" />
    <script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
    <link href="catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
    <script src="catalog/view/javascript/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
    <link href="catalog/view/javascript/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    <link href="//fonts.googleapis.com/css?family=Open+Sans:400,400i,300,700" rel="stylesheet" type="text/css" />
    <link href="catalog/view/theme/default/stylesheet/stylesheet.css" rel="stylesheet">
    <script src="catalog/view/javascript/common.js" type="text/javascript"></script>
    ..."
     
  3. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Поверх какой именно страницы? С оплатой? Или на всех?
     
  4. Владимир31

    Владимир31 Новичок

    Сообщения:
    11
    Симпатии:
    0
    Оформления заказа уже с корзины
     
  5. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Мммм... Что-то Вы где-то не так изменили. С чего бы странице пропадать?
    Верните бекап на место и попробуйте заново, только очень внимательно.
    У меня этот способ и на локалке работал.
     
  6. Владимир31

    Владимир31 Новичок

    Сообщения:
    11
    Симпатии:
    0
    Я все на локалке и делаю сейчас. Точнее сказать учусь - это первый мой магазин.
    Выше указанные шаги сделал и меня из заказа ушел только первый шаг, остальные пять остались и неактивные.
    Попробую сделать бекап и повторить. Позже отпишу что выйдет
     
  7. alamis

    alamis Новичок

    Сообщения:
    7
    Симпатии:
    0
    хорошая тема;)
    а где можно можно поменять Страну(удалить лишние),Регион/Область(тоже удалить лишнее)?
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.884
    Симпатии:
    1.065
    Это делается в админке Систем-Локализация-Страны
     
    Zlata Jesen нравится это.
  9. alamis

    alamis Новичок

    Сообщения:
    7
    Симпатии:
    0
  10. van

    van Новичок

    Сообщения:
    1
    Симпатии:
    0
    Спасибо за статью!!! очень помогло :)
     
  11. flyba24

    flyba24 Новичок

    Сообщения:
    1
    Симпатии:
    1
    Очень интересная реализация с заполнением полей за пользователя, спасибо! Подскажите пожалуйста как сделать так, что бы пропустить и автоматически отметить за пользователя поля в способе доставки и способе оплаты и оставить только подтверждение заказа.
     
    Сергей А. нравится это.
  12. Anton55

    Anton55 Пользователь

    Сообщения:
    41
    Симпатии:
    0
    Zlata Jesen, спасибо за статью. А не подскажете можно ли убрать звездочки с полей (сделать не обязательными для заполнения?
    или это уже совсем другая статья?
     
  13. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Доставка пропускается отключением всех возможных методов доставки и проставлением в товаре радиокнопки "доставка не требуется", а вот по оплате... Я изменила один из шаблонов под себя (банковский перевод) и вписала свою инструкцию.

    Где-то как-то так:
    http://forum.opencart-russia.ru/thr...olej-pri-redaktirovanii-zakaza-i-klienta.1495
     
  14. Edikofff

    Edikofff Новичок

    Сообщения:
    22
    Симпатии:
    1
    Еще вариант кому может по душе:
    Я отправляю только по Украине и это видно для любого посетителя. (тем кто отправляет в других странах тоже может пригодиться с вариантами)
    Расчет по регионам мне не нужен, потому я в админке отвязал магазин от всех областей, удалил регионы,области всех стран, а потом и все страны кроме Украины. Таким образом стало не обязательным заполнение страны и области. А затем скрыл их из формы, как подсказывает Zlata с помощью hide:
    PHP:
    <div class="form-group hide">
            <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 hide">
            <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>
    Потом поправил языковой файл, изменив слов "Адрес" на "Адрес или склад Новой Почты" а "Город" на "Город, индекс для Укрпочты"
    Может не идеально вышло, но на 2 строки меньше в форме
     
    Последнее редактирование: 17 сен 2016
    Zlata Jesen нравится это.
  15. Ravilr

    Ravilr Специалист

    Сообщения:
    3.884
    Симпатии:
    1.065
  16. Edikofff

    Edikofff Новичок

    Сообщения:
    22
    Симпатии:
    1
    Извините. Изменил.
     
  17. Edikofff

    Edikofff Новичок

    Сообщения:
    22
    Симпатии:
    1
    Есть вопрос.
    Если покупатель хочет зарегистрироваться, то ему тоже приходится пройти 7 кругов ада.
    Начал решать эту проблему.
    на шаге "Платежная информация" скрыл чекбокс "Адрес доставки совпадает с адресом плательщика." с помощью style="display:none"
    в \catalog\view\theme\default\template\checkout\register.tpl изменил код
    Код:
    <div class="checkbox" style="display:none">
      <label>
        <input type="checkbox" name="shipping_address" value="1" checked="checked" />
        <?php echo $entry_shipping; ?></label>
    </div>
    потом в \catalog\view\theme\default\template\checkout\checkout.tpl тоже добавил style="display:none" в строчках
    Код:
    <div class="panel panel-default" style="display:none">
              <div class="panel-heading">
                <h4 class="panel-title"><?php echo $text_checkout_shipping_address; ?></h4>
              </div>
              <div class="panel-collapse collapse" id="collapse-shipping-address">
                <div class="panel-body"></div>
              </div>
            </div>
    Шаг Платежная информация скрылся, но кнопку на нем нажать некому.
    Как скрыть этот шаг имитировав нажатие кнопки или обойти ее нажатие
    [​IMG][​IMG]
    Потом таким же способом нужно избавиться от блока Адрес доставки
     
  18. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Найдите в файле \catalog\view\theme\default\template\checkout\checkout.tpl
    Строка примерно 379

    PHP:
    success: function(html) {
                            $('#collapse-shipping-address .panel-body').html(html);

                            $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle"><?php echo $text_checkout_shipping_address?> <i class="fa fa-caret-down"></i></a>');

                            $('a[href=\'#collapse-shipping-address\']').trigger('click');

                            $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_shipping_method?>');
                            $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_payment_method?>');
                            $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_confirm?>');
                        },
    и перед закрывающейся скобкой }, добавьте
    PHP:
    $('#button-shipping-address').trigger('click'); // <-- здесь имитируем клик
     
    Zlata Jesen, Edikofff и Bkmz нравится это.
  19. Anton_f

    Anton_f Новичок

    Сообщения:
    27
    Симпатии:
    0
    Здравствуйте. Все описанное я сделал все хорошо. Отлично все расписано. Теперь не получается обойти шаг способ оплаты. У меня он один я его прописал, как сделать нажатие кнопки и убрать или обойти еще комментарии к оплате. Помогите кто знает, а то никак не выходит. Версия 3.0.2.0.