Что не так с моим синтаксисом PHPTAL?

.Быстрый вопрос - у меня есть следующий рабочий синтаксис:

<td tal:define="owner record/owner_id; user user/id; mode php:(owner eq user)?'_edit':'_view'; linkname php:(owner eq user)?'Edit':'View';">
  <a href="index.php?-table=${table}&amp;-action=${mode}&amp;id=${record/id}">${linkname}</a>
</td>

но я ожидал, что смогу использовать более короткий:

<td tal:define="mode php:(record.owner_id eq user.id)?'_edit':'_view';linkname php:(record.owner_id eq user.id)?'Edit':'View';">
  <a href="index.php?-table=${table}&amp;-action=${mode}&amp;id=${record/id}">${linkname}</a>
</td>

то есть не нужно определять owner и user, чтобы получить их для теста php:.

Итак, мой вопрос: как я неправильно использую точечный синтаксис в контексте php:? (также есть ли более простой способ выразить это ВНУТРИ ШАБЛОНА, то есть без изменения PHP, внешнего по отношению к шаблону?


person Dycey    schedule 12.05.2011    source источник


Ответы (1)


Этот синтаксис подходит, если record и user являются объектами (экземплярами классов). Если это массивы, то вам нужно:

 tal:define="mode php:(record['owner_id'] eq user['id'])

Когда вы используете выражения TALES, PHPTAL определяет разницу между объектами и массивами. Если вы используете php:, вы должны следить за различиями между объектами и массивами.

person Kornel    schedule 12.05.2011