haanastasia
@haanastasia
джуниор программист

Как сделать свойство «местоположение» в 3 отдельных списка?

Добрый день.
В битриксе есть список свойств заказа (по сути это поля которые заполняет пользователь при оформлении заказ). И существует в этом списке свойство с типом данных (местоположение - location). Сейчас это свойство отображается единым полем, в котором одновременно надо заполнить страну, город и улицу. Можно ли это поле сделать в три списка? Т.е. в первом списке выбираем страну, и в зависимости от выбора формируется список город, а дальше уже улица.
  • Вопрос задан
  • 510 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза
Если заглянуть в базу данных, Местоположения 2.0 — это фактически три таблицы.
Буквально на днях разгребал всё для распаковки на D7 под задачу.

Главный список — в таблице b_sale_location, которая фактически ОГРОМНАЯ куча местоположений, сваленных в одну кашу (страны, регионы, города, деревни и улицы).

Главные узлы:
--- Символьный код — колонка CODE. Если чистым запросом прочитать заказ и местоположение, мы нередко увидим не location_id, а location_code. Это не привязанный к почтовому индексу, строка вида "0000028023"

--- Родительство (например, город относится к области) указывается в столбце PARENT_ID
Он либо указан, либо ноль

--- Тип узла (например, город это, область или страна) указывается в столбце TYPE_ID
В таблице b_sale_loc_type - расшифровка в кодах:
* 1 COUNTRY
* 2 COUNTRY_DISTRICT
* 3 REGION
* 4 SUBREGION
* 5 CITY
* 6 VILLAGE
* 7 STREET


--- Глубина погружения (грубо говоря — ориентир, сколько родителей вверх) указана в столбце DEPTH_LEVEL (самый верхний узел в своей ветке имеет глубину == 1)

=====
В этой куче свой плюс: указав в заказе просто символьный код "00000705506" (CODE узла-улицы) мы тем самым, раскрутив цепочку вверх до DEPTH_LEVEL == 1 получаем абсолютно всё: от улицы до страны. Что в принципе и делается в текущей версии заказов.
=====

Теперь, когда есть вводная можете прикинуть её на свою задачу.

Вам нужно три выборки:
• первая — по узлам первого уровня ЛИБО соответствующим TYPE_ID (страна);
• вторая — те регионы, кто родителем имеет выбранную страну (если погружаться на регион);
• третья — те города, которые родителем имеют выбранный регион.

Как-то так =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы