Ubercart. Реализация самовывоза на форме оформления заказа

Аватар пользователя z80stas z80stas 25 ноября 2017 в 13:15
1

Всем привет!

Недавно, реализовывая проект интернет-магазина на движке Ubercart, столкнулся с тем, что по дефолту на форме оформления заказа (cart/checkout) не предусмотрен такой вариант как Самовывоз.

Неделю я мучил поисковые системы в попытках найти готовое решение. Не нашел. В итоге решил задачу следующим образом:

1. Устанавливаем и активируем модуль "Extra Fields Checkout Pane"

2. Идем в настройки магазина "Страны и адреса" (admin/store/settings/countries/fields)

3. На вкладке "Поля адреса" жмем "Add an address field"
3.1 Задаем метку поля. Я обозвал поле "Способ получения заказа"
3.2 Задаем имя поля, в моем случае я задал имя "samvyvoz", а префикс "ucxf_" добавился автоматически. На выходе полное название поля получилось "ucxf_samvyvoz"
3.3 Тип поля выбираем "Выбор из списка"
3.4 В поле "Значение" пишем
Доставка
Самовывоз

4. Жмем "Сохранить"

5. Создаем файл *.js со следующим скриптом:

document.addEventListener('DOMContentLoaded', function(){
var inputs = [
'field-delivery_country',
'field-delivery_city',
'field-delivery_street1',
'field-delivery_postal_code'
];

document.getElementById("edit-panes-delivery-address-delivery-ucxf-samvyvoz").addEventListener('change', function()
{
var e = document.getElementById('edit-panes-delivery-address-delivery-ucxf-samvyvoz');
if( e.options[e.selectedIndex].value == 'Самовывоз' )
 inputs.forEach( function( id ) {
   console.log( document.getElementsByClassName( id ) );
   document.getElementsByClassName( id )[0].style.visibility = "hidden";
  });
else
 inputs.forEach( function( id ) {
   document.getElementsByClassName( id )[0].style.visibility = "visible";
  });
});
});

ВАЖНО! В скрипте вместо "samvyvoz" вы указываете то имя поля, которое вы задали.

6. Объевите скрипт в *.info фале вашей темы.

Но этом все :)

Комментарии

Аватар пользователя VasyOK VasyOK 25 ноября 2017 в 18:10

Вы не могли бы скинуть ссылку на сайт с вот этим вот или дать скриншоты процесса заказа.
Я не понимаю почему ваш способ лучше чем воспользоваться flat_rate.

Аватар пользователя z80stas z80stas 28 ноября 2017 в 17:21

Вот скрины. Суть доработки проста, во-первых дать пользователю возможность выбрать самовывоз, напомню по дефолту есть только доставка. Флэт рэйт тут не спасет. Поверьте, за неделю непрерывного брэйншторма по этому вопросу, флэт рэйт был изучен вдоль и поперек, и не дает он простого и понятного пользователю решения. Во-вторых мой скрипт скрывает поля: страна, город, адрес и почтовый индекс. Кстати, надо еще зайти в настройки, и сделать эти поля необязательными для заполнения.