ChurchMedia
12-07-2007, 07:17 PM
I use a CSS menu system. I don't like having to manually modify the code when I add/delete/move forums. I've figured out that the code that generates the archive site map could be modified to work for me, but I'm not completely sure how to pull it off. Thanks for any help anyone could give.
The output code needs to be like this:
<li><a href="http://www.domain.com/forums/showforum.php?f=$forumid">PARENT Forum Name</a>
<ul> <li><a href="http://www.domain.com/forums/showforum.php?f=$forumid">SUB Forum Name</a></li>
</ul></li>
Here is the code that could be modified to make it work:
// ################################################## #######################################
// ###################### ARCHIVE FUNCTIONS ################################################
// function to list forums in their correct order and nesting
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"]))
{
$output = "\n$indent<ul>\n";
foreach($vbulletin->iforumcache["$parentid"] AS $x)
{
foreach($x AS $forumid => $forum)
{
($hook = vBulletinHook::fetch_hook('archive_forum')) ? eval($hook) : false;
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'] !== '')
{
$forum_link = "<a href=\"$forum[link]\">";
}
else if ($forum['cancontainthreads'])
{
$forum_link = "<a href=\"" . (!SLASH_METHOD ? 'index.php?' : '') . "f-$forumid.html\">";
}
else
{
$forum_link = "<a style=\"font-weight:bold\">";
}
$output .= "$indent\t<li>$forum_link$forum[title_clean]</a>" . print_archive_forum_list($forumid, "\t$indent") . "</li>\n";
}
}
}
$output .= "$indent</ul>\n$indent";
}
return $output;
}
The output code needs to be like this:
<li><a href="http://www.domain.com/forums/showforum.php?f=$forumid">PARENT Forum Name</a>
<ul> <li><a href="http://www.domain.com/forums/showforum.php?f=$forumid">SUB Forum Name</a></li>
</ul></li>
Here is the code that could be modified to make it work:
// ################################################## #######################################
// ###################### ARCHIVE FUNCTIONS ################################################
// function to list forums in their correct order and nesting
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"]))
{
$output = "\n$indent<ul>\n";
foreach($vbulletin->iforumcache["$parentid"] AS $x)
{
foreach($x AS $forumid => $forum)
{
($hook = vBulletinHook::fetch_hook('archive_forum')) ? eval($hook) : false;
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'] !== '')
{
$forum_link = "<a href=\"$forum[link]\">";
}
else if ($forum['cancontainthreads'])
{
$forum_link = "<a href=\"" . (!SLASH_METHOD ? 'index.php?' : '') . "f-$forumid.html\">";
}
else
{
$forum_link = "<a style=\"font-weight:bold\">";
}
$output .= "$indent\t<li>$forum_link$forum[title_clean]</a>" . print_archive_forum_list($forumid, "\t$indent") . "</li>\n";
}
}
}
$output .= "$indent</ul>\n$indent";
}
return $output;
}