Что не так с моим синтаксисом 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}&-action=${mode}&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}&-action=${mode}&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:
Вы должны следить за различиями между объектами и массивами.