Описание многоуровневой системы ведения адресации
В данной системе предусмотрено неограниченное количество элементов адресации (страны, регионы, города, улицы).
В зависимости от нужд провайдера можно настроить свое собственное дерево адресации. Например: Страна → Район → Город → Дом.
В системе адресации всегда присутствуют два элемента адресации: конечная точка подключения (bild_id - дом) и родительский элемент геолокации (улица, район и проч.).
Элементы геолокации имеют субпараметры, которые позволяют детализировать их сущность. Например, равноправные элементы геолокации такие как: Улица, Переулок, Бульвар или Город, Село, ПГТ.
Элементы системы адресов связаны между собой и не подлежат изменению после создания.
Схема адресов
- Украина (страна)
- Киевская обл (регион)
- Киев (город)
- Хрещатик (улица)
- 32 (дом)
- Хрещатик (улица)
- Киев (город)
- Киевская обл (регион)
Возможности
Пользователь (провайдер) сам задает схему адресов. Структура - линейная. Из обязательных уровней только дом (последний уровень, который соединяет новые адреса с уже существующей таблицей builds.
Для работы используются следующие таблицы:
address_levels - Уровни структуры адресов. Пример таблицы:
level | level_name |
---|---|
1 | Страна |
2 | Область |
3 | Город |
4 | Улица |
5 | Дом |
address_values - ноды (узлы) адреса. (Пример таблицы со значениями, заполнено 5 адресов, 3 дома на улице Хрещатик и 2 дома на улице Шевченко)
id | level_id | parrent_id | value |
---|---|---|---|
1 | 1 | 0 | Украина |
2 | 2 | 1 | Киевская область |
3 | 3 | 2 | Киев |
4 | 4 | 3 | Хрещатик |
5 | 5 | 4 | 30 |
6 | 5 | 4 | 31 |
7 | 5 | 4 | 32 |
8 | 4 | 3 | Шевченко |
9 | 5 | 8 | 1 |
10 | 5 | 8 | 2 |
address_main - связь между деревом адресов и location_id.
address_id | location_id |
---|---|
5 | 1 |
6 | 2 |
7 | 3 |
9 | 4 |
10 | 5 |
Шаблон изменения и отображения адреса в веб форме планирую заменить строкой с полным адресом и кнопкой изменения. При нажатии открывается модальное окно с выбором адреса, после закрытия модального окна в форму подставляется location_id выбранного адреса.
Для отображения в документах и шаблонах данные можно получить с помощью user→info() , имя ключей хеша берется из таблицы уровней.
Отличия
В отличии от старой структуры (когда для каждого уровня создается своя таблица), для древовидных адресов недоступны следующие функции:
Нельзя сделать JOIN к другим таблицам (юзерс, интернет и тд)
Нельзя использовать в резулт_формере
Нельзя подключить к users_list
Нельзя подключить к internet_list
Нельзя вывести в виде таблицы
Нет доступа к всему массиву адресов, только по одному.