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.