Opencart — Убираем Обязательные Поля В Оформлении Заказа

Тема в разделе "Установка, обновление, настройка", создана пользователем admin, 16 июн 2016.

  1. TopicStarter Overlay
    Offline

    admin Команда форума Администратор

    Сообщения:
    1.659
    Симпатии:
    31.478
    Репутация:
    129
    Не так давно мы рассмотрели способ удаления лишних шагов при оформлении заказа, вместо шести мы оставили всего лишь 2 шага. Сегодня же разберемся с вопросом о полях, которые помечены звездочкой, с вопросом об обязательных полях. Они обязательны для заполнения, но порой в них просто нет надобности, так что мы постараемся их скрыть, чтобы упростить оформление заказа.

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

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

    catalog/view/theme/default/template/checkout/register.tplпри оформлении заказа с регистрацией


    catalog/view/theme/default/template/checkout/guest.tpl - при гостевом оформлении заказа


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

    • удалять поля: Факс, Компания, Company ID и Индекс,
    • редактировать поля «Имя, Отчество» и «Фамилия» — объединим их в одно поле и назовем стандартно «ФИО».
    Все изменения рассмотрены на версии 1.5.3.1, на дефолтной теме.

    opencart-remove-fields.jpg
    Наши действия:

    1. Перестрахуемся и сохраним файл catalog/view/theme/default/template/checkout/register.tpl (всегда может что-то пойти не так, или произведенные действия не возымеют эффекта и т.д.).

    2. Факс. В вышеупомянутом файле ищем строки касающиеся факса (19-22 строки):

    Код:
    <?phpecho$entry_fax;?><br/>
    <input type="text"name="fax"value=""class="large-field"/>
    <br/>
    <br/>
    И либо удаляем их, либо комментируем. Я обычно выбираю второй способ, если та или иная возможность мне еще может понадобиться в будущем.

    3. Компания и Company ID . Находим строки о компании и поступаем с ними также, как и с факсом — удаляем или комментируем (приблизительно строки 36-39, 53-57):

    Код:
    <?phpecho$entry_company;?><br/>
    <input type="text"name="company"value=""class="large-field"/>
    <br/>
    <br/>
    и

    Код:
    <div id="company-id-display"><span id="company-id-required"class="required">*</span><?phpecho$entry_company_id;?><br/>
    <input type="text"name="company_id"value=""class="large-field"/>
    <br/>
    <br/>
    </div>
    4. Почтовый Индекс. Все предыдущие поля не были обязательными, с индексом ситуация немного иная, так как это поле обязательно для заполнения и помечено в файле как «required». Поэтому, найдя строки с индексом (75-78), мы их закомментируем

    Код:
    <span id="payment-postcode-required"class="required">*</span><?phpecho$entry_postcode;?><br/>
    <input type="text"name="postcode"value="<?phpecho$postcode;?>"class="large-field"/>
    <br/>
    <br/>
    и для того, чтобы разобраться с ошибками мы будем также править файлы в контроллере:

    catalog/controller/checkout/register.php — заказ с регистрацией,


    catalog/controller/checkout/guest.php — гостевое оформление заказа.


    Открываем register.php и ищем строку с почтовым индексом, комментировать мы будем только его, поскольку все остальные поля, скрытые нами, необязательны для заполнения (приблизительно 23я и 50-54 строки):

    Код:
    $this->data['entry_postcode']=$this->language->get('entry_postcode');
    
    if(isset($this->session->data['shipping_postcode'])){
    $this->data['postcode']=$this->session->data['shipping_postcode'];
    }else{
    $this->data['postcode']='';
    }
    5. Для того же, чтобы объединить два поля с «именем, отчеством» и «фамилией» в одно поле, следует в файле catalog/view/theme/default/template/checkout/register.tpl

    закомментировать строки (строки 7-10):

    Код:
    <span class="required">*</span><?phpecho$entry_lastname;?><br/>
    <input type="text"name="lastname"value=""class="large-field"/>
    <br/>
    <br/>

    Мы убрали второе поле, для ввода фамилии, теперь для того, чтобы изменить название поля с «Имя, Отчество» на «ФИО», открываем файл catalog/language/russian/checkout/checkout.php и вносим изменения:

    вместо

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

    $_['entry_firstname']='ФИО:';

    Поля приобрели необходимый вид и структуру, но обработчик не пропустит покупателя дальше второго шага, так как поле с фамилией было обязательным для заполнения. Снова обращаемся к файлу catalog/controller/checkout/register.php и комментируем строки (приблизительно 13 и 138-140):


    $this->data['entry_lastname']=$this->language->get('entry_lastname');

    if((utf8_strlen($this->request->post['lastname'])<1)||(utf8_strlen($this->request->post['lastname'])>32)){
    $json['error']['lastname']=$this->language->get('error_lastname');
    }

    Поскольку мы изменяем оформление заказа с регистрацией, то нам теперь необходимо открыть файл catalog/model/account/customer.php и 14 строку:


    $this->db->query("INSERT INTO ".DB_PREFIX."customer SET store_id = '".(int)$this->config->get('config_store_id')."', firstname = '".$this->db->escape($data['firstname'])."', lastname = '".$this->db->escape($data['lastname'])."', email = '".$this->db->escape($data['email'])."', telephone = '".$this->db->escape($data['telephone'])."', fax = '".$this->db->escape($data['fax'])."', password = '".$this->db->escape(md5($data['password']))."', newsletter = '".(isset($data['newsletter'])?(int)$data['newsletter']:0)."', customer_group_id = '".(int)$customer_group_id."', ip = '".$this->db->escape($this->request->server['REMOTE_ADDR'])."', status = '1', approved = '".(int)!$customer_group_info['approval']."', date_added = NOW()");


    изменить на

    $this->db->query("INSERT INTO ".DB_PREFIX."customer SET store_id = '".(int)$this->config->get('config_store_id')."', firstname = '".$this->db->escape($data['firstname'])./*"', lastname = '" . $this->db->escape($data['lastname']) .*/"', email = '".$this->db->escape($data['email'])."', telephone = '".$this->db->escape($data['telephone'])."', fax = '".$this->db->escape($data['fax'])."', password = '".$this->db->escape(md5($data['password']))."', newsletter = '".(isset($data['newsletter'])?(int)$data['newsletter']:0)."', customer_group_id = '".(int)$customer_group_id."', ip = '".$this->db->escape($this->request->server['REMOTE_ADDR'])."', status = '1', approved = '".(int)!$customer_group_info['approval']."', date_added = NOW()");


    Также меняем 18ю строку:

    $this->db->query("INSERT INTO ".DB_PREFIX."address SET customer_id = '".(int)$customer_id."', firstname = '".$this->db->escape($data['firstname'])."', lastname = '".$this->db->escape($data['lastname'])."', company = '".$this->db->escape($data['company'])."', company_id = '".$this->db->escape($data['company_id'])."', tax_id = '".$this->db->escape($data['tax_id'])."', address_1 = '".$this->db->escape($data['address_1'])."', address_2 = '".$this->db->escape($data['address_2'])."', city = '".$this->db->escape($data['city'])."', postcode = '".$this->db->escape($data['postcode'])."', country_id = '".(int)$data['country_id']."', zone_id = '".(int)$data['zone_id']."'");

    на

    $this->db->query("INSERT INTO ".DB_PREFIX."address SET customer_id = '".(int)$customer_id."', firstname = '".$this->db->escape($data['firstname'])./*"', lastname = '" . $this->db->escape($data['lastname']) .*/"', company = '".$this->db->escape($data['company'])."', company_id = '".$this->db->escape($data['company_id'])."', tax_id = '".$this->db->escape($data['tax_id'])."', address_1 = '".$this->db->escape($data['address_1'])."', address_2 = '".$this->db->escape($data['address_2'])."', city = '".$this->db->escape($data['city'])."', postcode = '".$this->db->escape($data['postcode'])."', country_id = '".(int)$data['country_id']."', zone_id = '".(int)$data['zone_id']."'");


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

    Остальные поля, например e-mail или телефон, можно убрать точно таким же способом, каким мы убрали индекс и фамилию.

    Напомню еще раз, для того, чтобы править гостевое оформление заказа, то есть без регистрации, необходимо править файлы catalog/view/theme/default/template/checkout/guest.tpl и catalog/controller/checkout/guest.php . Принцип действия тот же, только в файле catalog/controller/checkout/guest.php необходимо закомментировать следующие строки:

    $this->data['entry_lastname']=$this->language->get('entry_lastname');


    приблизительно 189-191

    if((utf8_strlen($this->request->post['lastname'])<1)||(utf8_strlen($this->request->post['lastname'])>32)){
    $json['error']['lastname']=$this->language->get('error_lastname');
    }


    приблизительно 261


    $this->session->data['guest']['lastname']=$this->request->post['lastname'];


    приблизительно 267


    $this->session->data['guest']['payment']['lastname']=$this->request->post['lastname'];


    и приблизительно 318 строку


    $this->session->data['guest']['shipping']['lastname']=$this->request->post['lastname'];


    В результате мы получили второй шаг с уменьшенным количеством полей для заполнения:

    opencart-remove-fields-step2.jpg