Если вы уже начали знакомиться с 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”. Не очень красиво. Конечно, здесь можно использовать логику шаблонизатора, но код от этого не станет компактным и понятным:
|
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) укажем:
|
1
2
|
$L['delivery_0'] = "нет";$L['delivery_1'] = "По Городу и Окрестностям"; |
Теперь в шаблон можно вернуть наш первоначальный вариант:
|
1
2
3
4
5
|
...<li> {PAGE_DELIVERY_TITLE}: {PAGE_DELIVERY}</li>... |
В результате получим “Доставка: по Минску и Беларуси” или “Доставка: нет”.
А как быть с логикой? А вот здесь мы можем использовать наш “новый” тег:
|
1
2
3
4
5
|
<!-- IF {PAGE_DELIVERY_VALUE} == 1 --> Доставка возможна<!-- ELSE --> Извините, только самовывоз<!-- ENDIF --> |
Как видим, наш TPL-шаблон сохранил компактность и читабельность, а функционал использования экстраполей при этом расширился.
И последнее по локализации значений экстраполей: если в системе уже определена языковая lang-переменная с необходимым значением, оптимальнее будет использовать присваивание по ссылке, например:
|
1
2
|
$L['delivery_0'] &= $L['No'];$L['delivery_1'] = "По Селу и Огородам"; |