Что не так с моим синтаксисом PHPTAL? - PullRequest
0 голосов
/ 12 мая 2011

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

<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-шаблона?

1 Ответ

1 голос
/ 13 мая 2011

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

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

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

...