SLOT-H: Модуль Geo



Модуль Geo отвечает за географические данные: страны, города, регионы, языки, валюты и часовые пояса. В демо-версии представлена урезанная функциональность, достаточная для работы базовых сценариев. В полной версии модуль включает все компоненты для работы с геоданными любого масштаба.




Состав модуля в демо-версии



Демо-версия содержит минимальный набор для демонстрации мультиязычности и настроек проекта:

Языки



Управление языками, используемыми в системе. В демо-версии доступны базовые языки (русский, английский, французский, испанский, итальянский, немецкий). Поддерживается включение и отключение языков для конкретного проекта.

Часовые пояса



Список доступных часовых поясов с их смещением относительно UTC. Используется для настройки времени в проектах и для пользователей.

Таблицы демо-версии



- `languages` - языки
- `t_languages` - переводы языков
- `timezones` - часовые пояса

Структура модуля в демо-версии




Modules/Geo/
├── Bootstrap.php          # Загрузка модуля
├── Crud.php               # Права доступа
├── Preloader.php          # Предзагрузка (авторизация)
└── Models/
    └── DbTables/
        ├── Language.php
        ├── TLanguage.php
        └── Timezone.php





Полная версия модуля



В полной версии модуль Geo включает все компоненты для работы с географическими данными.

Структура модуля в полной версии



Modules/Geo/
├── Bootstrap.php          # Загрузка модуля
├── Crud.php               # Права доступа
├── Preloader.php          # Предзагрузка (авторизация)
├── Controllers/           # Контроллеры (административная часть)
│   ├── Country.php        # Управление странами
│   ├── Currency.php       # Управление валютами
│   ├── CustomsZone.php    # Управление таможенными зонами
│   └── Language.php       # Управление языками
├── Models/                # Модели данных
│   └── DbTables/          # Описание таблиц
│       ├── City.php
│       ├── Country.php
│       ├── Currency.php
│       ├── CustomsZone.php
│       ├── Language.php
│       ├── State.php
│       ├── TCountry.php
│       ├── TCurrency.php
│       ├── TCustomsZone.php
│       ├── Timezone.php
│       ├── TLanguage.php
│       ├── TState.php
│       ├── TTimezone.php
│       └── Voice.php
├── Public/                # CSS, JS
│   ├── css/
│   │   └── Project_51/
│   │       ├── Country/
│   │       │   ├── edit.css
│   │       │   └── index.css
│   │       └── Language/
│   │           └── index.css
│   └── js/
│       └── Project_51/
│           ├── Country/
│           │   └── edit.js
│           ├── Currency/
│           │   └── edit.js
│           ├── CustomsZone/
│           │   └── edit.js
│           └── Language/
│               ├── edit.js
│               └── index.js
└── Views/                 # Шаблоны
    └── Project_51/
        ├── Country/
        │   ├── edit.phtml
        │   └── index.phtml
        ├── Currency/
        │   ├── edit.phtml
        │   └── index.phtml
        ├── CustomsZone/
        │   ├── edit.phtml
        │   └── index.phtml
        └── Language/
            ├── edit.phtml
            └── index.phtml




Дополнительные таблицы в полной версии



- `city_` - города (шардирование по странам)
- `countries` - страны
- `counties` - округа (административные единицы)
- `currency` - валюты
- `customs_zones` - таможенные зоны
- `states` - регионы (штаты, области, кантоны)
- `t_countries` - переводы стран
- `t_currencies` - переводы валют
- `t_customs_zones` - переводы таможенных зон
- `t_timezones` - переводы часовых поясов
- `voices` - голосовые модели
- `zips` - почтовые индексы (по всему миру)
- `country_v1v2` - соответствие между двумя гео-базами




Две гео-базы



В полной версии используется две гео-базы:

1. Первая база содержит города с названиями на языке страны (русский, китайский, английский и т.д.) с привязкой к регионам.

2. Вторая база содержит города с английскими названиями, без привязки к регионам, но с географическими координатами.

Переключение между базами осуществляется через конфигурацию проекта.

Города хранятся в таблицах `city_
`, шардированных по странам. Это позволяет работать с миллионами записей без потери производительности.




Административная часть



Контроллеры модуля Geo предназначены только для административной части. Они позволяют управлять странами, валютами, таможенными зонами и языками через интерфейс администратора.

Города и регионы не имеют собственных контроллеров в полной версии, так как они не редактируются вручную (миллионы записей). Они используются как справочные данные для других модулей.




Мультипроектность



Модуль Geo, как и любой другой модуль системы, может работать одновременно на неограниченное количество проектов. Каждый проект может иметь свои настройки языков и валют, при этом геоданные остаются общими для всей системы.




Переход от демо-версии к полной



Демо-версия содержит только языки и часовые пояса. Полная версия включает все географические данные.

Переход от демо-версии к полной не требует изменения кода. Достаточно добавить недостающие таблицы и классы DbTables. Ядро системы уже содержит всю необходимую логику для работы с географическими данными.

Модуль Geo демонстрирует, как один модуль может быть представлен в урезанном виде (для демонстрации) и в полном (для продакшена), без изменения архитектуры ядра.




Что дальше?



- ➡️ Раздел 14. Создание модуля
- ➡️ Раздел 15. Структура базы данных
- ➡️ Раздел 16. Принципы ORM