Manual
5.2. phptal:tales
Atrybut pozwala zmienić zachowanie PHPTALES. Domyśne zachowanie polega na interpretowaniu wyrażeń atrybutów podobnie jak w ZPT. Czasem jednak wygodniej byłoby użyć samego PHP bez korzystania z modyfikatora php:.
Innym problemem jest sposób w jaki PHPTAL interpretuje ścieżki. Przykładowo ścieżka myobject/mymethod/10/othermethod/hashkey jest bardzo długa.
PHPTAL musi (podczas uruchamiania) pobrać myobject i stwierdzić, że jest on obiektem, sprawdzić, czy mymethod jest metodą tego obiektu i uruchomić ją, pobrać wynik i sprawdzić czy jest on tablicą, odnaleźć element ten w tablicy i sprawdzić, czy jest obiektem, sprawdzić czy othermethod jest metodą tego obiektu i pobrać wynik jej wykonania, sprawdzić, czy jest tablicą asocjacyjną i wreszcie pobrać klucz hashkey.
Oczywiście jest to bardzo skomplikowany przykład i najczęściej nie trzeba się przejmować czasem wykonania bo proces trwa bardzo krótko. Jednak, gdy taka długa ścieżka jest wywoływana wewnątrz dużej pętli tal:repeat zaczyna stanowić to poważny problem :
<html> <body> <table phptal:tales="php"> <tr tal:repeat="myobject document.getChildren()"> <td tal:content="myobject.mymethod()[10].otherMethod()['hashkey']"></td> </tr> </table> </body> </html>
Nie jestem pewien czy ten przykład jest zrozumiały ale aby go lepiej zrozumieść można to samo zrobić z użyciem phptal:tales. Wszelkie wyrażenia tal, metal, i18n będą czystymi wyrażeniami PHP.
Powyższy przykład zadziała dokładnie tak samo jak :
<html> <body> <table> <tr tal:repeat="myobject php:document.getChildren()"> <td tal:content="php:myobject.mymethod()[10].otherMethod()['hashkey']"></td> </tr> </table> </body> </html>
Modyfikator php jest wyjaśniony w osobnym rozdziale.