phptal:tales
This attribute allows us to change the behavior of PHPTALES. The
default behaviors is to interpret attribute expressions in a
very ZPT way. But sometimes you just would like to have PHP
there, and you end up using php: modifier everywhere.
Another problem concerning PHPTALES is the way PHPTAL has to
interpret paths. For example,
myobject/mymethod/property/10/othermethod/hashkey takes relatively long to
interpret (but don't worry about this too much – don't optimize until you find that it is really a problem with performance!)
PHPTAL has (at runtime) to take myobject and discover that it
is an object; find out that 'mymethod' is a method of this
object (rather than a variable), and then to call it; explore
the result to determine that it is an object with a property; find that its value is an array; find the 'ten'
element of this array, and determine that it is an object;
decide that othermethod is a method of this object (rather
than a variable), and get the result of its execution; find
that it is an object, and then retrieve the value
for the key 'hashkey'.
Of course this was an extreme example and most of the time we
don't care, because the process is fast enough. But what if this
very long path is called inside a big tal:repeat? D'oh!
phptal:tales can help us here:
<html>
<body>
<table phptal:tales="php">
<tr tal:repeat="myobject document.getChildren()">
<td
tal:content="myobject.mymethod().property[10].otherMethod().hashkey"></td>
</tr>
</table>
</body>
</html>
Please note that the above example does the same as:
<html>
<body>
<table>
<tr tal:repeat="myobject php:document.getChildren()">
<td
tal:content="php:myobject.mymethod().property[10].otherMethod().hashkey"></td>
</tr>
</table>
</body>
</html>
php: modifier is explained in its own chapter.