Таблица oc_category_description
Таблица oc_category_description является одной из ключевых таблиц для реализации мультиязычности в OpenCart. Она предназначена для хранения всех текстовых данных категорий (названий, описаний, мета-тегов) на разных языках, которые установлены в системе.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
category_id |
int |
Идентификатор категории. Внешний ключ, который связывает описание с основной записью категории в таблице oc_category.
|
language_id |
int |
Идентификатор языка. Внешний ключ, который связывает описание с конкретным языком из таблицы oc_language. Для каждой категории существует столько записей в этой таблице, сколько языков установлено в магазине.
|
name |
varchar(255) |
Название категории на конкретном языке. Это поле является обязательным и отображается в меню, хлебных крошках и на странице самой категории. |
description |
text |
Полное описание категории. Поддерживает HTML-разметку. Отображается на странице категории между заголовком и списком товаров. Может быть пустым. |
meta_title |
varchar(255) |
Заголовок (тег title) для страницы категории в браузере и в результатах поисковых систем. Если не заполнен, обычно используется значение из поля name.
|
meta_description |
varchar(255) |
Мета-описание страницы категории. Краткое описание, которое часто отображается в сниппете под ссылкой в результатах поиска. |
meta_keyword |
varchar(255) |
Мета-ключевые слова для страницы категории. В современной SEO-практике это поле имеет минимальное значение, но сохраняется для обратной совместимости. |
Как это работает
При создании новой категории в админ-панели OpenCart сначала создается запись в основной таблице oc_category, где хранятся общие, не зависящие от языка данные (ID родительской категории, порядок сортировки, статус и др.). Этой записи присваивается уникальный category_id.
Затем для каждого активного языка в системе создается отдельная запись в таблице oc_category_description с этим category_id и language_id соответствующего языка. Это позволяет администратору заполнить название, описание и мета-теги категории для каждого языка магазина независимо.
Когда пользователь заходит на сайт, система определяет его язык (через настройки браузера, куки или выбор вручную) и при отображении категорий подставляет текстовые данные из oc_category_description для соответствующего language_id.
Таким образом, связка таблиц oc_category и oc_category_description является классическим примером реализации EAV (Entity-Attribute-Value) паттерна для поддержки мультиязычности, где oc_category - это сущность (Entity), а oc_category_description - её атрибуты (Attribute) на разных языках.
Пример SQL-запроса
Выбрать все русскоязычные описания категорий, отсортированные по названию, можно следующим запросом:
SELECT cd.*, c.sort_order, c.status
FROM oc_category_description cd
LEFT JOIN oc_category c ON (cd.category_id = c.category_id)
LEFT JOIN oc_language l ON (cd.language_id = l.language_id)
WHERE l.code = 'ru'
ORDER BY cd.name;
Смотрите также
-
таблицу
oc_category,
которая хранит основную, не зависящую от языка информацию о категориях -
таблицу
oc_language,
которая содержит список активных языков магазина -
таблицу
oc_product_description,
которая по тому же принципу хранит описания товаров