Opencart 2x, убираем лишние поля в заказе и при регистрации

12 июля 2019

Стояла задача оставить при регистрации и оформлении заказа только Имя, Телефон и E-mail.

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

Итак.

В Opencart есть 2 момента, где править поля - Регистрация и Заказ без регистрации

Начнем с правки Заказа с регистрацией

Чтобы не заморачиваться с отключением проверки полей, а ограничиться правкой файлов шаблона, скрыли ненужные поля с помощью style="display:none" , а в обязательных полях задали значение value по умолчанию, т.е. вместо value="" получилось value="по умолчанию"

В файле ваш_сайт/catalog/view/theme/ваша_тема/template/checkout/register.tpl

вместо

<div class="form-group required">
    <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>

написать

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

И так далее, по аналогии

Примерно строки начала блоков: 27 (for="input-payment-lastname"), 39 (for="input-payment-fax"), 152 (for="input-payment-company"), 156 (for="input-payment-address-1"), 160 (for="input-payment-address-2"), 168 (for="input-payment-postcode"), 172 (for="input-payment-country"), 185 (for="input-payment-zone")

В данном случае справа поле осталось пустое, поэтому его можно запросто скрыть в 149 строке <div class="col-sm-6" style="display:none" rel="display:none" rel="display:none" rel="display:none">

Поскольку у меня адреса не осталось, то и кнопка "Использовать этот адрес для доставки" теряет всякий смысл.

294 строка, прячем ее, но при этом проследите, чтобы она по умолчанию была включена (value="1" checked="checked")

<?php if ($shipping_required) { ?>
    <div class="checkbox" style="display:none">
        <label>
            <input type="checkbox" name="shipping_address" value="1" checked="checked">
        </label>
    </div>
<?php } ?-->

Вот что получилось

Остается еще убрать в Шаг 3 верхнюю запись, про адрес совпадает, а вместо нижней "Я хочу указать другой адрес..." написать просто "Я хочу указать адрес доставки". Это логично, вдруг человек захочет написать, куда ему доставлять заказ - да ради бога, пусть пишет.

Идем в ваш_сайт/catalog/view/theme/ваша_тема/template/checkout/shipping_address.tpl и со 2 строки

<?php if ($addresses) { ?>
  <div class="radio">
    <label>
      <input type="radio" name="shipping_address" value="existing" checked="checked">
      <?php echo $text_address_existing; ?--></label>
  </div>
  <div id="shipping-existing">
    <select name="address_id" class="form-control">
      <!--?php foreach ($addresses as $address) { ?-->
      <!--?php if ($address['address_id'] == $address_id) { ?-->
      <option value="<?php echo $address['address_id']; ?>" selected="selected"><!--?php echo $address['firstname']; ?--> <!--?php echo $address['lastname']; ?-->, <!--?php echo $address['address_1']; ?-->, <!--?php echo $address['city']; ?-->, <!--?php echo $address['zone']; ?-->, <!--?php echo $address['country']; ?--></option>
      <!--?php } else { ?-->
      <option value="<?php echo $address['address_id']; ?>"><!--?php echo $address['firstname']; ?--> <!--?php echo $address['lastname']; ?-->, <!--?php echo $address['address_1']; ?-->, <!--?php echo $address['city']; ?-->, <!--?php echo $address['zone']; ?-->, <!--?php echo $address['country']; ?--></option>
      <!--?php } ?-->
      <!--?php } ?-->
    </select>
  </div>
  <div class="radio">
    <label>
      <input type="radio" name="shipping_address" value="new">
      <!--?php echo $text_address_new; ?--></label>
  </div>
  <!--?php } ?-->

меняем на

<?php if ($addresses) { ?>
    <div class="radio" style="display:none">
        <label>
            <input type="radio" name="shipping_address" value="existing" checked="checked">
        <?php echo $text_address_existing; ?--></label>
    </div>
    <div id="shipping-existing">
        <select name="address_id" class="form-control">
            <!--?php foreach ($addresses as $address) { ?-->
                <!--?php if ($address['address_id'] == $address_id) { ?-->
                    <option value="<?php echo $address['address_id']; ?>" selected="selected"><!--?php echo $address['firstname']; ?--> </option>
                    <!--?php } else { ?-->
                    <option value="<?php echo $address['address_id']; ?>"><!--?php echo $address['firstname']; ?--></option>
                <!--?php } ?-->
            <!--?php } ?-->
        </select>
    </div>
    <div class="radio">
        <label>
            <input type="radio" name="shipping_address" value="new">
        Я хочу указать адрес доставки</label>
    </div>
<!--?php } ?-->

Там в <option value="<?php echo $address['address_id']; ?>" selected="selected"><?php echo $address['firstname']; ?> </option> убираем ненужные значения к выводу в форме (там где на картинке ниже "Борис")

Вот что получилось

С этим разобрались, идем дальше

Правки Заказа без регистрации

Файл /catalog/view/theme/ваша_тема/template/checkout/guest.tpl аналогично с правкой заказа с регистрацией скрыли ненужные поля с помощью style="display:none" rel="display:none" rel="display:none" , а в обязательных полях задали значение value по умолчанию, т.е. чтобы получилось value="по умолчанию". Но в этом случае нужно еще править и placeholder="по умолчанию"

27 строка вместо

<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="по умолчанию" id="input-payment-lastname" class="form-control">
</div>

и дальше по аналогии

39 (for="input-payment-fax">), 157 (for="input-payment-company"), 161 (for="input-payment-address-1"), 165 (for="input-payment-address-2"), и дальше, меняя значения value="..." на value="по умолчанию"

В данном случае удалены все поля правой колонки (адреса), поэтому можно скрыть целиком весь блок

154 строка style="display:none"

<div class="col-sm-6" style="display:none"> 

Теперь остается убрать внизу выбор адреса доставки, т.к. его теперь нет. 310строка добавить style="display:none", чтобы получилось так

<div class="checkbox" style="display:none">
    <label>
        <?php if ($shipping_address) { ?>
            <input type="checkbox" name="shipping_address" value="1" checked="checked">
            <?php } else { ?-->
            <input type="checkbox" name="shipping_address" value="1">
        <!--?php } ?-->
    <!--?php echo $entry_shipping; ?--></label>
</div>

Вот и все

В итоге такой вид

А убрать подтверждения "Я прочитал условия, обязуюсь..." можно в /catalog/view/theme/default/template/checkout/payment_method.tpl (примерно 28 строка)

вместо

<div class="buttons">
    <div class="pull-right"><?php echo $text_agree; ?>
        <?php if ($agree) { ?-->
            <input type="checkbox" name="agree" value="1" checked="checked">
            <!--?php } else { ?-->
            <input type="checkbox" name="agree" value="1" checked="checked">
        <!--?php } ?-->
     
    <input type="button" value="<?php echo $button_continue; ?>" id="button-payment-method" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-coralpic">
    </div>
</div>

сделать

<div class="buttons">
    <div class="pull-right"><div style="display:none;"><?php echo $text_agree; ?>
        <?php if ($agree) { ?-->
            <input type="checkbox" name="agree" value="1" checked="checked">
            <!--?php } else { ?-->
            <input type="checkbox" name="agree" value="1" checked="checked">
        <!--?php } ?-->
     </div>
    <input type="button" value="<?php echo $button_continue; ?>" id="button-payment-method" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-coralpic">
    </div>
</div>