Hi Kornel,

Kornel Lesiński wrote: on 08.09.2008 15:29:
On 08-09-2008 at 12:27:50 Ernesto Baschny [cron IT] <[EMAIL PROTECTED]> wrote:

I could try some nested "?" expressions, but this turns out to be quite ugly, e.g. if I would have more than 2 classes to set

You can concatenate strings in php: expressions - just add spaces around ".", i.e.:

tal:attributes="class php:(a?'b':'c') . (d?' e':' f')"

Cool tip! I had already tried the "." concatenation but got no results, because of the missing spaces around the ".". Not I got it working, current looks like:

       <div tal:repeat="session sessions" tal:omit-tag="true">
<tal:block tal:define="currentClass php:session.isCurrent() ? 'act' : ''; lastClass php:repeat.session.end ? 'last' : ''"> <li tal:attributes="id string:tab-session-${session/getId}; class php:trim(currentClass . lastClass)"><a href="#" tal:content="session/getName">Session</a></li>


or you can use the ${} syntax:

<li class="${php:...} ${php:...}">

That is true, and even looks a lot Smarty-ish. :)

alternatively, if you work with such classes a lot, you can make syntax nicer by writing your own expression modifier:

tal:attributes="class my_classes:repeat.item"

and create:

function ($argument,$nothrow)
return 'php_function_to_execute_when_template_runs('.phptal_tales($argument,$nothrow).')';


Indeed also a good suggestion, will keep that concept in mind when developing further.

Thanks a lot for your time and hints! I will keep up following this list.


PHPTAL mailing list

Reply via email to