Автокомлит для города в новом чекауте
Поле "Город" в новом чекауте предусматривает возможность подключения стороннего плагина для поиска городов.

Для этого требуется чтобы ваш плагин подписался на событие shop-script
address_autocomplete
На вход плагин получит такой массив параметров:
$params = [ 'country' => waRequest::request('country', null, waRequest::TYPE_STRING), 'region' => waRequest::request('region', null, waRequest::TYPE_STRING), 'city' => waRequest::request('city', null, waRequest::TYPE_STRING), 'zip' => waRequest::request('zip', null), ];
Плагин должен вернуть многомерный массив городов
Пример:
[ [ 'country' => 'rus', 'region' => '04', 'city' => 'Горно-Алтайск', 'zip' => '659650' ], [ 'country' => 'rus', 'region' => '04', 'city' => 'Новоалтайск', 'zip' => '' ], ];
Даже если совпадение одно плагин должен вернуть многомерный массив. Все ключи не обязательные.
После того как результаты всех плагинов будут собраны, они перемешаются и останутся только уникальные значения.
2 ответа
1. А можно ли это вкрутить так же в бэк? При оформлении заказа из бэкенда думаю люди оценят.
2. Может стоит подумать в сторону расширить и углубить? Например, неплохо бы улицу автоподсказывать. Да и реквизиты организации/банка сейчас не составляет труда подставить ;)
3. Это не только в приложении Магазин может быть актуально. Пользователи всяких там Контакты, Команда, CRM, etc тоже вполне могут порадоваться такой возможности =)
Еще вопрос. Для чего в массиве надо возвращать страну, регион и индекс, если эти данные не учитываются при выборе города из подсказок?
И еще один.
Как плагины будут "драться" за этот хук?
кто последний в списке того и тапки
Фигвам называется. Судя по коду - собирается все от всех плагинов в единый массив =)
Всё смёрджится в один массив.
Имхо, не самое удачное решение. Думаю 2,3...N Москвы, Питера или Урюпинска в списке, несколько смутят покупателя ....
Возвращать все сразу не надо. Забыл упомянуть в статье. Все поля не обязательные. Пока все значения кроме города нигде не применяются, они были добавлены в рамках возможного масштабирования этого автокомплита.
Дублирование что-то упустил из виду. После мержа всех результатов сделаю шафл и оставлю уникальные. Но вообще чтобы не изобретать искусственный интеллект по сортировке городов, администратору магазина лучше не включать 10 плагинов автокомплита городов.
заодно о хуке 'shipping_package' - нужно выполнять событие только плагина указанного в настройках, поэтому стандартный вызов события явно не подходит.
Поэтому я и думаю, что лучше просто сделать "кто последний, того и тапки".
Пока мы в рамках региона ищем - это одно, а вот как только/если наступит перспектива того, что поиск будет вообще отвязан от входных данных (страна, регион), вот там реальные танцы с бубнами начнутся с одинаковыми названиями населенных пунктов в разных регионах/странах.
Следующий момент. Если мы автокоплитим только город - индекс отдавать вообще смысла особого нет. Ибо для большинства городов, без улицы будет отдаваться индекс центральной почты (если будет). Пытаться этот индекс в дальнейшем куда-то запихнуть в рамках оформления заказа - так себе идея.
Город уже отвязан от входных данных. Можно начать поиск с него. Поэтому ваш плагин может к каждому городу прикрепить страну и регион. Зип опционально для маленьких городов.
Так мой плагин прикрепляет эти данные, но только еще вчера они нигде не учитывались. Что-то поменялось?