PDA

View Full Version : Vbulletin 5, how to hide forum sub-categories on home page ?


Anton Rahman
12-26-2017, 04:40 AM
Good day to all vbulletin geeks

Any idea on how to hide all forum sub-categories and their sub-categories from the home page ?

We are using Vbulletin 5 default style.

We will answer the funny unintuitive question before someone will have the first honor ;
AND WHY WOULD WE WANT TO DO THAT ?
Well of course you must have guessed it :
We simply have too many sub-categories which makes the main page look too long

This is the case scenario :
We have 5 main categories ACTING AS CATEGORIES “not channels”
Under each we have about 5 sub-categories , also ACTING AS CATEGORIES “not channels”
Then finally under each we have about 5 sub categories, those are already ACTING AS CHANNELS “meaning user can post”

So again to further clarify “we want to hide all sub-categories and their sub-categories from the main or home page, thus leaving only the main categories to display on the home page, so the rest of sub-categories and their sub-categories and channels are viewable only when the user clicks any of the main categories URLS thus navigating to that particular main category forum URL

Any ideas ? most importantly not a JAVA SCRIPT because it wouldn’t be compatible with some browsers
Also hopefully a direct edit to the vB5 DEFAULT STYLE templates and not a css_additional.css ?

Seven Skins
12-26-2017, 07:52 AM
May be you are looking for this ...

edit display_Forums_list template and comment out this block of code. This code is from vb 5.3.4

<vb:if condition="!empty($forum['subchannels'])">
<!-- Sub-Forums -->
<tr class="subforum-list"><td colspan="4">
<div class="subforum-header h-clear">{vb:rawphrase sub_forums}:</div>
<table>
{vb:set cols, 1}
<vb:each from="forum.subchannels" value="subforum">
<vb:if condition="(($cols - 1) % $subChannelsPerRow == 0)">
<tr>
</vb:if>
{vb:set colspan, ''}
<vb:if condition="($cols == count($forum['subchannels'])) AND (($remaining = ($cols % $subChannelsPerRow)) != 0)">
{vb:set colspan, {vb:concat 'colspan="', {vb:math {vb:raw subChannelsPerRow} - {vb:raw remaining} + 1}, '"'}}
</vb:if>
<td class="subforum-item" data-lastcontent="{vb:raw subforum.lastcontent.created}" data-channel-id="{vb:raw subforum.nodeid}" {vb:raw colspan}>
<div class="subforum-info">
<span class="icon<vb:if condition="!empty($subforum['is_new'])"> new</vb:if>"></span>
<a href="{vb:url {vb:raw subforum.routeid}}" class="subforum-title">{vb:raw subforum.title}</a>
<span class="counts">({vb:number {vb:raw subforum.topics}}/{vb:number {vb:raw subforum.posts}})</span>
</div>
</td>
<vb:if condition="($cols % $subChannelsPerRow == 0) OR $cols == count($forum['subchannels'])">
</tr>
</vb:if>
{vb:set cols, {vb:math {vb:var cols} + 1}}
</vb:each>
</table>
</td></tr>
</vb:if>

Anton Rahman
12-26-2017, 09:07 AM
For the 3rd time on the row , thanks again SVENSKINS
Your solution is simple, intuitive and verily worked like a charm
BUT in our case we have 2 levels under each category such as
MAIN CATEGORY “no post”, which leads to several SUB CATEGORIES “no post” , which finally leads to the last level SUB CATEGORIES “acting as channel and users may post only at that level”
So your solution is brilliant and reliable at hiding the last most SUB CATEGORY “that is acting as channel and at which users may post”
But it left behind the MIDDLE SUB CATEGORY which is after from the MAIN CATEGORY and before to the last most SUB CATEGORY “that is acting as channel and at which users may post”
So we wanted to leave behind in the home page only the MAIN CATEGORIES and hide ALL SUB CATEGORIES that are dependent on the MAIN CATEGORY
In other words on the home page we will keep only parent MAIN CATEGORIES, and hide all CHILDREN /SUB CATEGORIES, because anyway when the user will click on any of the MAIN MOST CATEGORIES it will lead him to the next page showing now all the children categories!
Any thoughts pls ?

Seven Skins
12-26-2017, 09:14 AM
PM me the link to your site ... as I don't have the categories set up like you have, on my dev site.

Anton Rahman
12-26-2017, 10:11 AM
sorry forgot all about it , since the site is under development so the forums are off

anyway what we have is absolutely all the defaults of vBulletin even mods are also totally off and we are using default style as well.
our forum topics hierarchy is as follows:

MAIN CATEGORY "acts as category so no post" -------> SUB CATEGORY "also acts as category so no post" and this SUB CATEGORY is the children of the MAIN CATEGORY which we still need to hide from forum home page -------> then a final SUB CATEGORY "where users may post " which is the children of the above mentioned SUB CATEGORY of the MAIN CATEGORY and which with your advice we were able to hide from home page

In Omnibus
12-26-2017, 10:21 AM
You can either hide channels by setting the display order to "0" or you can hide channels by changing the usergroup permissions for each channel. Everything is node-based. There really aren't any "sub-forums" in vB5.

Anton Rahman
12-26-2017, 10:44 AM
tnx for the contribution but this suggestion is out of the context of the topic

when you set display to 0 the topic disappears from all pages, we need to hide only "in the main page" all the children of the MAIN CATEGORIES , basically leaving in the MAIN PAGE only the MAIN CATEGORIES

But when you navigate through any of the MAIN CATEGORIES into their respective URLS's you should be able to see again all the children of the MAIN CATEGORY !

This is done to shorten and tidy up the view of the home page especially when the SUB CATEGORIES "children" of your MAIN CATEGORIES and also the "children" of those SUB CATEGORIES are quite many.

Seven Skins
12-26-2017, 12:33 PM
Here we go .. edit display_Forums_item template

Add this .. edit node ID

<vb:if condition="$page['channelid'] != 2">


Above this line ....
<tr class="forum-item {vb:raw forumCssPrefix} forum-item{vb:raw forumStatus}" id="forum{vb:raw forum.nodeid}" data-channel-id="{vb:raw forum.nodeid}" data-lastcontent="{vb:raw forum.lastcontent.created}" data-readtime="{vb:raw forum.readtime}">


Add this below last line in the template ...
</vb:if>

Anton Rahman
12-27-2017, 11:53 AM
thanks again for your valued assistance, this vb:if condition you suggested is interesting and seems to have an actual effect on the 1st generation children of the main forum categories, so when we tried it with "$page['channelid'] != 1" the effect is it remove all formatting and also the thumbnail icons next to each of the 1st generation children of the main forum + it creates a duplicate of each and puts it right under each of itself
So among the so many things it does IT DID'T hide neither 1st generation children of the main forum nor the 1st generation children of the main forum "i.e the channels where user can post"

and when we tried it with any other number for ['channelid'] ! , like lets say 2 or 3 or even 20 and 20 in particular is the node ID of one of the 1st generation children categories we intend to hide off of the home page NOTHING HAPPENS

What did we miss pls ??
Also as we described earlier in this post we have X PARENT CATEGORIES under which we have X children CATEGORIES of the X PARENT CATEGORIES then finally X CHANNELS that are the children of the children of the parent categories so what are the node id we will use in "$page['channelid'] != "? those of the parent categories ? or the 1st generation children or the 2nd generation children ?
is there a vb code that targets channels ACTING AS CATEGORIES AND ARE NOT CHILDREN OF ANOTHER ? ie root CATEGORIES ? cz more or less in the course of your brilliant suggestions we may have bumped into something that looks like that in display_Forums_list template when you helped us improving that vb template earlier

--------------- Added 1514388394 at 1514388394 ---------------

An interesting follow through on you post


May be you are looking for this ...

edit display_Forums_list template and comment out this block of code. This code is from vb 5.3.4

<vb:if condition="!empty($forum['subchannels'])">
<!-- Sub-Forums -->
<tr class="subforum-list"><td colspan="4">
<div class="subforum-header h-clear">{vb:rawphrase sub_forums}:</div>
<table>
{vb:set cols, 1}
<vb:each from="forum.subchannels" value="subforum">
<vb:if condition="(($cols - 1) % $subChannelsPerRow == 0)">
<tr>
</vb:if>
{vb:set colspan, ''}
<vb:if condition="($cols == count($forum['subchannels'])) AND (($remaining = ($cols % $subChannelsPerRow)) != 0)">
{vb:set colspan, {vb:concat 'colspan="', {vb:math {vb:raw subChannelsPerRow} - {vb:raw remaining} + 1}, '"'}}
</vb:if>
<td class="subforum-item" data-lastcontent="{vb:raw subforum.lastcontent.created}" data-channel-id="{vb:raw subforum.nodeid}" {vb:raw colspan}>
<div class="subforum-info">
<span class="icon<vb:if condition="!empty($subforum['is_new'])"> new</vb:if>"></span>
<a href="{vb:url {vb:raw subforum.routeid}}" class="subforum-title">{vb:raw subforum.title}</a>
<span class="counts">({vb:number {vb:raw subforum.topics}}/{vb:number {vb:raw subforum.posts}})</span>
</div>
</td>
<vb:if condition="($cols % $subChannelsPerRow == 0) OR $cols == count($forum['subchannels'])">
</tr>
</vb:if>
{vb:set cols, {vb:math {vb:var cols} + 1}}
</vb:each>
</table>
</td></tr>
</vb:if>


if you move the comment two lines up , thus commenting as well the following :

{vb:template display_Forums_item, forum={vb:raw forum}, forumLevel={vb:raw forumLevel}, isSubcategory={vb:raw isSubcategory}, avatar={vb:raw userThumbAvatars}}

the result on home page is EXACTLY what we needed i.e only topmost parents are shown and any children of that are perfectly hidden on home page

caves eat is : they are all the way hidden , meaning you cant navigate through clicking the main parents to to open the children in the next page !!

so simply the children became hidden all the way !:confused:

Seven Skins
12-27-2017, 02:58 PM
This is what I had ...


User:
Pass:

Use Temp style once logged in

Anton Rahman
12-28-2017, 01:01 PM
very intuitive , while maintaining simplicity yet direct to the point in maximizing the power of vBulletin system

we also worked our way through your suggested code adjustments earlier in this thread, they actually work, it just took us time to realize that the implementation differs cz our channels layout is

CATEGORY -----> CATEGORY ----> then finally the CHANNELS

the most common - such as your example is

CATEGORY ----- > CHANNELS

but it works after all

Thank you SEVEN SKIN's you saved the day once more !!