Если нужно массово переносить статьи, восстанавливать блог после миграции или быстро загружать контент без ручного ввода через админку, удобнее всего понимать, в какие таблицы и какие поля пишет OkayCMS.
На практике статья в блоге OkayCMS хранится не в одной таблице, а сразу в нескольких. Основной контент, SEO, категории и рекомендуемые товары распределены по разным сущностям. Ниже — понятная инструкция, где всё разложено по полочкам.
Какие таблицы используются для статьи блога
В этой структуре OkayCMS используются 4 основные таблицы:
ok_blog
ok_lang_blog
ok_blog_categories_relation
ok_related_blogs
Что делает каждая таблица
ok_blog — основная таблица статьи. Здесь хранятся служебные данные, настройки видимости, дата, картинка, рейтинг, время чтения и основная текстовая часть.
ok_lang_blog — языковая таблица статьи. Используется для мультиязычности. В ней лежат заголовок, SEO и текст статьи для конкретного языка.
ok_blog_categories_relation — связь статьи с категориями блога. Одна статья может быть привязана к одной или нескольким категориям.
ok_related_blogs — связь статьи с товарами. Используется для блока «Рекомендуемые товары» в записи блога.
Все поля статьи, которые используются в OkayCMS
1. Таблица ok_blog
Это главная таблица статьи.
id
Уникальный идентификатор статьи.
- Тип: int
- Обязательное: да
- Особенность: AUTO_INCREMENT
author_id
ID автора статьи.
- Тип: int
- Обязательное: нет
- Связь: с таблицей авторов ok_authors
name
Название статьи.
- Тип: varchar(512)
- Обязательное: да
url
ЧПУ статьи, адрес страницы.
- Тип: varchar(255)
- Обязательное: да
- Важно: должен быть уникальным
geotekstil-dlya-dorozhnogo-stroitelstva
meta_title
SEO-заголовок страницы.
- Тип: varchar(512)
- Обязательное: да
meta_keywords
SEO-ключевые слова.
- Тип: varchar(512)
- Обязательное: да
meta_description
SEO-описание страницы.
- Тип: varchar(512)
- Обязательное: да
annotation
Краткий анонс статьи.
- Тип: mediumtext
- Обязательное: да
Обычно используется в списке статей, превью блога и карточках на странице категории.
description
Полный текст статьи.
- Тип: mediumtext
- Обязательное: да
В это поле можно записывать HTML.
visible
Активность статьи.
- Тип: tinyint(1)
- Обязательное: да
- 1 — статья видима
- 0 — статья скрыта
show_table_content
Показывать ли оглавление статьи.
- Тип: tinyint(1)
- Обязательное: да
- 1 — показывать
- 0 — не показывать
date
Дата публикации статьи.
- Тип: timestamp
- Обязательное: нет
'2026-03-17 12:00:00'
image
Имя изображения статьи.
- Тип: varchar(255)
- Обязательное: да
Обычно здесь хранится имя файла, а не полный путь.
geotekstil-statya.jpg
last_modify
Дата последнего изменения.
- Тип: timestamp
- Обязательное: да
- Заполняется автоматически
main_category_id
Главная категория статьи.
- Тип: int
- Обязательное: нет
Даже если статья дополнительно привязывается через таблицу связей, главная категория обычно записывается и сюда.
read_time
Время чтения статьи в минутах.
- Тип: int
- Обязательное: нет
5
updated_date
Дата обновления статьи.
- Тип: date
- Обязательное: нет
'2026-03-17'
rating
Рейтинг статьи.
- Тип: float(3,1)
- Обязательное: нет
- Значение по умолчанию: 0.0
5.0
votes
Количество голосов.
- Тип: int
- Обязательное: нет
- Значение по умолчанию: 0
2. Таблица ok_lang_blog
Эта таблица хранит языковую версию статьи.
lang_id
ID языка.
- Тип: int
- Обязательное: да
Точное значение зависит от содержимого ok_languages.
blog_id
ID статьи из таблицы ok_blog.
- Тип: int
- Обязательное: да
name
Название статьи для выбранного языка.
- Тип: varchar(512)
- Обязательное: да
meta_title
SEO title для конкретного языка.
- Тип: varchar(512)
- Обязательное: да
meta_keywords
SEO keywords для конкретного языка.
- Тип: varchar(512)
- Обязательное: да
meta_description
SEO description для конкретного языка.
- Тип: varchar(512)
- Обязательное: да
annotation
Анонс статьи для конкретного языка.
- Тип: mediumtext
- Обязательное: да
description
Полный текст статьи для конкретного языка.
- Тип: mediumtext
- Обязательное: да
3. Таблица ok_blog_categories_relation
Эта таблица отвечает за привязку статьи к категориям.
post_id
ID статьи.
- Тип: int
- Обязательное: да
category_id
ID категории блога.
- Тип: int
- Обязательное: да
position
Позиция категории в сортировке.
- Тип: int
- Обязательное: да
- По умолчанию: 0
4. Таблица ok_related_blogs
Эта таблица привязывает товары к статье.
post_id
ID статьи.
- Тип: int
- Обязательное: да
related_id
ID товара.
- Тип: int
- Обязательное: да
position
Позиция товара в сортировке.
- Тип: int
- Обязательное: да
- По умолчанию: 0
Какие поля реально приходят из формы статьи в админке
При сохранении статьи в админке OkayCMS используются такие поля:
id
author_id
read_time
name
date
rating
votes
updated_date
url
visible
show_table_content
meta_title
meta_keywords
meta_description
annotation
description
categories[]
image
delete_image
related_products[]
То есть админка передаёт основные данные статьи, SEO, анонс, полный текст, категории, изображение и рекомендуемые товары.
Как правильно добавлять статью через MySQL
Лучше делать это в 4 шага:
- Добавить статью в ok_blog.
- Получить id новой статьи через LAST_INSERT_ID().
- Добавить языковую версию в ok_lang_blog.
- Привязать статью к категории и товарам через таблицы связей.
Готовый пример MySQL для одной статьи
START TRANSACTION;
SET @author_id = 1;
SET @lang_id = 1;
SET @main_category_id = 3;
SET @related_product_id = 25;
SET @name = 'Геотекстиль для дорожного строительства: как выбрать материал правильно';
SET @url = 'geotekstil-dlya-dorozhnogo-stroitelstva-kak-vybrat-material-pravilno';
SET @meta_title = 'Геотекстиль для дорожного строительства: как выбрать материал правильно';
SET @meta_keywords = 'геотекстиль, геотекстиль для дороги, дорожное строительство, дорнит';
SET @meta_description = 'Подробная статья о выборе геотекстиля для дорожного строительства: плотность, разрывная нагрузка, применение и ошибки.';
SET @annotation = 'Разбираем, какой геотекстиль подходит для дорожного строительства, на какие характеристики смотреть и каких ошибок избегать при выборе.';
SET @description = '<h2>Зачем нужен геотекстиль в дорожном строительстве</h2><p>Геотекстиль разделяет слои основания, повышает стабильность конструкции и помогает продлить срок службы дорожного покрытия.</p><h2>На что смотреть при выборе</h2><p>Основные параметры: плотность, разрывная нагрузка, водопроницаемость и тип сырья.</p><h2>Типичные ошибки</h2><p>Частая ошибка — выбирать материал только по цвету, а не по техническим характеристикам.</p>';
SET @visible = 1;
SET @show_table_content = 1;
SET @date_value = '2026-03-17 12:00:00';
SET @image = 'geotekstil-dlya-dorozhnogo-stroitelstva.jpg';
SET @read_time = 6;
SET @updated_date = '2026-03-17';
SET @rating = 5.0;
SET @votes = 1;
INSERT INTO ok_blog (
author_id,
name,
url,
meta_title,
meta_keywords,
meta_description,
annotation,
description,
visible,
show_table_content,
date,
image,
main_category_id,
read_time,
updated_date,
rating,
votes
) VALUES (
@author_id,
@name,
@url,
@meta_title,
@meta_keywords,
@meta_description,
@annotation,
@description,
@visible,
@show_table_content,
@date_value,
@image,
@main_category_id,
@read_time,
@updated_date,
@rating,
@votes
);
SET @blog_id = LAST_INSERT_ID();
INSERT INTO ok_lang_blog (
lang_id,
blog_id,
name,
meta_title,
meta_keywords,
meta_description,
annotation,
description
) VALUES (
@lang_id,
@blog_id,
@name,
@meta_title,
@meta_keywords,
@meta_description,
@annotation,
@description
);
INSERT INTO ok_blog_categories_relation (
post_id,
category_id,
position
) VALUES (
@blog_id,
@main_category_id,
0
);
INSERT INTO ok_related_blogs (
post_id,
related_id,
position
) VALUES (
@blog_id,
@related_product_id,
0
);
COMMIT;
Пример без рекомендуемых товаров
Если не нужно привязывать товар, просто убери этот блок:
INSERT INTO ok_related_blogs (
post_id,
related_id,
position
) VALUES (
@blog_id,
@related_product_id,
0
);
Что обязательно проверить перед импортом
- Существует ли автор. Поле author_id должно ссылаться на существующую запись в ok_authors.
- Существует ли язык. Поле lang_id должно быть в ok_languages.
- Существует ли категория. Поля main_category_id и category_id должны быть в ok_blog_categories.
- Уникален ли URL. Поле url не должно дублироваться у других статей.
- Загружена ли картинка. Если в поле image записано имя файла, этот файл должен уже лежать в правильной папке сайта.
Практический вывод
Для корректной записи статьи в OkayCMS используются основные поля статьи, SEO-поля, анонс, полный текст, категория, рекомендуемые товары и языковая версия записи.
Если делать импорт напрямую в MySQL, нужно заполнять не только ok_blog, но и ok_lang_blog, иначе мультиязычная часть статьи может работать некорректно.
Полный список используемых полей
-- ok_blog
id
author_id
name
url
meta_title
meta_keywords
meta_description
annotation
description
visible
show_table_content
date
image
last_modify
main_category_id
read_time
updated_date
rating
votes
-- ok_lang_blog
lang_id
blog_id
name
meta_title
meta_keywords
meta_description
annotation
description
-- ok_blog_categories_relation
post_id
category_id
position
-- ok_related_blogs
post_id
related_id
position