Необязательные поля при регистрации в PrestaShop 1.5
После написания мной статьи упрощения регистрации в ПрестаШоп, в комментариях мне был задан вопрос – знаю ли я что то о возможности создания необязательных полей.В сети интернет есть разрозненная информация. Я решил её собрать в кучу и добавить кое что от себя.
Для примера использую версию 1.5.6.1. Начнем с контроллера, который несет ответственность за заполнение полей при регистрации-это файл Address.php, находящийся в директории ваш_сайт/classes/ . За обязательность или необязательность полей отвечает часть кода
|
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
26
27
28
|
public static $definition = array(
'table' => 'address',
'primary' => 'id_address',
'fields' => array(
'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'id_state' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'),
'alias' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64),
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
'vat_number' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
'address1' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128),
'address2' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128),
'postcode' => array('type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12),
'city' => array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64),
'other' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300),
'phone' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16),
'phone_mobile' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16),
'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16),
'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_post' => false),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_post' => false),
),
);
|
Строки имеющие ‘required’ => true обозначают включение обязательного заполнение полей. Казалось бы все решение состоит в задании значения false для полей чтобы отключить проверку(валидацию), что в принципе мы и сделаем-меняем true на false во всех строках. Тут есть нюанс, если в будущем магазин будет обновляться на новые версии, то нужно одноименный файл Address.php с изменениями поместить в директорию ваш_сайт/override/classes/ , если такого файла там нет, то необходимо его создать. Для версий до 1.5.3.1 ничего больше не требуется, а для версий выше нужно удалить файл ваш_сайт/cache/class_index.php.
Переводим режим заказов в один шаг (настройки->заказы), именно так я сделал у себя на сайте, так
как это намного упрощает процесс регистрации и заказ товаров для зарегистрированных пользователей.
Гостевую покупку отключаем. Настройки->клиенты тип процесса регистрации-только создание учетной
записи. Номер телефона откллючаем.
Переходим во фронт-офис и пробуем добавить товар в корзину как незарегистрированный пользователь.
Не заполняя поля регистрации для нового клиента жмем кнопку сохранить. И, как не досадно,
получаем ошибку
![]()
Все дело в том, что эти поля проходят дополнительную проверку. Но общем мы добились большого
результата. И теперь в файле order-opc-new-account.tpl вашего шаблона можно скрыть остальные поля
с помощью hidden или вообще их закомментировать. Так как ленюсь писать много, то выложу готовый
файл дефолтного шаблона с комментариями и вариантами использования полей.
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
|
<div id="opc_new_account" class="opc-main-block">
<div id="opc_new_account-overlay" class="opc-overlay" style="display: none;"></div>
<h2><span>1</span> {l s='Account'}</h2>
<!-- Меняем id="new_account_form" -->
<form action="{$link->getPageLink('authentication', true, NULL, "back=order-opc")|escape:'html'}" method="post" id="new_account_form" class="std">
<fieldset>
<h3 id="new_account_title" >{l s='Already registered?'}</h3>
<!-- Добавляем class="button" чтобы была кнопка и ставим ее по центру-->
<center><p><a href="#" class="button" id="openLoginFormBlock">» {l s='Click here'}</a></p></center>
<div id="login_form_content" style="display:none;">
<!-- Error return block -->
<div id="opc_login_errors" class="error" style="display:none;"></div>
<!-- END Error return block -->
<div style="margin-left:40px;margin-bottom:5px;float:left;width:40%;">
<label for="login_email">{l s='Email address'}</label>
<span><input type="text" id="login_email" name="email" /></span>
</div>
<div style="margin-left:40px;margin-bottom:5px;float:left;width:40%;">
<label for="login_passwd">{l s='Password'}</label>
<span><input type="password" id="login_passwd" name="login_passwd" /></span>
<a href="{$link->getPageLink('password', true)|escape:'html'}" class="lost_password">{l s='Forgot your password?'}</a>
</div>
<p class="submit">
{if isset($back)}<input type="hidden" class="hidden" name="back" value="{$back|escape:'htmlall':'UTF-8'}" />{/if}
<input type="submit" id="SubmitLogin" name="SubmitLogin" class="button" value="{l s='Login'}" />
</p>
</div>
</fieldset>
</form>
<form action="javascript:;" method="post" id="new_account_form" class="std" autocomplete="on" autofill="on">
<fieldset>
<h3 id="new_account_title">{l s='New Customer'}</h3>
<div id="opc_account_choice">
<div class="opc_float">
<p class="title_block">{l s='Instant Checkout'}</p>
<p>
<input type="button" class="exclusive_large" id="opc_guestCheckout" value="{l s='Guest checkout'}" />
</p>
</div>
<div class="opc_float">
<p class="title_block">{l s='Create your account today and enjoy:'}</p>
<ul class="bullet">
<li>{l s='Personalized and secure access'}</li>
<li>{l s='A fast and easy check out process'}</li>
<li>{l s='Separate billing and shipping addresses'}</li>
</ul>
<p>
<input type="button" class="button_large" id="opc_createAccount" value="{l s='Create an account'}" />
</p>
</div>
<div class="clear"></div>
</div>
<div id="opc_account_form">
{$HOOK_CREATE_ACCOUNT_TOP}
<script type="text/javascript">
// <![CDATA[
idSelectedCountry = {if isset($guestInformations) && $guestInformations.id_state}{$guestInformations.id_state|intval}{else}false{/if};
{if isset($countries)}
{foreach from=$countries item='country'}
{if isset($country.states) && $country.contains_states}
countries[{$country.id_country|intval}] = new Array();
{foreach from=$country.states item='state' name='states'}
countries[{$country.id_country|intval}].push({ldelim}'id' : '{$state.id_state}', 'name' : '{$state.name|escape:'htmlall':'UTF-8'}'{rdelim});
{/foreach}
{/if}
{if $country.need_identification_number}
countriesNeedIDNumber.push({$country.id_country|intval});
{/if}
{if isset($country.need_zip_code)}
countriesNeedZipCode[{$country.id_country|intval}] = {$country.need_zip_code};
{/if}
{/foreach}
{/if}
//]]>
{literal}
function vat_number()
{
if (($('#company').length) && ($('#company').val() != ''))
$('#vat_number_block').show();
else
$('#vat_number_block').hide();
}
function vat_number_invoice()
{
if (($('#company_invoice').length) && ($('#company_invoice').val() != ''))
$('#vat_number_block_invoice').show();
else
$('#vat_number_block_invoice').hide();
}
$(document).ready(function() {
$('#company').on('input',function(){
vat_number();
});
$('#company_invoice').on('input',function(){
vat_number_invoice();
});
vat_number();
vat_number_invoice();
{/literal}
$('.id_state option[value={if isset($guestInformations.id_state)}{$guestInformations.id_state|intval}{/if}]').prop('selected', true);
$('.id_state_invoice option[value={if isset($guestInformations.id_state_invoice)}{$guestInformations.id_state_invoice|intval}{/if}]').prop('selected', true);
{literal}
});
{/literal}
</script>
<!-- Error return block -->
<div id="opc_account_errors" class="error" style="display:none;"></div>
<!-- END Error return block -->
<!-- Account -->
<input type="hidden" id="is_new_customer" name="is_new_customer" value="0" />
<input type="hidden" id="opc_id_customer" name="opc_id_customer" value="{if isset($guestInformations) && $guestInformations.id_customer}{$guestInformations.id_customer}{else}0{/if}" />
<input type="hidden" id="opc_id_address_delivery" name="opc_id_address_delivery" value="{if isset($guestInformations) && $guestInformations.id_address_delivery}{$guestInformations.id_address_delivery}{else}0{/if}" />
<input type="hidden" id="opc_id_address_invoice" name="opc_id_address_invoice" value="{if isset($guestInformations) && $guestInformations.id_address_delivery}{$guestInformations.id_address_delivery}{else}0{/if}" />
<p class="required text">
<label for="email">{l s='Email'} <sup>*</sup></label>
<input type="text" class="text" id="email" name="email" value="{if isset($guestInformations) && $guestInformations.email}{$guestInformations.email}{/if}" />
</p>
<p class="required password is_customer_param">
<label for="passwd">{l s='Password'} <sup>*</sup></label>
<input type="password" class="text" name="passwd" id="passwd" />
<span class="form_info">{l s='(five characters min.)'}</span>
</p>
<!--Выбор пола параметр не обязателен
<p class="radio required">
<span>{l s='Title'}</span>
{foreach from=$genders key=k item=gender}
<input type="radio" name="id_gender" id="id_gender{$gender->id_gender}" value="{$gender->id_gender}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id_gender}checked="checked"{/if} />
<label for="id_gender{$gender->id_gender}" class="top">{$gender->name}</label>
{/foreach}
</p>-->
<p class="required text">
<label for="firstname">{l s='First name'} <sup>*</sup></label>
<input type="text" class="text" id="customer_firstname" name="customer_firstname" onblur="$('#firstname').val($(this).val());" value="{if isset($guestInformations) && $guestInformations.customer_firstname}{$guestInformations.customer_firstname}{/if}" />
</p>
<p class="required text">
<label for="lastname">{l s='Last name'} <sup>*</sup></label>
<input type="text" class="text" id="customer_lastname" name="customer_lastname" onblur="$('#lastname').val($(this).val());" value="{if isset($guestInformations) && $guestInformations.customer_lastname}{$guestInformations.customer_lastname}{/if}" />
</p>
<!--День Рождения параметр необязателен
<p class="select">
<span>{l s='Date of Birth'}</span>
<select id="days" name="days">
<option value="">-</option>
{foreach from=$days item=day}
<option value="{$day|escape:'htmlall':'UTF-8'}" {if isset($guestInformations) && ($guestInformations.sl_day == $day)} selected="selected"{/if}>{$day|escape:'htmlall':'UTF-8'} </option>
{/foreach}
</select>
{*
{l s='January'}
{l s='February'}
{l s='March'}
{l s='April'}
{l s='May'}
{l s='June'}
{l s='July'}
{l s='August'}
{l s='September'}
{l s='October'}
{l s='November'}
{l s='December'}
*}
<select id="months" name="months">
<option value="">-</option>
{foreach from=$months key=k item=month}
<option value="{$k|escape:'htmlall':'UTF-8'}" {if isset($guestInformations) && ($guestInformations.sl_month == $k)} selected="selected"{/if}>{l s=$month} </option>
{/foreach}
</select>
<select id="years" name="years">
<option value="">-</option>
{foreach from=$years item=year}
<option value="{$year|escape:'htmlall':'UTF-8'}" {if isset($guestInformations) && ($guestInformations.sl_year == $year)} selected="selected"{/if}>{$year|escape:'htmlall':'UTF-8'} </option>
{/foreach}
</select>
</p>-->
<!--Рассылка
{if isset($newsletter) && $newsletter}
<p class="checkbox">
<input type="checkbox" name="newsletter" id="newsletter" value="1" {if isset($guestInformations) && $guestInformations.newsletter}checked="checked"{/if} autocomplete="off"/>
<label for="newsletter">{l s='Sign up for our newsletter!'}</label>
</p>
<p class="checkbox" >
<input type="checkbox"name="optin" id="optin" value="1" {if isset($guestInformations) && $guestInformations.optin}checked="checked"{/if} autocomplete="off"/>
<label for="optin">{l s='Receive special offers from our partners!'}</label>
</p>
{/if}-->
<!-- Делаем одно поле<h3>{l s='Delivery address'}</h3>-->
{$stateExist = false}
{$postCodeExist = false}
{$dniExist = false}
{foreach from=$dlv_all_fields item=field_name}
{if $field_name eq "company" && $b2b_enable}
<p class="text">
<label for="company">{l s='Company'}</label>
<input type="text" class="text" id="company" name="company" value="{if isset($guestInformations) && $guestInformations.company}{$guestInformations.company}{/if}" />
</p>
{elseif $field_name eq "vat_number"}
<div id="vat_number_block" style="display:none;">
<p class="text">
<label for="vat_number">{l s='VAT number'}</label>
<input type="text" class="text" name="vat_number" id="vat_number" value="{if isset($guestInformations) && $guestInformations.vat_number}{$guestInformations.vat_number}{/if}" />
</p>
</div>
{elseif $field_name eq "dni"}
{assign var='dniExist' value=true}
<p class="text">
<label for="dni">{l s='Identification number'}</label>
<input type="text" class="text" name="dni" id="dni" value="{if isset($guestInformations) && $guestInformations.dni}{$guestInformations.dni}{/if}" />
<span class="form_info">{l s='DNI / NIF / NIE'}</span>
</p>
<!--Повтор имени и Фамилии комментируем
{elseif $field_name eq "firstname"}
<p class="required text" hidden>
<label for="firstname">{l s='First name'} <sup>*</sup></label>
<input type="text" class="text" id="firstname" name="firstname" value="{if isset($guestInformations) && $guestInformations.firstname}{$guestInformations.firstname}{/if}" />
</p>
{elseif $field_name eq "lastname"}
<p class="required text" hidden>
<label for="lastname">{l s='Last name'} <sup>*</sup></label>
<input type="text" class="text" id="lastname" name="lastname" value="{if isset($guestInformations) && $guestInformations.lastname}{$guestInformations.lastname}{/if}" />
</p>
<!-- Адрес 1
{elseif $field_name eq "address1"}
<p class="required text">
<label for="address1">{l s='Address'} <sup>*</sup></label>
<input type="text" class="text" name="address1" id="address1" value="{if isset($guestInformations) && $guestInformations.address1}{$guestInformations.address1}{/if}" />
</p>-->
<!-- Адрес 2
{elseif $field_name eq "address2"}
<p class="text is_customer_param">
<label for="address2">{l s='Address (Line 2)'}</label>
<input type="text" class="text" name="address2" id="address2" value="{if isset($guestInformations) && $guestInformations.address2}{$guestInformations.address2}{/if}" />
</p>-->
<!--Почтовый индекс параметр проходит валидацию. Как вариант можно заменить value="{if isset($guestInformations) && $guestInformations.postcode}{$guestInformations.postcode}{/if}" на value="000000"
и чтобы не было ошибок ставим style="visibility:hidden"-->
{elseif $field_name eq "postcode"}
{$postCodeExist = true}
<p class="required postcode text" >
<label for="postcode">{l s='Zip / Postal code'} <sup>*</sup></label>
<input type="text" class="text" name="postcode" id="postcode" value="{if isset($guestInformations) && $guestInformations.postcode}{$guestInformations.postcode}{/if}" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" />
</p>
<!-- Город-параметр необязателен
{elseif $field_name eq "city"}
<p class="required text">
<label for="city">{l s='City'} <sup>*</sup></label>
<input type="text" class="text" name="city" id="city" value="{if isset($guestInformations) && $guestInformations.city}{$guestInformations.city}{/if}" />
</p>-->
<!--Страна-параметр проходит валидацию. Для скрытия и чтобы не было ошибок ставим style="visibility:hidden" -->
{elseif $field_name eq "country" || $field_name eq "Country:name"}
<p class="required select" style="visibility:hidden" >
<label for="id_country">{l s='Country'} <sup>*</sup></label>
<select name="id_country" id="id_country">
{foreach from=$countries item=v}
<option value="{$v.id_country}"{if (isset($guestInformations) AND $guestInformations.id_country == $v.id_country) OR (!isset($guestInformations) && $sl_country == $v.id_country)} selected="selected"{/if}>{$v.name|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
</p>
{elseif $field_name eq "state" || $field_name eq 'State:name'}
{$stateExist = true}
<p class="required id_state select" style="display:none;">
<label for="id_state">{l s='State'} <sup>*</sup></label>
<select name="id_state" id="id_state">
<option value="">-</option>
</select>
</p>
{/if}
{/foreach}
{if !$postCodeExist}
<p class="required postcode text hidden">
<label for="postcode">{l s='Zip / Postal code'} <sup>*</sup></label>
<input type="text" class="text" name="postcode" id="postcode" value="{if isset($guestInformations) && $guestInformations.postcode}{$guestInformations.postcode}{/if}" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" />
</p>
{/if}
{if !$stateExist}
<p class="required id_state select hidden">
<label for="id_state">{l s='State'} <sup>*</sup></label>
<select name="id_state" id="id_state">
<option value="">-</option>
</select>
</p>
{/if}
{if !$dniExist}
<p class="required text dni">
<label for="dni">{l s='Identification number'} <sup>*</sup></label>
<input type="text" class="text" name="dni" id="dni" value="{if isset($guestInformations) && $guestInformations.dni}{$guestInformations.dni}{/if}" />
<span class="form_info">{l s='DNI / NIF / NIE'}</span>
</p>
{/if}
<p class="textarea is_customer_param">
<!--Меняем нзвание поля в ручную или через перевод в бэк-офисе. Добавляем знак обязательного заполнения <sup>*</sup>-->
<label for="other">{l s='Телефон и адрес доставки'}<sup>*</sup></label>
<textarea name="other" id="other" cols="26" rows="3"></textarea>
</p>
<!-- телефоны-параметр необязателен, поэтому комментируем
{if isset($one_phone_at_least) && $one_phone_at_least}
<p class="inline-infos required is_customer_param">{l s='You must register at least one phone number.'}</p>
{/if}
<p class="text is_customer_param">
<label for="phone">{l s='Home phone'}</label>
<input type="text" class="text" name="phone" id="phone" value="{if isset($guestInformations) && $guestInformations.phone}{$guestInformations.phone}{/if}" />
</p>
<p class="{if isset($one_phone_at_least) && $one_phone_at_least}required {/if}text">
<label for="phone_mobile">{l s='Mobile phone'}{if isset($one_phone_at_least) && $one_phone_at_least} <sup>*</sup>{/if}</label>
<input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($guestInformations) && $guestInformations.phone_mobile}{$guestInformations.phone_mobile}{/if}" />
</p>-->
<input type="hidden" name="alias" id="alias" value="{l s='My address'}"/>
<!-- Комментируем пожелание выставлять счета на другой адрес
<p class="checkbox">
<input type="checkbox" name="invoice_address" id="invoice_address"{if (isset($smarty.post.invoice_address) && $smarty.post.invoice_address) || (isset($guestInformations) && $guestInformations.invoice_address)} checked="checked"{/if} autocomplete="off"/>
<label for="invoice_address"><b>{l s='Please use another address for invoice'}</b></label>
</p>
-->
<div id="opc_invoice_address" class="is_customer_param">
{assign var=stateExist value=false}
{assign var=postCodeExist value=false}
{assign var=dniExist value=false}
<h3>{l s='Invoice address'}</h3>
{foreach from=$inv_all_fields item=field_name}
{if $field_name eq "company" && $b2b_enable}
<p class="text">
<label for="company_invoice">{l s='Company'}</label>
<input type="text" class="text" id="company_invoice" name="company_invoice" value="" />
</p>
{elseif $field_name eq "vat_number"}
<div id="vat_number_block_invoice" class="is_customer_param" style="display:none;">
<p class="text">
<label for="vat_number_invoice">{l s='VAT number'}</label>
<input type="text" class="text" id="vat_number_invoice" name="vat_number_invoice" value="" />
</p>
</div>
{elseif $field_name eq "dni"}
{assign var='dniExist' value=true}
<p class="text">
<label for="dni_invoice">{l s='Identification number'}</label>
<input type="text" class="text" name="dni_invoice" id="dni_invoice" value="{if isset($guestInformations) && $guestInformations.dni_invoice}{$guestInformations.dni_invoice}{/if}" />
<span class="form_info">{l s='DNI / NIF / NIE'}</span>
</p>
{elseif $field_name eq "firstname"}
<p class="required text">
<label for="firstname_invoice">{l s='First name'} <sup>*</sup></label>
<input type="text" class="text" id="firstname_invoice" name="firstname_invoice" value="{if isset($guestInformations) && $guestInformations.firstname_invoice}{$guestInformations.firstname_invoice}{/if}" />
</p>
{elseif $field_name eq "lastname"}
<p class="required text">
<label for="lastname_invoice">{l s='Last name'} <sup>*</sup></label>
<input type="text" class="text" id="lastname_invoice" name="lastname_invoice" value="{if isset($guestInformations) && $guestInformations.lastname_invoice}{$guestInformations.lastname_invoice}{/if}" />
</p>
{elseif $field_name eq "address1"}
<p class="required text">
<label for="address1_invoice">{l s='Address'} <sup>*</sup></label>
<input type="text" class="text" name="address1_invoice" id="address1_invoice" value="{if isset($guestInformations) && $guestInformations.address1_invoice}{$guestInformations.address1_invoice}{/if}" />
</p>
{elseif $field_name eq "address2"}
<p class="text is_customer_param">
<label for="address2_invoice">{l s='Address (Line 2)'}</label>
<input type="text" class="text" name="address2_invoice" id="address2_invoice" value="{if isset($guestInformations) && $guestInformations.address2_invoice}{$guestInformations.address2_invoice}{/if}" />
</p>
{elseif $field_name eq "postcode"}
{$postCodeExist = true}
<p class="required postcode_invoice text">
<label for="postcode_invoice">{l s='Zip / Postal Code'} <sup>*</sup></label>
<input type="text" class="text" name="postcode_invoice" id="postcode_invoice" value="{if isset($guestInformations) && $guestInformations.postcode_invoice}{$guestInformations.postcode_invoice}{/if}" onkeyup="$('#postcode_invoice').val($('#postcode_invoice').val().toUpperCase());" />
</p>
{elseif $field_name eq "city"}
<p class="required text">
<label for="city_invoice">{l s='City'} <sup>*</sup></label>
<input type="text" class="text" name="city_invoice" id="city_invoice" value="{if isset($guestInformations) && $guestInformations.city_invoice}{$guestInformations.city_invoice}{/if}" />
</p>
{elseif $field_name eq "country" || $field_name eq "Country:name"}
<p class="required select">
<label for="id_country_invoice">{l s='Country'} <sup>*</sup></label>
<select name="id_country_invoice" id="id_country_invoice">
<option value="">-</option>
{foreach from=$countries item=v}
<option value="{$v.id_country}"{if (isset($guestInformations) AND $guestInformations.id_country_invoice == $v.id_country) OR (!isset($guestInformations) && $sl_country == $v.id_country)} selected="selected"{/if}>{$v.name|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
</p>
{elseif $field_name eq "state" || $field_name eq 'State:name'}
{$stateExist = true}
<p class="required id_state_invoice select" style="display:none;">
<label for="id_state_invoice">{l s='State'} <sup>*</sup></label>
<select name="id_state_invoice" id="id_state_invoice">
<option value="">-</option>
</select>
</p>
{/if}
{/foreach}
{if !$postCodeExist}
<p class="required postcode_invoice text hidden">
<label for="postcode_invoice">{l s='Zip / Postal Code'} <sup>*</sup></label>
<input type="text" class="text" name="postcode_invoice" id="postcode_invoice" value="" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" />
</p>
{/if}
{if !$stateExist}
<p class="required id_state_invoice select hidden">
<label for="id_state_invoice">{l s='State'} <sup>*</sup></label>
<select name="id_state_invoice" id="id_state_invoice">
<option value="">-</option>
</select>
</p>
{/if}
{if !$dniExist}
<p class="required text dni_invoice">
<label for="dni_invoice">{l s='Identification number'} <sup>*</sup></label>
<input type="text" class="text" name="dni_invoice" id="dni_invoice" value="{if isset($guestInformations) && $guestInformations.dni_invoice}{$guestInformations.dni_invoice}{/if}" />
<span class="form_info">{l s='DNI / NIF / NIE'}</span>
</p>
{/if}
<p class="textarea is_customer_param">
<label for="other_invoice">{l s='Additional information'}</label>
<textarea name="other_invoice" id="other_invoice" cols="26" rows="3"></textarea>
</p>
{if isset($one_phone_at_least) && $one_phone_at_least}
<p class="inline-infos required is_customer_param">{l s='You must register at least one phone number.'}</p>
{/if}
<p class="text is_customer_param">
<label for="phone_invoice">{l s='Home phone'}</label>
<input type="text" class="text" name="phone_invoice" id="phone_invoice" value="{if isset($guestInformations) && $guestInformations.phone_invoice}{$guestInformations.phone_invoice}{/if}" />
</p>
<p class="{if isset($one_phone_at_least) && $one_phone_at_least}required {/if}text">
<label for="phone_mobile_invoice">{l s='Mobile phone'}{if isset($one_phone_at_least) && $one_phone_at_least} <sup>*</sup>{/if}</label>
<input type="text" class="text" name="phone_mobile_invoice" id="phone_mobile_invoice" value="{if isset($guestInformations) && $guestInformations.phone_mobile_invoice}{$guestInformations.phone_mobile_invoice}{/if}" />
</p>
<input type="hidden" name="alias_invoice" id="alias_invoice" value="{l s='My Invoice address'}" />
</div>
{$HOOK_CREATE_ACCOUNT_FORM}
<p class="submit">
<input type="submit" class="exclusive button" name="submitAccount" id="submitAccount" value="{l s='Save'}" />
</p>
<p style="display: none;" id="opc_account_saved">
{l s='Account information saved successfully'}
</p>
<p class="required opc-required" style="clear: both;">
<sup>*</sup>{l s='Required field'}
</p>
<!-- END Account -->
</div>
</fieldset>
</form>
<div class="clear"></div>
</div>
|
P.S. Прячем Показываем поля формы с помощью jQuery
Не удержался.
У меня давно в закладках лежал этот материал и я решил его опробовать. Что получилось смотрите на тестовом сайте http://fh7914in.bget.ru/
Как это работает.
Добавляем jQuery код в файл order-opc-new-account.tpl
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<script type="text/javascript">
$(document).ready(function() {
$.viewInput = {
'0' : $([]),
//Это имена DIVов вокруг невидимого поля
'otherField' : $('#otherField, #otherField1, #otherField2, #otherField3, #otherField4, #otherField5, #otherField6'),
};
$('#otherFieldOption').change(function() {
// Прячет это поле, если выбрана другая опция
$.each($.viewInput, function() { this.hide(); });
// Показывает поле при выборе необходимой опции
$.viewInput[$(this).val()].show();
});
});
</script>
|
Создаем дополнительное поле с выбором регистрации тегом select
|
1
2
3
4
5
6
7
8
|
<p class="required text">
<label>Выбор регистрации:</label>
<select class="dropdown" name="Items" id="otherFieldOption">
<option>Быстрая регистрация</option>
<!-- Это отобразит наше спрятанное поле -->
<option value="otherField">Полная регистрация</option>
</select>
</p>
|
И помещаем необязательные поля в div с id=”otherField”, id=”otherField1″, id=”otherField2″ и т.д. со стилем style=”display:none;”
готовый файл для версии 1.5.6.1
Вот и все, до встречи на webnewbie.ru







Евгений, а как сделать, чтобы в определённых полях уже стояли значения по умолчанию с возможностью, при желании, их изменить?
Как менять значения указано в комментариях кода файла order-opc-new-account.tpl. Тут на сайте плохо видно, скопируйте код и посмотрите его в Notepad++ сохранив с расширением tpl. А менять эти значения клиент может отредактировав все данные в личном кабинете.
Может я неудачно выразился. Я имею ввиду, когда клиент видит форму в которой, например, поле “Город” уже заполнено (по умолчанию) значением “Архангельск”. Если клиент из другого города, он может переписать это значение на своё…
А вы сначала попрактикуйтесь, а потом вопросы задавайте. Отвечу коротко-может.
Сделала,как написано. выпадают ошибки :
Имеется 7 ошибка(и):
Вы должны указать по крайней мере один номер телефона
Страна не может быть загружена с address->id_country
id_country необходим.
фамилия необходим.
имя необходим.
город необходим.
мобильный телефон необходим.
Судя по ошибке Вы ничего не сделали, даже номер телефона в настройках магазина не отключили.
почитала внимательно и все получилось. Спасибо!!!
Возникает такая же ошибка при заполнении полей. Поля скрывать не требуется, нужны все, но при их заполнении появляются ошибки, как будто они не заполнены.
В данном примере поля нужно скрыть, если читали внимательно статью, то кроме скрытия полей, заполняются значения value
Евгений, а как сделать,чтобы при гостевом отслеживании заказа страница с фразой :
Для отслеживания заказа пожалуйста укажите следующую информацию: не показывалась пользователю? В ней все равно все подставляется автоматически?
Или переформулирую- мне надо чтобы посмотреть весь заказ,включая товар,форму доставки,адреса и тд можно было сразу после подтверждения, сейчас это происходит через шаг.
Вопрос не в тему статьи. И если бы Вы поискали в интернете, то узнали бы , что для этого надо изменить шаблон guest-tracking.tpl, изменить контроллер OrderConfirmationController.php в зависимости от подключенных платежных модулей. Я рекомендую отключить гостевую покупку, если она Вам очень нужна и других альтернатив нет, то обратитесь к платным специалистам.
Евгений, подскажите: если отключить проверку индекса в админке (в настройках страны) предложенный Вами вариант будет корректно функционировать?
проверку индекс в админке не отключите. Индекс можно задать любой и скрыт его, перечитайте еще раз статью
Привет.
Сделал все по Вашим рекомендациям.
Имя и Фамилию хотел сделать необязательными.
Пишет при регистрации:
Обнаружено 2 ошибок
фамилия необходим.
имя необходим.
Значит, без имени и фамилии никак, или что-то не сделал?
версия 1.5.6.2.
Спасибо.
Не внимательно читали статью, имя и фамилия обязательные поля так как проходят дополнительную валидацию
Не подскажете как в версии 1.6.0.9 отключить необходімость вибирать область
This country requires you to choose a State.
В примере кода есть комментарии, можете скопировать код в программу Notepad++ и там вы увидите комментарии отдельным цветом.
Евгений, как ни стараюсь, не убирается –
“There is 2 Error(s):
Страна не может быть загружена с address->id_country
Неверный выбор страны”
Все уже перепробовал, помогите, пожалуйста!
Смотрите в примере значение value
Евгений, поподробнее, пожалуйста. Уже часов 12 сижу. Уже все перешерстил. Никак не получается. Выручайте, пожалуйста. Версия PrestaShop™ 1.6.0.4
Статья на писана для версии 1.5.х, но в принципе большой разницы нет. Попробуйте скопировать код примера и открыть в с помощью редактора Noteoad++ комментарии будут выделены зеленым цветом. Если и это не поможет прошу обращаться через форму обратной связи https://webnewbie.ru/contact-us. А то получается как в анекдоте про легендарных полководца Чапаева и и его помощника Петьку.
-на бронепоезде противника установлена рация, – говорит Василий Иванович.
-рация на транзисторах или на тиристорах?, – спрашивает Петька.
-Для особо тупых, повторяю, рация на бронепоезде, -отвечает Чапаев