phptal:tales

Mit diesem Attribut läßt sich das Verhalten von PHPTALES verändern. In der Grundeinstellung werden PHPTAL-Attribute eng an ZPT angelehnt interpretiert. In manchen Fällen bräuchte man aber nur PHP und findet sich bei der ständigen Verwendung des php:- Operators wieder.

Ein weiterer Punkt ist die Art und Weise, in der PHPTAL Pfade auswerten muß. Zum Beispiel dauert die Auswertung von myobject/mymethod/property/10/othermethod/hashkey relativ lange (denken Sie darüber aber nicht zuviel nach - optimieren Sie erst, wenn Sie wirklich ein Problem mit dem Durchsatz haben!).

Zur Laufzeit nimmt sich PHPTAL myobject und findet heraus, daß es ein Objekt ist; stellt dann fest, daß mymethod eine Methode dieses Objektes (und keine Variable) ist und ruft sie auf; untersucht das Ergebnis, um festzustellen, daß dies ein Objekt mit einer Eigenschaft ist; sieht, daß sein Wert ein Feld ist; greift sich das 10-Element dieses Feldes und bestimmt, daß das ein Objekt ist; entscheidet, daß othermethod eine Methode dieses Objektes (und keine Variable) ist und erhält das Ergebnis ihrer Ausführung; um dieses wiederum als Objekt zu erkennen und sich den Wert für den Schlüssel hashkey zu holen.

Natürlich ist das ein extremes Beispiel, und da das Ganze schnell genug ist, interessiert es zumeist nicht. Was geschieht aber, wenn ein solcher Pfad innerhalb eines großen tal:repeat aufgerufen wird? Hmm… Hier kann phptal:tales hilfreich sein:

<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>

Beachten Sie, daß obiges Beispiel dasselbe tut wie:

<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>

Anmerkung

Der php:-Operator wird in einem eigenen Kapitel erläutert.