0

.Quick question - I have the following, working syntax:

<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>

but I was expecting to be able to use the shorter:

<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>

i.e. not having to define owner and user in order to get at them for the php: test.

So my question is, how am I using the dot syntax wrong in the php: context? (also, is there a simpler way to express this WITHIN THE TEMPLATE i.e. without changning the PHP external to the template?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
Dycey
  • 4,767
  • 5
  • 47
  • 86

1 Answers1

1

This syntax is fine as long as record and user are objects (instances of classes). If they are arrays, then you need:

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

When you use TALES expressions, PHPTAL figures out object/array difference for you. If you use php:, you have to watch out for differences between objects and arrays.

Kornel
  • 97,764
  • 37
  • 219
  • 309