Here is what I am using....
Code:
{* $Id: sitemap.tpl,v 1.00 2005/02/24 09:53:29 max Exp $ *}
{capture name=sitemap}
<ul> {*** start unordered list***}
{section name=l1_cat_num loop=$allcategories} {*** loop ALL categories ***}
{if $allcategories[l1_cat_num].parentid eq 0} {*** loop root categories/parentid 0 - level 1***}
<li><a href="home.php?cat={$allcategories[l1_cat_num].categoryid}">{$allcategories[l1_cat_num].category}</a></li>
{if $allcategories[l1_cat_num].subcategory_count gt 0} {*** check if root cat has child cats ***}
<ul>
{section name=l2_cat_num loop=$allcategories} {*** loop through sub cats with matching parent id ***}
{if $allcategories[l2_cat_num].parentid eq $allcategories[l1_cat_num].categoryid}
<li><a href="home.php?cat={$allcategories[l2_cat_num].categoryid}">{$allcategories[l2_cat_num].category}</a></li>
{if $allcategories[l2_cat_num].subcategory_count gt 0} {*** check if parent has child cats***}
<ul>
{section name=l3_cat_num loop=$allcategories}
{if $allcategories[l3_cat_num].parentid eq $allcategories[l2_cat_num].categoryid}
<li><a href="home.php?cat={$allcategories[l3_cat_num].categoryid}">{$allcategories[l3_cat_num].category}</a></li>
{if $allcategories[l3_cat_num].subcategory_count gt 0} {*** check if parent has child cats***}
<ul>
{section name=l4_cat_num loop=$allcategories}
{if $allcategories[l4_cat_num].parentid eq $allcategories[l3_cat_num].categoryid}
<li><a href="home.php?cat={$allcategories[l4_cat_num].categoryid}">{$allcategories[l4_cat_num].category}</a></li>
{/if}{/section}</ul>
{/if}{/if}{/section}</ul>
{/if}{/if}{/section}</ul>
{/if}{/if}{/section}
</ul>
{/capture}
{include file="dialog.tpl" title="Site map" content=$smarty.capture.sitemap extra="width=100%"}