Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость

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

  • 321 просмотр
  • 19 октября, 2023
  • Обновлено: 19 октября, 2023
  • admin
  • Время чтения: 2 минуты
  • 1 (Подробно)

Если вы уже начали знакомиться с 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”. Не очень красиво. Конечно, здесь можно использовать логику шаблонизатора, но код от этого не станет компактным и понятным:

...
<li>
	{PAGE_DELIVERY_TITLE}:
	<!-- IF {PAGE_DELIVERY} == 1 -->
	Да
	<!-- ELSE -->
	Нет
	<!-- ENDIF -->
</li>
...

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

$L['delivery_0'] = "нет";
$L['delivery_1'] = "По Минску и Беларуси";

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

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

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

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

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

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

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

$L['delivery_0'] &= $L['No'];
$L['delivery_1'] = "По Минску и Беларуси";

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Комментарии отсутствуют