Ответить Новая тема Новый опрос 
 Убираем поля адреса из формы OPC для PS 1.4
Muerto
Новичок
Сообщений: 17
Регистрация: 07-02-2011


08-02-2011 17:06
Вот я тут настраиваю Prestashop 1.4, с использованием оформления заказа на одной странцие - one page checkout, OPC.

И т.к. магазин планируется к работе по Москве и Петербургу, по крайней мере на первом этапе, мне в нем нафиг не нужен ручной ввод города, а так же выпадающий список для стран, пускай даже и рудиментированный до одного варианта. Так же лично у меня ничего кроме раздражения не вызывает возможность указывать второй (invoice) адрес.

Для достижения цели необходимо проделать следующее (на свой страх и риск, ессно, учитывая, что с обновлением потом будут проблемы скорее всего):

Я старался побольше элеметнов просто скрыть, вместо того, чтобы удалить. Наивно полагая, что это приведет к менее плачевным последствиям, если что.

В файле order-opc-address.tpl (темплейт блока адресов для OPC-чекаута зарегистрированных пользователей) дописать слова hidden в двух местах, вот так:

Код:
<p class="checkbox hidden">
            <input type="checkbox" name="same" id="addressesAreEquals" value="1" onclick="updateAddressesDisplay();" {if $cart->id_address_invoice == $cart->id_address_delivery || $addresses|@count == 1}checked="checked"{/if} />
            <label for="addressesAreEquals">{l s='Use the same address for billing.'}</label>
        </p>


Код:
<ul class="address alternate_item hidden" id="address_invoice">
            <li class="address_title">{l s='Your billing address'}</li>
            <li class="address_company"></li>
            <li class="address_name"></li>
            <li class="address_address1"></li>
            <li class="address_address2"></li>
            <li class="address_city"></li>
            <li class="address_country"></li>
            <li class="address_update"><a href="{$link->getPageLink('address.php', true)}?id_address={$address.id_address|intval}&amp;back=order-opc.php{if isset($back) && $back}&mod={$back}{/if}" title="{l s='Update'}">{l s='Update'}</a></li>
        </ul>


В файле order-opc.tpl

Дописать hidden и значение по умолчанию в город:
Код:
<p class="required text hidden">
                                <label for="city">{l s='City'}</label>
                                <input type="text" class="text" name="city" id="city" value="default city" />
                                <sup>*</sup>
                            </p>


Чтобы значение по умолчанию не указывать, надо исключить city из обязательных полей в файле Address.php, кажется.

Дописать hidden в выбор страны:

Код:
<p class="required select hidden">
                                <label for="id_country">{l s='Country'}</label>
                                <select name="id_country" id="id_country">
                                    <option value="">-</option>
                                    {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>
                                <sup>*</sup>
                            </p>


На этом этапе я было решил, что счастье должно быть достигнуто, но не тут то было - поля из формы исчезли, но форма не валидировалась, ругаясь на то, что поля не заполнены. Хотя на самом то деле оба поля имеют значения по-умолчанию.

Собака тут зарыта js-скрипте, который и валидирует форму, об нем чуть далее.

Последняя манипуляция в текущем файле, закомментировать чекбокс:
Код:
<!--<p class="checkbox is_customer_param">
                                <input type="checkbox" name="invoice_address" id="invoice_address" />
                                <label for="invoice_address"><b>{l s='Please use another address for invoice'}</b></label>
                            </p>-->


Файл order-opc.js

Нужно заставить его валидировать скрытые поля.

Для этого из строк (в районе 560-х и 570-х)

Код:
$('#opc_account_form input:visible').each(function() {


и

Код:
$('#opc_account_form select:visible').each(function() {


нужно убрать подстроки ":visible".

После этого все будет нормально валидироваться.

Вроде ничего не забыл.

Если кто знает, как сделать лучше, буду благодарен, поиск по этому вопросу результатов не дал.

К вопросу об обязательных полях.

Их можно убрать в файле Address.php, из строки

Код:
protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'city');


Замечу, что город мне убрать удалось (после этого у него можно дефолтное значение из формы удалить), а вот страну - нет. После ее удаления при сабмите формы выскакивает некая js-ошибка про какой-то XHTTP или вроде того.

Но мне страна по-умолчанию не мешает, так что где тут зарыта собака, мне не интересно, главное что в форме для пользователя она глаза не мозолит.

Вот примерно так.


Сообщение отредактировано Muerto 08-02-2011 13:07 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Muerto
Новичок
Сообщений: 17
Регистрация: 07-02-2011


08-02-2011 17:12
А, и еще, после того, как удается спрятать страну и город встает вопрос - как выбрать Москву или Петербург в моем случае.

Это делается без залезания в код. В админке для страны надо указать что она имеет регионы (state). В регионы надо добавить Москву и Петербург.

После описанных манипуляций гостевая форма чекаута выгялдит примерно так, как в аттаче (в нем еще пара и так необязатеьлных полей скрыта, и оставлена зачем-то почтовый индекс, который тоже надо будет скрыть).


Изображения:
form.GIF - Размер файла24.49KB, Скачиваний: 882 (Нажмите для увеличения)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Muerto
Новичок
Сообщений: 17
Регистрация: 07-02-2011


10-02-2011 04:19
Забыл еще, что надо закомментировать вот этот кусок в js файле:

Код:
html += '<h4>'+txtInvoiceAddress+'</h4>';
                        if ($('#company'+($('#invoice_address').is(':checked') ? '_invoice' : '')).val() != "")
                            html += '<b>'+$('#company'+($('#invoice_address').is(':checked') ? '_invoice' : '')).val()+'</b><br />';
                        html += '<b>'+$('#customer_firstname').val()+' '+$('#customer_lastname').val()+'</b><br />';
                        html += $('#address1'+($('#invoice_address').is(':checked') ? '_invoice' : '')).val()+'<br />';
                        html += $('#postcode'+($('#invoice_address').is(':checked') ? '_invoice' : '')).val()+' ';
                        html += $('#city'+($('#invoice_address').is(':checked') ? '_invoice' : '')).val()+'<br />';
                        html += $('#id_country'+($('#invoice_address').is(':checked') ? '_invoice' : '')+' option:selected').html()+'<br />';
                        if ($('#id_state'+($('#invoice_address').is(':checked') ? '_invoice' : '')).is(':visible'))
                            html += $('#id_state'+($('#invoice_address').is(':checked') ? '_invoice' : '')+' option:selected').html()+'<br />';


Чтобы адрес не отображался во время выбора оплаты.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос