Here's what I use Boof; sort of a frankensteined version of vB's archive:
Code:
function print_archive_forum_list($parentid = -1, $indent = '')
{
global $vbulletin;
$output = '';
if (empty($vbulletin->iforumcache))
{
$forums = $vbulletin->db->query_read_slave("
SELECT forumid, title, link, parentid, displayorder, title_clean, description, description_clean,
(options & " . $vbulletin->bf_misc_forumoptions['cancontainthreads'] . ") AS cancontainthreads
FROM " . TABLE_PREFIX . "forum AS forum
WHERE displayorder <> 0 AND
password = '' AND
(options & " . $vbulletin->bf_misc_forumoptions['active'] . ")
ORDER BY displayorder
");
$vbulletin->iforumcache = array();
while ($forum = $vbulletin->db->fetch_array($forums))
{
$vbulletin->iforumcache["$forum[parentid]"]["$forum[displayorder]"]["$forum[forumid]"] = $forum;
}
unset($forum);
$vbulletin->db->free_result($forums);
}
if (is_array($vbulletin->iforumcache["$parentid"]))
{
foreach($vbulletin->iforumcache["$parentid"] AS $x)
{
foreach($x AS $forumid => $forum)
{
$forum['title_clean'] = trim($forum['title_clean'], '* ');
if (!($vbulletin->userinfo['forumpermissions']["$forumid"] & $vbulletin->bf_ugp_forumpermissions['canview']) AND ($vbulletin->forumcache["$forumid"]['showprivate'] == 1 OR (!$vbulletin->forumcache["$forumid"]['showprivate'] AND !$vbulletin->options['showprivateforums'])))
{
continue;
}
else
{
if ($forum['link'] !== '')
{
$output .= "$indent <li> <a href=\"./external.php?forumids=$forumid\"><img src=\"./images/misc/icon_rss.gif\" border=\"0\"/></a> <a href=\"./forumdisplay.php?f=$forumid\">$forum[title_clean]</a></li>\n";
}
else if ($forum['cancontainthreads'])
{
$output .= "$indent <li> <a href=\"./external.php?forumids=$forumid\"><img src=\"./images/misc/icon_rss.gif\" border=\"0\"/></a> <a href=\"./forumdisplay.php?f=$forumid\">$forum[title_clean]</a></li>\n";
}
else
{
$output .= "$indent <a href=\"./forumdisplay.php?f=$forumid\" style=\"font-weight:bold;text-decoration:underline;font-size:12px;\">$forum[title_clean]</a></li>\n";
}
$output .= print_archive_forum_list($forumid, "$indent ");
}
}
}
if (!empty($output))
{
if ($parentid != -1)
{
$output = "$indent\n$indent <ul>\n$output$indent </ul>\n$indent\n";
}
else
{
$output = "$indent<ul>\n$output$indent</ul>\n";
}
}
}
return $output;
}
$output .= "<div id=\"content\">\n";
$output .= print_archive_forum_list();
$output .= "</div>\n";