Version: 1.0, by Xenon
Developer Last Online: Oct 2023
Version: 3.5.0
Rating:
Released: 10-31-2005
Last Update: 11-21-2005
Installs: 264
DB Changes Uses Plugins Template Edits
Code Changes
No support by the author.
As requested several times, this hack allows you to arrange forums on forumhome in xx columns instead of just one per row as it is in standart vb3. It is a plain port of my 3.0 version you can find here.
Look at the screenshot to know what i mean
The design is changeable in the templates of course
I've tested it, and it should work, but as i don't use it myself, i cannot do a longtime test, so if you find any bugs, report them
Right now, it's just working on forumhome.
I'll add changes for forumdisplay later
Show Your Support
This modification may not be copied, reproduced or published elsewhere without author's permission.
That's because the template edits were too time consuming and I never achieved the look I was after. In it's present state it works, but cosmetically you may not like what you see. That's one of the reasons I gave up on it. When installed, it needs too much work.
I can't specify what you need to do because I did the edits to my liking, which probably wouldn't be to yours. There are a few helpful posts about how to align this and that, but there is no "set in stone" template edits I could tell you about.
satfox360,
Because it's been a while since I had this installed, I'm trying to steer you in the right direction, that's the best I can do. I don't remember the exact edits, nor do I remember the template names
That's because the template edits were too time consuming and I never achieved the look I was after. In it's present state it works, but cosmetically you may not like what you see. That's one of the reasons I gave up on it. When installed, it needs too much work.
I can't specify what you need to do because I did the edits to my liking, which probably wouldn't be to yours. There are a few helpful posts about how to align this and that, but there is no "set in stone" template edits I could tell you about.
satfox360,
Because it's been a while since I had this installed, I'm trying to steer you in the right direction, that's the best I can do. I don't remember the exact edits, nor do I remember the template names
Thanks for the input. I have it working exactly how I like it on ftalife.com and don't want to switch to the new version untill i'm sure it will work. I will test it on another forum and report back in detail later.
Thanks to anyone who can provide any helpful information.
I couldn't get it to work. Tried again & again, but no go.....til i disabled/uninstalled all but vbshout (have since reinstalled all), reverted the "forumhome_forumbit_level1_nopost" template, and started over. In other words....User Error somewhere along the line.
1) Edited new/original functions_forumlist.php
2) Edited forumhome_forumbit_level1_nopost
3) Imported product-xenon_forumcols
4) Set columns in Forum Manager for specific category
then add this new function to the file:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ###################### Start construct_forum_columns #######################
function construct_forum_columns($parentid, $columncount)
{
global $vbulletin, $stylevar, $vbphrase, $show;
global $imodcache, $lastpostarray, $counters, $inforum;
// this function takes the constant MAXFORUMDEPTH as its guide for how
// deep to recurse down forum lists. if MAXFORUMDEPTH is not defined,
// it will assume a depth of 2.
if ($columncount == 0)
{..................
What does it mean, am i just meant to put this at the very end of the file or what?
Help me please. I get this error Fatal error: Cannot redeclare construct_forum_columns() (previously declared in /public_html/forum/includes/functions_forumlist.php:192) in /public_html/forum/includes/functions_forumlist.php on line 192
Here's my code. :erm:
PHP Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 3.6.2 - Licence Number
|| # ---------------------------------------------------------------- # ||
|| # Copyright ?2000-2006 Jelsoft Enterprises Ltd. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
// ###################### Start getimodcache #######################
function cache_moderators($userid = null)
{
global $vbulletin, $imodcache, $mod;
$imodcache = array();
$mod = array();
$forummoderators = $vbulletin->db->query_read_slave("
SELECT moderator.*, user.username,
IF(user.displaygroupid = 0, user.usergroupid, user.displaygroupid) AS displaygroupid, infractiongroupid
FROM " . TABLE_PREFIX . "moderator AS moderator
INNER JOIN " . TABLE_PREFIX . "user AS user USING(userid)
" . ($userid != null ? "WHERE moderator.userid = " . intval($userid) : "") . "
");
while ($moderator = $vbulletin->db->fetch_array($forummoderators))
{
fetch_musername($moderator);
$imodcache["$moderator[forumid]"]["$moderator[userid]"] = $moderator;
$mod["$moderator[userid]"] = 1;
}
$vbulletin->db->free_result($forummoderators);
}
// ###################### Start getlastpostinfo #######################
// this function creates a lastpostinfo array that tells makeforumbit which forum
// each forum should grab its last post info from.
// it also tots up the thread/post totals for each forum. - PERMISSIONS are taken into account.
function fetch_last_post_array()
{
global $vbulletin, $lastpostarray, $counters;
$cannotView = array();
$children = array();
// loop through the vbulletin->iforumcache
foreach ($vbulletin->iforumcache AS $moo)
{
foreach ($moo AS $forumid)
{
$forum = $vbulletin->forumcache["$forumid"];
// if we have no permission to view the forum's parent
// set cannotView permissions cache for this forum and continue
if (!empty($cannotView["$forum[parentid]"]))
{
$cannotView["$forumid"] = 1;
}
else
{
// if we have no permissions for this forum, set the cannotView permissions cache
// so that we don't have to check its child forums
//if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) OR !($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers'])
if ((!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) AND (($vbulletin->forumcache["$forumid"]['showprivate'] AND $vbulletin->forumcache["$forumid"]['showprivate'] != 3) OR (!$vbulletin->forumcache["$forumid"]['showprivate'] AND $vbulletin->options['showprivateforums'] != 2))) OR ($forum['password'] AND !verify_forum_password($forum['forumid'], $forum['password'], false)))
{
$cannotView["$forumid"] = 1;
}
else
{
if (!isset($lastpostarray["$forumid"]))
{
$lastpostarray["$forumid"] = $forumid;
}
$parents = explode(',', $forum['parentlist']);
foreach ($parents AS $parentid)
{
// for each parent, set an array entry containing this forum's number of posts & threads
$children["$parentid"]["$forumid"] = array('threads' => $forum['threadcount'], 'posts' => $forum['replycount']);
if ($parentid == -1 OR !isset($vbulletin->forumcache["$parentid"]))
{
continue;
}
// compare the date for the last post info with the last post date
// for the parent forum, and if it's greater, set the last post info
// array for this forum to point to that forum... (erm..)
if ($forum['lastpost'] > $vbulletin->forumcache["$parentid"]['lastpost'])
{
$lastpostarray["$parentid"] = $forumid;
$vbulletin->forumcache["$parentid"]['lastpost'] = $forum['lastpost'];
}
} // end foreach($parents)
} // end can view
} // end can view parent
}
}
$counters = array();
if (is_array($vbulletin->forumcache))
{
foreach($vbulletin->forumcache AS $forum)
{
$this_forum =& $counters["$forum[forumid]"];
$this_forum['threadcount'] = 0;
$this_forum['replycount'] = 0;
if (is_array($children["$forum[forumid]"]))
{
foreach($children["$forum[forumid]"] AS $id => $info)
{
$this_forum['threadcount'] += $info['threads'];
$this_forum['replycount'] += $info['posts'];
}
}
}
}
}
// ###################### Start makeforumbit #######################
// this function returns the properly-ordered and formatted forum lists for forumhome,
// forumdisplay and usercp. Of course, you could use it elsewhere too..
function construct_forum_bit($parentid, $depth = 0, $subsonly = 0)
{
global $vbulletin, $stylevar, $vbphrase, $show;
global $imodcache, $lastpostarray, $counters, $inforum;
// this function takes the constant MAXFORUMDEPTH as its guide for how
// deep to recurse down forum lists. if MAXFORUMDEPTH is not defined,
// it will assume a depth of 2.
// call fetch_last_post_array() first to get last post info for forums
if (!is_array($lastpostarray))
{
fetch_last_post_array();
}
if (empty($vbulletin->iforumcache["$parentid"]))
{
return;
}
if (!defined('MAXFORUMDEPTH'))
{
define('MAXFORUMDEPTH', 1);
}
$forumbits = '';
$depth++;
foreach ($vbulletin->iforumcache["$parentid"] AS $forumid)
{
// grab the appropriate forum from the $vbulletin->forumcache
$forum = $vbulletin->forumcache["$forumid"];
$lastpostforum = $vbulletin->forumcache["$lastpostarray[$forumid]"];
if (!$forum['displayorder'] OR !($forum['options'] & $vbulletin->bf_misc_forumoptions['active']))
{
continue;
}
$forumperms = $vbulletin->userinfo['forumpermissions']["$forumid"];
$lastpostforumperms = $vbulletin->userinfo['forumpermissions']["$lastpostarray[$forumid]"];
if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) AND ($vbulletin->forumcache["$forumid"]['showprivate'] == 1 OR (!$vbulletin->forumcache["$forumid"]['showprivate'] AND !$vbulletin->options['showprivateforums'])))
{ // no permission to view current forum
continue;
}
if ($vbulletin->userinfo['fieldxx'] == 'Yes' AND THIS_SCRIPT == 'index' AND $forum['subforumcolumns'] != 1 AND ($subsonly OR $depth < MAXFORUMDEPTH))
{
$childforumbits = construct_forum_columns($forum['forumid'], $forum['subforumcolumns']);
}
else if ($subsonly)
{
$childforumbits = construct_forum_bit($forum['forumid'], 1, $subsonly);
}
else if ($depth < MAXFORUMDEPTH)
{
$childforumbits = construct_forum_bit($forum['forumid'], $depth, $subsonly);
}
else
{
$childforumbits = '';
}
// ###################### Start construct_forum_columns #######################
function construct_forum_columns($parentid, $columncount)
{
global $vbulletin, $stylevar, $vbphrase, $show;
global $imodcache, $lastpostarray, $counters, $inforum;
// this function takes the constant MAXFORUMDEPTH as its guide for how
// deep to recurse down forum lists. if MAXFORUMDEPTH is not defined,
// it will assume a depth of 2.
if ($columncount == 0)
{
// 0 Columns means don't show subforums at all
return '';
}
// call fetch_last_post_array() first to get last post info for forums
if (!is_array($lastpostarray))
{
fetch_last_post_array();
}
if (empty($vbulletin->iforumcache["$parentid"]))
{
return;
}
if (!defined(MAXFORUMDEPTH))
{
define('MAXFORUMDEPTH', 1);
}
$forumbits = '';
$counter = 0;
foreach ($vbulletin->iforumcache["$parentid"] AS $forumid)
{
// grab the appropriate forum from the $vbulletin->forumcache
$forum = $vbulletin->forumcache["$forumid"];
$lastpostforum = $vbulletin->forumcache["$lastpostarray[$forumid]"];
if (!$forum['displayorder'] OR !($forum['options'] & $vbulletin->bf_misc_forumoptions['active']))
{
continue;
}
$forumperms = $vbulletin->userinfo['forumpermissions']["$forumid"];
$lastpostforumperms = $vbulletin->userinfo['forumpermissions']["$lastpostarray[$forumid]"];
if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) AND !$vbulletin->options['showprivateforums'])
{ // no permission to view current forum
continue;
}
// do stuff if we are not doing subscriptions only, or if we ARE doing subscriptions,
// and the forum has a subscribedforumid
if (!$subsonly OR ($subsonly AND !empty($forum['subscribeforumid'])))
{
$GLOBALS['forumshown'] = true; // say that we have shown at least one forum
if (($forum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads']))
{ // get appropriate suffix for template name
$tempext = '_post';
}
else
{
$tempext = '_nopost';
}
if (!$vbulletin->options['showforumdescription'])
{ // blank forum description if set to not show
$forum['description'] = '';
}
// dates & thread title
$lastpostinfo = $vbulletin->forumcache["$lastpostarray[$forumid]"];
// compare last post time for this forum with the last post time specified by
// the $lastpostarray, and if it's less, use the last post info from the forum
// specified by $lastpostarray
if ($vbulletin->forumcache["$lastpostarray[$forumid]"]['lastpost'] > 0)
{
if (!($lastpostforumperms & $vbulletin->bf_ugp_forumpermissions['canview']) OR (!($lastpostforumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers']) AND $lastpostinfo['lastposter'] != $vbulletin->userinfo['username']))
{
$forum['lastpostinfo'] = $vbphrase['private'];
}
else
{
$lastpostinfo['lastpostdate'] = vbdate($vbulletin->options['dateformat'], $lastpostinfo['lastpost'], 1);
$lastpostinfo['lastposttime'] = vbdate($vbulletin->options['timeformat'], $lastpostinfo['lastpost']);
$lastpostinfo['trimthread'] = fetch_trimmed_title($lastpostinfo['lastthread']);
// do light bulb
$forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum);
$show['customstatusicon'] = false;
if ($forum['hasstatusicons'])
{
$show['customstatusicon'] = true;
if ($forum['statusicon'] == 'new')
{
$forum['customicon'] = $forum['statusiconon'];
}
if ($forum['statusicon'] == 'new_lock')
{
$forum['customicon'] = $forum['statusiconlockon'];
}
if ($forum['statusicon'] == 'old')
{
$forum['customicon'] = $forum['statusiconoff'];
}
if ($forum['statusicon'] == 'old_lock')
{
$forum['customicon'] = $forum['statusiconlockoff'];
}
if ($forum['statusicon'] == 'link')
{
$forum['customicon'] = $forum['statusiconlink'];
}
}
// add lock to lightbulb if necessary
if ((!($forumperms & $vbulletin->bf_ugp_forumpermissions['canpostnew']) OR !($forum['options'] & $vbulletin->bf_misc_forumoptions['allowposting'])) AND $vbulletin->options['showlocks'] AND !$forum['link'])
{
$forum['statusicon'] .= '_lock';
}
// get counters from the counters cache ( prepared by fetch_last_post_array() )
$forum['threadcount'] = $counters["$forum[forumid]"]['threadcount'];
$forum['replycount'] = $counters["$forum[forumid]"]['replycount'];
// get moderators ( this is why we needed cache_moderators() )
if ($vbulletin->options['showmoderatorcolumn'])
{
$showmods = array();
$listexploded = explode(',', $forum['parentlist']);
foreach ($listexploded AS $parentforumid)
{
if (!isset($imodcache["$parentforumid"]))
{
continue;
}
foreach($imodcache["$parentforumid"] AS $moderator)
{
if (isset($showmods["$moderator[userid]"]))
{
continue;
}
// build the template for the current forum
$column_width = intval(100 / $columncount) . '%';
eval('$column = "' . fetch_template("forumhome_forumbit_columncell") . '";');
// do the columnstuff
if ($counter % $columncount == 0)
{
// Begin a new row
$forumbits .= "\t<tr>\n";
}
$forumbits .= $column;
if ($counter % $columncount == $columncount - 1)
{
// End row
$forumbits .= "\t</tr>\n";
}
$counter++;
}
}