Локализация экстраполей в Cotonti Общий обзор

Локализация экстраполей в Cotonti

Полное практическое руководство для разработчиков: от механики движка до вывода в шаблонах


Введение

Экстраполя (Extra Fields) — один из ключевых механизмов расширения данных в Cotonti. Они позволяют добавлять собственные поля к страницам, пользователям, категориям и другим сущностям без изменения ядра.

Однако большинство начинающих разработчиков сталкиваются с одной и той же проблемой:

поле создано — но не переводится,
заголовок не локализуется,
значения select отображаются кодами,
шаблон выводит не то, что ожидалось.

Причина проста: локализация экстраполей в Cotonti работает не через отдельную систему, а через существующий языковой механизм $L, но с особой логикой поиска строк.

В этой статье подробно разобрано:

  • как движок определяет название экстраполя;
  • как происходит локализация значений;
  • какие ключи языка используются;
  • как правильно назвать строки;
  • как данные проходят путь от БД до шаблона;
  • где именно происходит перевод;
  • как избежать типичных ошибок.

Материал построен максимально последовательно — от внутренней логики функций движка до практического использования.


1. Что такое экстраполе в Cotonti

Экстраполе — это динамически добавляемое поле данных, которое:

  • регистрируется в системе;
  • создаётся в базе данных;
  • автоматически подключается к шаблонам;
  • может иметь собственную локализацию.

Примеры:

  • дополнительное поле страницы: рейтинг;
  • страна пользователя;
  • тип материала;
  • уровень сложности статьи.

2. Как движок хранит экстраполя

Все зарегистрированные поля находятся в:

 
Cot::$extrafields
 

Например:

 
Cot::$extrafields[Cot::$db->pages]
 

Каждое поле — это массив:

 
$extrafield['field_name']
$extrafield['field_type']
$extrafield['field_description']
$extrafield['field_location']
 

Важно понять:

field_description — НЕ окончательный заголовок.
Он используется только как fallback.

Настоящий заголовок определяется через локализацию.


3. Главная функция локализации — cot_extrafield_title()

Рассмотрим ключевую функцию.

 
function cot_extrafield_title($extrafield, $titlePrefix = '')
 

Она решает:

👉 какой текст станет названием поля.


3.1 Алгоритм поиска перевода

Функция проверяет строки строго по порядку:

Шаг 1 — префикс (наиболее приоритетный)

 
$titlePrefix.$extrafield['field_name'].'_title'
 

Пример:

 
page_rating_title
 

Если строка существует — используется она.


Шаг 2 — location поля

 
$fieldLocation.'_'.$extrafield['field_name'].'_title'
 

Например:

 
pages_rating_title
 

Шаг 3 — глобальное имя

 
rating_title
 

Шаг 4 — описание из БД

 
$field_description
 

Шаг 5 — имя поля

Если всё пусто:

 
rating
 

Итог

Движок ищет перевод сверху вниз, пока не найдёт первый существующий вариант.

Это критически важно для правильной локализации.


4. Правильное создание локализации заголовка

Допустим, создано поле:

 
rating
 

для страниц.

Правильная языковая строка:

 
$L['page_rating_title'] = 'Рейтинг статьи';
 

Почему именно так?

Потому что модуль вызывает:

 
cot_extrafield_title($exfld, 'page_');
 

Главное правило

Префикс передаётся кодом модуля.

Вы не придумываете его — вы повторяете то, что использует система.


5. Где происходит вызов локализации (реальный код модуля)

Разберём предоставленный пример.

 
foreach (Cot::$extrafields[Cot::$db->pages] as $exfld)
 

Для каждого поля:

 
$exfld_title = cot_extrafield_title($exfld, 'page_');
 

Затем:

 
$temp_array[$tag . '_TITLE'] = $exfld_title;
 

Что это означает

Если поле:

 
rating
 

в шаблон попадёт:

 
{RATING_TITLE}
 

6. Путь данных: от БД до шаблона

Полный жизненный цикл:

 
База данных
   ↓
Cot::$extrafields
   ↓
cot_extrafield_title()
   ↓
$temp_array
   ↓
assign в шаблон
   ↓
{RATING_TITLE}
 

7. Локализация значений поля — cot_build_extrafields_data()

Теперь главное — перевод значений.

Функция:

 
cot_build_extrafields_data()
 

Она:

  • форматирует данные;
  • парсит текст;
  • переводит select/radio значения.

7.1 Select и Radio — скрытая локализация

Ключевой код:

 
$L[$extrafield['field_name'].'_'.$value]
 

То есть перевод ищется как:

 
имяполя_значение
 

Пример

Поле:

 
difficulty
 

варианты:

 
easy,medium,hard
 

Локализация:

 
$L['difficulty_easy'] = 'Лёгкий';
$L['difficulty_medium'] = 'Средний';
$L['difficulty_hard'] = 'Сложный';
 

Теперь вместо easy пользователь увидит:

 
Лёгкий
 

7.2 Checklistbox

Каждое значение переводится отдельно:

 
fieldname_value
 

Если выбрано:

 
php,js
 

результат:

 
PHP, JavaScript
 

при наличии:

 
$L['skills_php'] = 'PHP';
$L['skills_js'] = 'JavaScript';
 

8. Почему иногда перевод не работает

Частые причины:

❌ Неверный ключ

 
$L['page_rating']   // неправильно
 

Нужно:

 
$L['page_rating_title']
 

❌ Неправильный регистр

Cotonti чувствителен к регистру.


❌ Языковой файл не загружен

Файл должен находиться:

 
/lang/extension.ru.lang.php
 

9. Типы полей и их поведение

ТипЛокализация
inputнет
textareaнет
selectчерез $L[field_value]
radioчерез $L[field_value]
checklistboxперевод каждого значения
datetimeформатируется датой
checkbox0/1

10. HTML-конструкция и тема

Функция:

 
cot_default_html_construction()
 

подгружает:

 
themes/.../theme.lang.php
 

Это означает:

👉 тема тоже может влиять на локализацию элементов формы.


11. Добавление экстраполя программно

Создание:

 
cot_extrafield_add(
    Cot::$db->pages,
    'rating',
    'select'
);
 

После создания добавляем перевод:

 
$L['page_rating_title'] = 'Рейтинг';
 

12. Экстраполя категорий (structure)

Код:

 
cot_extrafield_title($exfld, 'structure_');
 

Значит локализация:

 
$L['structure_icon_title'] = 'Иконка категории';
 

В шаблоне:

 
{CAT_ICON_TITLE}
 

13. Все шаблонные теги экстраполя

Для поля rating:

ТегЗначение
{RATING_TITLE}название
{RATING}обработанное значение
{RATING_VALUE}сырое значение

Для категории:

 
{CAT_RATING_TITLE}
{CAT_RATING}
 

14. Полный практический пример

Шаг 1. Создать поле

 
difficulty (select)
 

Шаг 2. Языковой файл

 
$L['page_difficulty_title'] = 'Сложность';

$L['difficulty_easy'] = 'Лёгкая';
$L['difficulty_medium'] = 'Средняя';
$L['difficulty_hard'] = 'Сложная';
 

Шаг 3. Значения в админке

 
easy,medium,hard
 

Шаг 4. Вывод в шаблоне

 
<strong>{DIFFICULTY_TITLE}:</strong>
{DIFFICULTY}
 
 

Результат

 
Сложность: Средняя
 

15. Универсальная схема локализации экстраполей

Запомните одну формулу:

 
Название поля:
{prefix}_{field}_title

Значение select:
{field}_{value}
 

16. Рекомендованная структура языкового файла

 
/* Extra fields */

$L['page_rating_title'] = 'Рейтинг';

$L['rating_low'] = 'Низкий';
$L['rating_mid'] = 'Средний';
$L['rating_high'] = 'Высокий';
 

17. Лучшие практики

Всегда:

  • использовать prefix (page_, structure_);
  • локализовать значения select;
  • держать переводы рядом с модулем;
  • использовать английские ключи значений.

Никогда:

  • не переводить значения прямо в БД;
  • не писать текст в шаблоне вручную;
  • не менять field_name после запуска проекта.

Заключение

Локализация экстраполей в Cotonti — это не отдельная система, а надстройка над языковым массивом $L, интегрированная в жизненный цикл данных.

Ключевая идея:

экстраполе само не знает своего перевода — его определяет соглашение имен.

Когда вы понимаете три функции:

  • cot_extrafield_title()
  • cot_build_extrafields_data()
  • шаблонную передачу $temp_array

вся система становится предсказуемой.

Правильно локализованные экстраполя дают:

  • многоязычные сайты без дублирования полей;
  • чистые шаблоны;
  • переносимые модули;
  • совместимость с любыми темами.

Освоив этот механизм, разработчик начинает использовать Cotonti именно так, как он был архитектурно задуман — как расширяемую и строго структурированную CMS.

4 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Онлайн

Sodium Carbonate

Последняя авторизация: 19.07.2026 00:53

  • Страница размещена: 01.03.2026 08:33
  • Последнее обновление: 01.03.2026 08:34

Похожие страницы

Локализация экстраполей в Cotonti
1 Локализация экстраполей в Cotonti: полное пошаговое руководство для начинающих разработчиковЭкстраполя — это мощный
Локализация экстраполей в Cotonti (пример: статус товара)
2 Локализация экстраполей в Cotonti: подробная инструкция на конкретном примере для начинающих разработчиковВведение
Локализация экстраполей в Cotonti Пошаговая инструкция на примере поля "статус товара"
3 Экстраполя в Cotonti: полное руководство по созданию и локализации значенийВведениеCotonti — мощная и гибкая CMS с
Локализация значений экстраполей в TPL-шаблоне
4 Если вы уже начали знакомиться с API Cotonti Siena, то наверняка успели заметить,что вывод значений экстраполей с типом
Даты в CMF Cotonti. Обзор
5 Даты в CMF Cotonti: Запись, Хранение и Вывод (Представление)Введение в работу с датами в CotontiУважаемые начинающие