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.