“Many eyes make all bugs shallow”
– Eric S. Raymond


Smarty template for generating cascaded UL based menu

So far, I’ve been happy how this template behaves when I pass a parent/child links into it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< {$parent_tag|default:'ul'}{if $menu_id} id="{$menu_id}"{/if}{if $parent_class} class="{$parent_class}"{/if}>{* ul tag opens here *}
{foreach from=$links item=link}
  {if $link.class_active && $link.href == $current_uri}
    {if $link.class}
      {assign var=class value="`$link.class` `$link.class_active`"}      
    {else}
      {assign var=class value="`$link.class_active`"}
    {/if}
  {else}
    {assign var=class value="`$link.class`"}
  {/if}
  < {$child_tag|default:'li'}{if $class} class="{$class}"{/if}{if $link.id} id="link_{$link.id}"{/if}>
    <a href="{$link.href}"{if $link.target} target="{$link.target}"{/if}>{$link.text}</a>
  {if $link.children}
    {include file="links.html" links=$link.children parent_class=""}
  {/if}
{/foreach}
< /{$parent_tag|default:'ul'}>

Does something like this when rendered

<ul class="sf-menu">
  <li><a href="http://www.swerteka.com/index.php">Home</a></li>
  <li><a href="http://www.swerteka.com/PostItem">Post Item</a></li>
  <li><a href="http://www.swerteka.com">Blog</a>
    <ul>
      <li><a href="http://www.swerteka.com/BlogComments/do/viewrecent">Comments</a></li>
    </ul>
  </li>
  <li><a href="http://www.swerteka.com/Content/name/about">About</a>
    <ul>
      <li><a href="http://www.swerteka.com/Content/name/contact">Contact Us</a></li>
    </ul>
  </li>
</ul>

Tags: ,

Leave a Reply