Локализация значений экстраполей
- 481 просмотр
- 19 октября, 2023
- Обновлено: 19 октября, 2023
- admin
- Время чтения: 2 минуты
- 2 (Подробно)
Если вы уже начали знакомиться с 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'] = "По Минску и Беларуси";
Про локализацию знаю и использую часто, а вот третий тег _VALUE раньше не использовал. Удобно когда с экстраполем приходится работать в логических конструкциях. Лишние операции здесь ни к чему, так что фишка определенно продуманная.
Новый комментарий