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