Локализация значений экстраполей в TPL-шаблоне

Локализация значений экстраполей с типом select, radio и checklistbox позволяет использовать человекопонятные значения и чистые данные из SQL-таблицы

Если вы уже начали знакомиться с API Cotonti Siena, то наверняка успели заметить,что вывод значений экстраполей с типом select, radio и checklistbox несколько отличаются от остальных. Разница состоит в том, что их фактические значения, передаваемые при отправке формы, это, как правило числовые или строковые величины. Они обрабатываются в коде ядра, расширения или шаблона и, поэтому, подчиняются правилам или соглашениям по именам.

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

Например, мы создали для модуля Page экстраполе “Доставка” с кодом delivery и выбрали для него тип radio со значениями 0 и 1. Теперь, выбрав соответствующее значение при редактировании страницы, мы можем обработать его в шаблоне:

<!-- IF {PAGE_DELIVERY} == 1 -->
  Доставка возможна
<!-- ELSE -->
  Извините, только самовывоз
<!-- ENDIF -->

 

Вроде получилось неплохо. Но что если вам понадобится вывести значение нашего экстраполя в “человекопонятном” виде:

...
<li>
	{PAGE_DELIVERY_TITLE}: {PAGE_DELIVERY}
</li>
...

 

Получим что-то вроде “Доставка: 1”. Не очень красиво. Конечно, здесь можно использовать логику шаблонизатора, но код от этого не станет компактным и понятным:

XML/XHTML
 
1
2
3
4
5
6
7
8
9
10
...
<li>
    {PAGE_DELIVERY_TITLE}:
    <!-- IF {PAGE_DELIVERY} == 1 -->
    Да
    <!-- ELSE -->
    Нет
    <!-- ENDIF -->
</li>
...

Именно для таких случаев можно использовать локализацию значения экстраполя и тег с постфиксом _VALUE. Для этого прежде всего необходимо локализовать экстраполе. Напомним, что в нашем примере его имя delivery. В файле локализаций темы (например, nemesis.ru.php) укажем:

PHP
 
1
2
$L['delivery_0'] = "нет";
$L['delivery_1'] = "По Городу и Окрестностям";

Теперь в шаблон можно вернуть наш первоначальный вариант:

XML/XHTML
 
1
2
3
4
5
...
<li>
    {PAGE_DELIVERY_TITLE}: {PAGE_DELIVERY}
</li>
...

В результате получим “Доставка: по Минску и Беларуси” или “Доставка: нет”.

А как быть с логикой? А вот здесь мы можем использовать наш “новый” тег:

XML/XHTML
 
1
2
3
4
5
<!-- IF {PAGE_DELIVERY_VALUE} == 1 -->
  Доставка возможна
<!-- ELSE -->
  Извините, только самовывоз
<!-- ENDIF -->

Как видим, наш TPL-шаблон сохранил компактность и читабельность, а функционал использования экстраполей при этом расширился.

И последнее по локализации значений экстраполей: если в системе уже определена языковая lang-переменная с необходимым значением, оптимальнее будет использовать присваивание по ссылке, например:

PHP
 
1
2
$L['delivery_0'] &= $L['No'];
$L['delivery_1'] = "По Селу и Огородам";
2 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-07-19 01:57

  • Page published: 2021-11-12 17:34
  • Last update: 2021-11-12 17:34

Similar pages

Локализация (перевод) названия и значений экстраполя
1 подробная пошаговая инструкция для новичков: как создать экстраполе типа select (выпадающий список) с названием «статус
Основные теги в шаблоне forums.sections.tpl - Справочник
2 основные теги с префиксом FORUMS_SECTIONS_ROW_, их источники и практическое применение.Основные теги от функции
Локализация экстраполей в Cotonti
3 Локализация экстраполей в Cotonti: полное пошаговое руководство для начинающих разработчиковЭкстраполя — это мощный
Локализация экстраполей в Cotonti Общий обзор
4 Локализация экстраполей в CotontiПолное практическое руководство для разработчиков: от механики движка до вывода в
Локализация экстраполей в Cotonti (пример: статус товара)
5 Локализация экстраполей в Cotonti: подробная инструкция на конкретном примере для начинающих разработчиковВведение