Переводы раздела инфоблока состоят из двух частей: стандартные поля раздела и
пользовательские поля (UF_*). Они хранятся в разных таблицах.
Стандартные поля раздела
Поля NAME, DESCRIPTION, ACTIVE и другие переводимые атрибуты
раздела записываются в таблицу fan_translator_iblock_section через ORM-класс
Modulemarket\Translator\Iblock\SectionTable.
Ключ записи: ID раздела + LANGUAGE_ID + SITE_ID
(при включённом разделении по сайтам).
Пользовательские поля раздела
Таблица переводов UF — mm_ut_iblock_{ID}_section, где {ID} —
числовой идентификатор инфоблока. Для сущности IBLOCK_7_SECTION таблица будет
mm_ut_iblock_7_section.
Исходные значения UF по-прежнему лежат в системной таблице 1С-Битрикс:
b_uts_iblock_{ID}_section (поле связи — VALUE_ID = ID раздела).
Структура таблицы mm_ut_*
| Колонка | Назначение |
|---|---|
VALUE_ID |
ID раздела (связь с b_uts_*.VALUE_ID и b_iblock_section.ID) |
SITE_ID |
Идентификатор сайта (2 символа) |
LANGUAGE_ID |
Код языка перевода (2 символа) |
UF_* |
Колонки только для переводимых строковых UF (создаются при добавлении поля) |
Примечание. Имя таблицы возвращает метод CFanTranslator::getTrUtsTableName('IBLOCK_N_SECTION').
Колонки UF добавляются классом Modulemarket\Translator\UserField\Table::create()
только если isTranslatableUserField() вернул true.
Сохранение в режиме перевода
При обновлении раздела в режиме перевода вызывается
CFanTranslator::IblockSection_UpdateTranslations():
- Отбираются только поля с префиксом
UF_и строковымBASE_TYPE. - Значения записываются в
mm_ut_iblock_{ID}_sectionпо ключуVALUE_ID + LANGUAGE_ID + SITE_ID(обновление или вставка строки). - Стандартные поля раздела сохраняются в
fan_translator_iblock_section. - Основная запись в
b_iblock_sectionиb_uts_*в этом режиме для переводимых данных не изменяется.
Множественные UF
Для множественных строковых полей (MULTIPLE = Y) отдельная UTM-таблица переводов
не создаётся. Все значения хранятся в одной колонке таблицы mm_ut_*
в виде сериализованного PHP-массива (функция serialize()).
// Упрощённая логика при сохранении (include.php, IblockSection_UpdateTranslations)
$val = is_array($ufValue)
? serialize($ufValue)
: $ufValue;
// INSERT / UPDATE в mm_ut_iblock_N_section
При чтении массив восстанавливается через unserialize() в
FCUserTypeManager::GetUserFieldsWithValues().
Примечание. Для типа customhtml с множественностью перед сериализацией
значения могут подготавливаться классом FCustomTypeHtml.
Чтение данных (COALESCE)
При выборке UF раздела в режиме перевода выполняется объединение основной и переводческой таблиц:
SELECT COALESCE(FUTS.UF_NAME, BUTS.UF_NAME) AS UF_NAME FROM b_uts_iblock_N_section BUTS LEFT JOIN mm_ut_iblock_N_section FUTS ON BUTS.VALUE_ID = FUTS.VALUE_ID AND FUTS.LANGUAGE_ID = 'en' AND FUTS.SITE_ID = 'en' WHERE BUTS.VALUE_ID = 123
Для непереводимых UF подстановка перевода не выполняется — в SELECT попадает только
BUTS.UF_*.
Пример: добавление UF к инфоблоку
// ENTITY_ID в b_user_field 'IBLOCK_12_SECTION' // После добавления строкового UF_АНОНС создаётся колонка в: mm_ut_iblock_12_section.UF_ANONS // Числовое UF_РЕЙТИНГ (integer) колонку в mm_ut_* не получит
Количество показов: 1
Дата изменения: 15.05.2026 21:40:30