3215 Posts in 848 Topics by 811 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 3111 Views |
-
Difficulties with If-Statements

15 September 2009 at 12:42am
I tried to give all pages that don't have any children the class attribute "leaf".
After experimenting quite some time with this:
<div id="page"<% if Children.TotalItems < 1 %> class="leaf"<% end_if %>>
or
<div id="page"<% if !Children %> class="leaf"<% end_if %>>
or
<div id="page"<% if Children.TotalItems == 0 %> class="leaf"<% end_if %>>which all gave a "Parse error", I finally had to use this very odd method to get it to work:
<div id="page"<% if Children.TotalItems %><% else %> class="leaf"<% end_if %>>
This doesn't seem right. What did I do wrong? There must be an easier way to accomplish this.
Any thoughts? Is it not possible to do comparisons in Silverstripe templates? -
Re: Difficulties with If-Statements

15 September 2009 at 1:01am
Hi John,
The template language isn't like PHP, so doing:
<div id="page"<% if Children.TotalItems = 0 %> class="leaf"<% end_if %>>
Should work (note only ONE '=')
Hope that helps!
-
Re: Difficulties with If-Statements

16 September 2009 at 4:13am
Thanks for the reply, but that doesn't work either. It doesn't throw a parse error though - the statement is simply ignored.
-
Re: Difficulties with If-Statements

18 September 2009 at 11:47am
So if ... = 0 and if != 0 are both ignored?
-
Re: Difficulties with If-Statements

18 September 2009 at 3:46pm
Try <% if Children %><% else %>class="leaf"<% end_if %> which should work. Saying that I would have thought Children.TotalItems would have worked.
Just to clear up the others
<% if !Children %> Will not work - negation is not supported
<% if Children.TotalItems == 0 %> Will not work. SSViewer uses = not == as it doesn't have assignment. -
Re: Difficulties with If-Statements

18 September 2009 at 7:56pm Last edited: 18 September 2009 8:00pm
My solution now:
I put this in my page class
public function isLeaf() {
return $this->Children()->TotalItems() == 0;
}and this in my page.ss:
<div id="page"<% if isLeaf %> class="leaf"<% end_if %>>
Now the code looks clean. I'm not sure that this is the "right" way to do it, as I'm not really an expert with this MVC thing. Should this be in the Controller or somewhere else?
I still think negations and comparisons should be possible in the template. Is this just not the way things are done with SilverStripe or will this functionality be added in the future?
It seems very odd to me to always write something like<% if Control %><% else %>Output<% end_if %>
instead of
<% if !Control %>Output<% end_if %>
Oh and for the
<% if Children.TotalItems = 0 %> class="leaf"<% end_if %>
- tried it again to make sure. Doesn't work.
| 3111 Views | ||
|
Page:
1
|
Go to Top |



