Локализация экстраполей в 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 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-01 22:41

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2026-03-01 08:33
  • Last update: 2026-03-01 08:34

Similar pages

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