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.