Что не так с моим синтаксисом 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-шаблона?

1 ответ

Решение

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

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

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

Другие вопросы по тегам