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.