“Whenever you find yourself on the side of the majority, it's time to pause and reflect.”
– Mark Twain


OOP 101: No logic in template, as much as possible

If you have a repeating region in your template and it doesn’t need a wrapper around it, simply use section

1
2
3
{section name=s loop=$images}
   <div id="image_{$images[s].id}"><img src="{$images[s].src}" alt="" /></div>
{/section}

Cases where you need html wrap tags is like this

1
2
3
4
5
6
7
8
9
{if $navlinks}
<ul>
{section name=s loop=$navlinks}
   <li id="navitem_{$navlinks[s].id}">
     <a href="{$navlinks[s].href}">{$navlinks[s].text}</a>
   </li>
{/section}
</ul>
{/if}

This avoids the <ul> being rendered if $navlinks don’t have a return record. Another way is to access Smarty properties

1
2
3
4
5
6
7
{section name=s loop=$navlinks}
   {if $smarty.section.s.first}<ul>{/if}
   <li id="navitem_{$navlinks[s].id}">
     <a href="{$navlinks[s].href}">{$navlinks[s].text}</a>
   </li>
   {if $smarty.section.s.last}</ul>{/if}
{/section}

But still, this adds an if in the template. As this post title goes, you should avoid them, that’s the basics of OOP system and MVC frameworks, separate logic from code :D

What made me write this post? Template Designers sometimes hate seeing if statements. In my case, my boss transforms into savvy Designer as well, at times! Bummer

Tags: , ,

Leave a Reply