phptal:tales
Этот атрибут позволяет изменять "поведение" PHPTALES. По умолчанию, выражения атрибутов интерпретируются в максимальном соответствии с ZPT (Zope Page Templates). Однако, найдутся случаи, когда Вы бы хотели использовать PHP повсюду, то есть Вы бы везде применяли модификатор php:.
Другая проблема относительно PHPTALES состоит в способе, коим PHPTAL интерпретирует пути. Например, myobject/mymethod/property/10/othermethod/hashkey
займет относительно много времени на интерпретацию (НО не концентрируйте на этом слишком много внимания; не нужно оптимизировать, пока вы не заметите реальное снижение производительности!)
PHPTAL должен (runtime) проверить, что myobject - это объект; проверить, что 'mymethod' - метод этого объекта (или, быть может, переменная), и затем вызвать его; убедиться, что результат является объектом со свойство; определить, что значение свойства - массив; найти десятый элемент этого массива и определить, что это объект; определить, что othermethod - метод этого объекта (а не переменная), и получить результат его вызова; определить, что результат - снова объект, и затем получить значение для ключа 'hashkey'.
Конечно, мы перегибаем палку в этом примере, и, на самом деле, чаще всего нас такие проблемы не будут волновать, та как этот процесс очень быстр. Но что, если этот очень длинный путь вызывается в большом цикле tal:repeat
? Аминь!.. Именно тут phptal:tales
приходит на помощь:
<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:' читайте подробнее в соответствующей главе .