Описание многоуровневой системы ведения адресации
В данной системе предусмотрено неограниченное количество элементов адресации (страны, регионы, города, улицы).
В зависимости от нужд провайдера можно настроить свое собственное дерево адресации. Например: Страна → Район → Город → Дом.
В системе адресации всегда присутствуют два элемента адресации: конечная точка подключения (bild_id - дом) и родительский элемент геолокации (улица, район и проч.).
Элементы геолокации имеют субпараметры, которые позволяют детализировать их сущность. Например, равноправные элементы геолокации такие как: Улица, Переулок, Бульвар или Город, Село, ПГТ.
Элементы системы адресов связаны между собой и не подлежат изменению после создания.
Схема адресов
- Украина (страна)
- Киевская обл (регион)
- Киев (город)
- Хрещатик (улица)
- 32 (дом)
- Хрещатик (улица)
- Киев (город)
- Киевская обл (регион)
Возможности
Пользователь (провайдер) сам задает схему адресов. Структура - линейная. Из обязательных уровней только дом (последний уровень, который соединяет новые адреса с уже существующей таблицей builds.
Для работы используются таблицы (названия приблизительные):
levels - Уровни структуры адресов (например 1-Страна, 2-Город, 3-Улица, 4-Дом ). Для каждого уровня указывается название уровня и имя переменной (для использования в шаблонах)
values - ноды (узлы) адреса. Сохранены в виде дерева. Каждое значение имеет 2 параметра - уровень и родительский элемент (ссылка на элемент более высокого уровня). Для примера значение "улица Бандеры" будет иметь уровень 3 (улица) и ссылку на родительский элемент "город Коломыя"
main - связь между деревом адресов и location_id. В таблице сохраняется location_id, id последней ноды адреса. (айди дома, если дом последний уровень).
Шаблон изменения и отображения адреса в веб форме планирую заменить строкой с полным адресом и кнопкой изменения. При нажатии открывается модальное окно с выбором адреса, после закрытия модального окна в форму подставляется location_id выбранного адреса.
Для отображения в документах и шаблонах данные можно получить с помощью user→info() , имя ключей хеша берется из таблицы уровней.