Таблица oc_zone
Таблица oc_zone является ключевым справочником в OpenCart и содержит информацию о регионах (областях, штатах, провинциях, департаментах) внутри стран. Эти данные используются при указании адресов доставки и оплаты, а также для настройки налоговых ставок и зон доставки.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
zone_id |
int |
Уникальный идентификатор региона (первичный ключ). Автоматически инкрементируется. |
country_id |
int |
Внешний ключ, связывающий регион со страной. Ссылается на oc_country.
|
name |
varchar(128) |
Название региона на языке, указанном в language_id. Например, "California", "Московская область".
|
code |
varchar(32) |
Код региона (например, аббревиатура: "CA" для California, "SPB" для Санкт-Петербурга). Используется некоторыми платежными и транспортными системами. |
status |
tinyint(1) |
Статус региона: 1 - активен, 0 - неактивен. Неактивные регионы не отображаются в выпадающих списках на витрине магазина.
|
Как это работает
Таблица oc_zone работает в тесной связке с таблицей oc_country. При выборе страны на форме ввода адреса (при регистрации, в адресной книге, при оформлении заказа) AJAX-запрос загружает список активных регионов (status = 1) для этой страны и динамически обновляет выпадающий список "Регион / Область".
Данные из этой таблицы критически важны для корректной работы геозон (Geo Zones) в OpenCart. Геозоны позволяют назначать особые условия (налоги, доставку) не просто для всей страны, а для конкретных её частей. Например, можно установить налог 8% только для покупателей из Калифорнии (zone_id = 5), в то время как для остальных штатов налог будет другим.
Администратор может управлять регионами через панель управления в разделе "Система" → "Локализация" → "Регионы". Там можно добавлять новые регионы, редактировать существующие (например, переводить названия) и отключать их.
Пример SQL-запроса
Получить список всех активных регионов для конкретной страны (например, для России, country_id = 176) вместе с названием страны можно следующим запросом:
SELECT z.zone_id, z.name as zone_name, z.code, c.name as country_name
FROM oc_zone z
LEFT JOIN oc_country c ON (z.country_id = c.country_id)
WHERE z.country_id = 176 AND z.status = 1
ORDER BY z.name;
Смотрите также
-
таблицу
oc_country,
которая хранит справочник стран -
таблицу
oc_address,
которая используетzone_idдля адресов пользователей -
таблицу
oc_geo_zone,
которая определяет зоны для налогов и доставки на основе регионов