Упрощенная регистрация без e-mail в prestashop 1.4.x
Заказчики часто просят максимально упростить процедуру заказов. Активизация существующей в prestashop системы гостевого заказа позволяет частично решить этот вопрос, но все равно остаются некоторые обязательны поля, которые нельзя скрыть обычным образом, и прежде всего поле «e-mail«.
Вообще поле «e-mail» убрать нельзя, так как к нему привязываются данные учетной записи пользователя как при обычной регистрации, так и при гостевой. Обход ввода этого поля реализуется за счет скрытого присвоения его учетной записи произвольного e-mail.
Ниже описаны необходимые правки для обхода ввода e-mail при упрощенной регистрации (гостевом заказе), как при пошаговой, так и при одностраничной регистрации.
При пошаговой регистрации:
Прежде всего необходимо сделать правку в файле контроллера аутентификации пользователей /controllers/AuthController.php
Находим в этом файле примерно в 390-й строке функцию displayContent()
1 2 3 4 5 6 7 |
public function displayContent() { $this->processAddressFormat(); parent::displayContent(); self::$smarty->display(_PS_THEME_DIR_.'authentication.tpl'); } |
И добавляем в нее вызов функции генерации случайного e-mail:
1 2 3 4 5 6 7 |
public function displayContent() { $this->processAddressFormat(); $this->assignRandomEmail(); parent::displayContent(); self::$smarty->display(_PS_THEME_DIR_.'authentication.tpl'); } |
Ну и естественно саму функцию генерации случайного e-mail:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
protected function assignRandomEmail() { // символы для e-mail $abc = array(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z); // количество символов до @ $num = 5; // домен для e-mail $domen = '@mydomain.com.ua'; for ($i = 1; $i <= $num; $i++) { $id = array_rand($abc); $email .= $abc[$id]; } $email = $email.time().$domen; self::$smarty->assign('rand_email', $email); } |
Функция генерирует e-mail из пяти случайных символов, к которому добавляется временной штамп в домене $domen = ‘@mydomain.com.ua’. Вы можете измените домен и количество символов по вашему усмотрению, отредактировав соответствующие параметры.
Теперь нужно подставить случайным образом генерируемый e-mail в шаблон темы. Для этого открываем на редактирование файл /themes/ваша тема/authentication.tpl и ищем следующий код (примерно 140-я строка):
1 2 3 4 5 6 7 8 |
<p class="required text"> <label for="guest_email">{l s='E-mail address'}</label> <input type="text" class="text" id="guest_email" name="guest_email" value="{if isset($smarty.post.guest_email)} {$smarty.post.guest_email}{/if}"> <sup>*</sup> </p> |
И заменяем его на:
1 2 3 4 5 6 7 |
<p class="required text hidden"> <label for="email">{l s='E-mail address'}</label> <input type="text" class="text" id="guest_email" name="guest_email" value="{if isset($smarty.post.guest_email)} {$smarty.post.guest_email}{else}{$rand_email}{/if}"> </p> |
Т.е автоматически сгенерированный e-mail будет подставляться в соответствующее поле, а само поле будет скрыто.
При одностраничной регистрации:
В этом случае необходимо сделать правку в файле контроллера одностраничной регистрации /controllers/OrderOpcController.php
Как и в случае с регистрацией в 5 шагов ищем функцию displayContent() (примерно 285-я строка) и добавляем туда вызов функции генерацию случайного e-mail и саму функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public function displayContent() { parent::displayContent(); $this->_processAddressFormat(); $this->assignRandomEmail(); self::$smarty->display(_PS_THEME_DIR_.'order-opc.tpl'); } protected function assignRandomEmail() { // символы для e-mail $abc = array(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z); // количество символов до @ $num = 5; // домен для e-mail $domen = '@mydomain.com.ua'; for ($i = 1; $i <= $num; $i++) { $id = array_rand($abc); $email .= $abc[$id]; } $email = $email.time().$domen; self::$smarty->assign('rand_email', $email); } |
Кроме этого необходимо сделать правки в файле шаблона /themes/ваша тема/order-opc-new-account.tpl (примерно 116 строка):
1 2 3 4 5 6 |
<p class="required text"> <label for="email">{l s='E-mail'} <sup>*</sup></label> <input type="text" class="text" id="email" name="email" value="{if isset($guestInformations) && $guestInformations.email} {$guestInformations.email}{/if}" /> </p> |
Здесь мы введем скрытое поле, в которое будет подставляться случайно сгенерированный e-mail, а исходное поле для ввода e-mail дополним классом is_customer_param, благодаря чему оно будет отображаться только при выборе заказа с регистрацией.
1 2 3 4 5 6 7 8 9 10 |
<input type="text" style="visibility:hidden;" class="text" id="email" name="email" value="{$rand_email}" /> <p class="required text is_customer_param"> <label for="email">{l s='E-mail'}</label> <input type="text" class="text" id="email" name="email" value="{if isset($guestInformations) && $guestInformations.email} {$guestInformations.email}{/if}" /> <sup>*</sup> </p> |
Данное решение не претендует на идеальность, но тем не менее мы надеемся что оно поможет вам при решении ваших задач.
Интеграция по протоколу позволяет обрабатывать заказы в автоматическом режиме. Без интеграции вы будете получать уведомления о платежах на email и обрабатывать их вручную.