tal:attributes
С помощью tal:attributes можно устанавливать на лету значения атрибутов тега.
<a href="http://www.foo.com" title="some foo link"
tal:attributes="href somelink/href; title somelink/title"
tal:content="somelink/text"
>какая-нибудь ссылка</a>
Для примера, пусть значение 'somelink
' будет таковым:
$somelink->href = "http://www.google.com";
$somelink->title = "google search engine";
$somelink->text = "the google search engine";
В результате получим:
<a href="http://www.google.com"
title="google search engine">the google search engine</a>
Точка с запятой (;
) разделяет несколько атрибутов. Чтобы записать точку с запятой как часть значения, необходимо ее продублировать (;;
).
Вот пример, где tal:attributes
используется совместно с tal:repeat
:
<tr tal:repeat="ranking playerRankings"
tal:attributes="class php: repeat.ranking.odd ? 'odd' : NULL">
…
</tr>
Модификатор php: будет описан ниже. Итак, рассмотрим наш пример. Если рядок нечетный, тогда для tr
будет использован атрибут class
="odd". Для четных же рядков атрибут class
вообще не будет установлен.
"condition ? then : else
" является специальным выражением PHP; хотя его польза имеет место быть во многих случаях, лучше попытаться избежать его использувания.
Правильнее было бы попросить PHP программиста обеспечить дизайнера шаблонов специальными модификаторами (см. PHP интеграция / пользовательские модификаторы), которые могли бы использоваться примерно так:
<tr tal:repeat="ranking playerRankings"
tal:attributes="class css-odd:repeat/ranking/odd">
…
</tr>
Модификатор возвратит "odd", если repeat/ranking/odd
равен true, а иначе false.
Задавая значение, можно использовать так называемые альтернативные значения, разделяя их знаком |. Если первое значение не определено, парсер попытается подставить следующее в цепочке, если оно тоже не определено - следующе, и т.д. При использовании альтернативных значений, в tal:attributes
можно использовать значение nothing
(или NULL
в выражении php) как последнее альтернативное значение. Тогда атрибут не будет добавлен тегу, если значение для атрибута не определено. Это позволит избежать "пустых" атрибутов:
… tal:attributes="title object/tooltip | nothing">
XHTML атрибуты selected
, checked
и другие подобные будут также обработаны правильно.
<input type="checkbox" tal:attributes="checked object/isChecked"/>
Не забывайте, что XHTML регистро-зависим, поэтому запись SELECTED
ошибочна в XHTML. Правильная запись - selected
.