Как упростить форму заказа, регистрации в Prestashop

Автор DarinSr, 03 декабря 2016, 14:10:29

« назад - далее »

DarinSr

1. Для одностраничного заказа редактировать нужно шаблон  order-opc-new-account.tpl для заказа в 5 шагов address.tpl и authentication.tpl
В этих файлах находите поля, которые хотите не показывать в форме регистрации, и добавляете свойство стилей
style="display:none;"
Например, спрятать дату рождения
<div class="form-group date-select" style="display:none;">
<label>{l s='Date of Birth'}</label>
<div class="row">
<div class="col-xs-4">
<select id="days" name="days" class="form-control">
<option value="">-</option>


2. Таже нужно изменить классы Customer.php и Address.php, удалить
'required' => true
у полей, которые вы скрыли в шаблонах tpl.
Например, для поля firstname':
До изменения
'firstname' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
После изменений
'firstname' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isName', 'size' => 32),

AsadyLlag

А это для какой версии? У меня 1.6.1.6.

Я нашел эти строки и пытаюсь скрыть City и Country, но не помогло.
Это order-opc-new-account.tpl


{elseif $field_name eq "city"}
<div class="required text form-group" style="display:none;">
<label for="city">{l s='City'} <sup>*</sup></label>
<input type="text" class="text form-control validate" name="city" id="city" data-validate="isCityName" value="{if isset($guestInformations) && isset($guestInformations.city) && $guestInformations.city}{$guestInformations.city}{/if}" />
</div>
{elseif $field_name eq "country" || $field_name eq "Country:name"}
<div class="required select form-group" style="display:none;">
<label for="id_country">{l s='Country'} <sup>*</sup></label>
<select name="id_country" id="id_country" class="form-control">
{foreach from=$countries item=v}
<option value="{$v.id_country}"{if (isset($guestInformations) && isset($guestInformations.id_country) && $guestInformations.id_country == $v.id_country) || (!isset($guestInformations) && $sl_country == $v.id_country)} selected="selected"{/if}>{$v.name|escape:'html':'UTF-8'}</option>
{/foreach}
</select>
</div>


А вот из Address.php


'id_country' =>        array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),

'city' =>                array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'size' => 64),


Что сделал не так подскажите?

Adik


AsadyLlag

Сделал все как тут с firstname. Не помогло.

Вот файлик themes\default-bootstrap\order-opc-new-account.tpl


<div class="required form-group" style="display:none;">
<label for="firstname">{l s='First name'} <sup>*</sup></label>
<input type="text" class="text form-control validate" id="customer_firstname" name="customer_firstname" onblur="$('#firstname').val($(this).val());" data-validate="isName" value="{if isset($guestInformations) && isset($guestInformations.customer_firstname) && $guestInformations.customer_firstname}{$guestInformations.customer_firstname}{/if}" />
</div>


А вот из \classes\Customer.php


'firstname' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isName', 'size' => 32),


Но никакой реакции. Что упустил?

AsadyLlag

Все разобрался! Большое спасибо. Править надо документ в \themes\theme990\order-opc-new-account.tpl

Большое спасибо вам обоим.

AsadyLlag

Подскажите, пожалуйста, как пароль скрыть?

DarinSr

style="display:none;"
Скроет поле

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

AsadyLlag

Не скрывает. Только после того как поменял поле required password is_customer_param form-group поле с паролем стало скрытым.

AsadyLlag

Ребят, скрыть поля получилось, но вот некоторые все равно требуют заполнения. Вот ошибки что выдает.

Страна не активирована.
Требуется выбор региона для указанной страны.
Имя обязательное поле пропущено.
passwd обязательное поле пропущено.
город обязательное поле пропущено.

Вот файл \themes\theme990\order-opc-new-account.tpl


<div class="required form-group" style="display:none;">
            <label for="passwd">{l s='Password'} <sup>*</sup></label>
            <input type="password" class="text form-control validate" name="passwd" id="passwd" data-validate="isPasswd" />
            <span class="form_info">{l s='(five characters min.)'}</span>
</div>


Вот файл \classes\Customer.php


'passwd' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => false, 'size' => 32),


'required' => false, пробовал и удалять, не помогло. С другими полями так же. Подскажите что еще не так?

Миколас

Страна, город, пароль - это обязательные поля. Этим полям нужно давать какое-то значение, нельзя их пустыми оставлять.

AsadyLlag

Подскажите, пожалуйста, я все что хотел скрыл. Теперь он пишет Ошибка создания учетной записи. Я понимаю что надо ковырять валидацию, но какой конкретно файл?

Миколас

Смотря какой шаблон менял, у каждого шаблона свой контоллер.

AsadyLlag

Я так понимаю он так делает потому что я ему не все данные даю?

AsadyLlag

А как в пароль присвоить какое то значение? Не хочу что бы клиент вводил, хочу генератор случайных паролей прикрутить.

Adik

Тогда нужно добавить новый метод с функцией генерации пароля в контроллер AuthController.php или в класс Customer.php