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:' читайте подробнее в соответствующей главе .