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

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

  1. TopicStarter Overlay
    Offline

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

    Сообщения:
    2.492
    Симпатии:
    94.319
    Репутация:
    175
    Не так давно мы рассмотрели способ удаления лишних шагов при оформлении заказа, вместо шести мы оставили всего лишь 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
     
    Alexandr1995 нравится это.
  2. Offline

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

    Сообщения:
    74
    Симпатии:
    22
    Репутация:
    0
    уважаемый админ интересует тот же вопрос только в админке а именно редактирование заказа и покупателей в opencart_pro_2_3_0_2_1 для редактирования заказов нашел модификатор, а вот покупателей нет(
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
    <name>Удаление обязательных полей в редакторе заказов</name>
    <code>remove-required-in-edit-sale</code>
    <version>1.0.1</version>
    <author>Тимофеев Сергей</author>
        <file path="admin/view/template/sale/order_form.tpl">
        <operation>
           <search><![CDATA[
              <div class="form-group required">
          ]]></search>
          <add position="replace"><![CDATA[
                <div class="form-group">
          ]]></add>
        </operation>   
        </file>
     
        <file path="catalog/controller/api/customer.php">
        <operation>
            <search><![CDATA[
            $json['error']['firstname'] = $this->language->get('error_firstname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['firstname'] = $this->language->get('error_firstname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['lastname'] = $this->language->get('error_lastname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['lastname'] = $this->language->get('error_lastname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['email'] = $this->language->get('error_email');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['email'] = $this->language->get('error_email'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['telephone'] = $this->language->get('error_telephone');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['telephone'] = $this->language->get('error_telephone'); */
            ]]></add>
        </operation>   
      </file>
     
      <file path="catalog/controller/api/payment.php">
        <operation>
            <search><![CDATA[
            $json['error']['firstname'] = $this->language->get('error_firstname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['firstname'] = $this->language->get('error_firstname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['lastname'] = $this->language->get('error_lastname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['lastname'] = $this->language->get('error_lastname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['address_1'] = $this->language->get('error_address_1');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['address_1'] = $this->language->get('error_address_1'); */
            ]]></add>
        </operation>   
       
        <operation>
            <search><![CDATA[
            $json['error']['city'] = $this->language->get('error_city');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['city'] = $this->language->get('error_city'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['country'] = $this->language->get('error_country');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['country'] = $this->language->get('error_country'); */
            ]]></add>
        </operation>   
       
        <operation>
            <search><![CDATA[
            $json['error']['zone'] = $this->language->get('error_zone');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['zone'] = $this->language->get('error_zone'); */
            ]]></add>
        </operation>
       
        </file>
       
        <file path="catalog/controller/api/shipping.php">
        <operation>
            <search><![CDATA[
            $json['error']['firstname'] = $this->language->get('error_firstname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['firstname'] = $this->language->get('error_firstname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['lastname'] = $this->language->get('error_lastname');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['lastname'] = $this->language->get('error_lastname'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['address_1'] = $this->language->get('error_address_1');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['address_1'] = $this->language->get('error_address_1'); */
            ]]></add>
        </operation>   
       
        <operation>
            <search><![CDATA[
            $json['error']['city'] = $this->language->get('error_city');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['city'] = $this->language->get('error_city'); */
            ]]></add>
        </operation>
       
        <operation>
            <search><![CDATA[
            $json['error']['country'] = $this->language->get('error_country');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['country'] = $this->language->get('error_country'); */
            ]]></add>
        </operation>   
       
        <operation>
            <search><![CDATA[
            $json['error']['zone'] = $this->language->get('error_zone');
            ]]></search>
            <add position="replace"><![CDATA[
                /* $json['error']['zone'] = $this->language->get('error_zone'); */
            ]]></add>
        </operation>
       
        </file>
     
      </modification>