Advertisement:

Author Topic: Displaying only one Category  (Read 109464 times)

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Displaying only one Category
« on: January 14, 2005, 06:26:12 AM »
Please Note this has been converted into a similar mod:
Mod: View Single Category

Original Post as follows

Hi all,

first of all I'd like to thank the developers for their fantastic work, this is really a superb forum software :)

My question: is there a way to display only one category of a forum, and I don't mean the others collapsed or sp, but really only that category and its subforums?


How to do it:
Check reply#8 or a better one in reply#14
« Last Edit: February 08, 2007, 12:23:22 AM by SleePy »

Offline A.M.A

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 2,133
  • Gender: Male
  • ..
Re: Displaying only one Category
« Reply #1 on: January 14, 2005, 06:53:38 AM »
Through permission you can disable viewing some boards for guests or member groups .. if that what you meant!
Really sorry .. real life is demanding my full attention .. will be back soon hopefully :)

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #2 on: January 14, 2005, 07:51:57 AM »
Hmmm, no, that's not what I meant. Sorry if I have to draw the comparison: IPB looks like this when clicking on a category:
http://www.hydrogenaudio.org/forums/index.php?showforum=64
All you see is that very section of the forum and the forums in there, nothing else... See what I mean?

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #3 on: January 14, 2005, 01:49:00 PM »
To make it a bit clearer using this very forum (  :) ):

I'd like f.e. to be able to view the Section 'SMF Development' on its own, without seeing the other sections.
The link http://www.simplemachines.org/community/index.php#11 gives me that section on top, but I still see all the others...

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #4 on: January 17, 2005, 06:35:32 AM »
Oh dear, did I step on someone's foot or is it just not possible?

Offline [Unknown]

  • SMF Friend
  • SMF Master
  • *
  • Posts: 36,102
  • Gender: Male
Re: Displaying only one Category
« Reply #5 on: January 17, 2005, 09:41:19 AM »
Why would you want to remove view of the other boards?  To save like a kilobyte of bandwidth?

-[Unknown]

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #6 on: January 17, 2005, 10:26:39 AM »
Em, no, but to have the possibility to give away an URL that will show only that very section; to get the impression there were no other sections.

Offline Trekkie101

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 8,157
  • Gender: Male
  • Ad Astra!
    • https://www.facebook.com/DLRPRoundup on Facebook
    • @dlrproundup on Twitter
    • DLRP Roundup
Re: Displaying only one Category
« Reply #7 on: January 17, 2005, 10:54:40 AM »
But then clicking home would display it?

You could make the other boards private to stop just anyone getting in and they wouldnt see it until they are premoted.

Offline A.M.A

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 2,133
  • Gender: Male
  • ..
Re: Displaying only one Category
« Reply #8 on: January 17, 2005, 12:33:12 PM »
In BoardIndex.template.php look for:
Code: [Select]
foreach ($context['categories'] as $category)
{
echo '
<div class="tborder"><table border="0" width="100%" cellspacing="1" cellpadding="5">
replace with:
Code: [Select]
foreach ($context['categories'] as $category)
{

     // if category's link is clicked, display that category only!
if (isset($_REQUEST['catogid']))
  {
        if ($_REQUEST['catogid'] == $category['id'])
           echo '<div class="tborder">';
        elseif ($_REQUEST['catogid'] != $category['id'])
           echo '<div style="display:none;">';
  }
else
  {
        echo '<div class="tborder">';
}

echo '
<table border="0" width="100%" cellspacing="1" cellpadding="5">

look for:
Code: [Select]
', $category['link'], 'replace with:
Code: [Select]
<a href="' . $scripturl . '?catogid=', $category['id'], '">', $category['name'], '</a>
This will enable you to display only one category by clicking on any category or typing its URL. This will only hide the unwanted categories. I made this quick, and did not test for errors proof!
Really sorry .. real life is demanding my full attention .. will be back soon hopefully :)

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #9 on: January 17, 2005, 12:42:19 PM »
A.M.A, you rock soooo bad! Thanx very much for that hack. Looks absolutely...great. thanx.

PS: this could even go into the main dev tree, methinks.

Offline Oldiesmann

  • Developer
  • SMF Super Hero
  • *
  • Posts: 24,814
  • Gender: Male
  • Ask me about the function DB :)
    • oldiesmann on Facebook
    • Oldiesmann on GitHub
    • http://www.linkedin.com/in/michaeleshom on LinkedIn
    • @oldiesmann on Twitter
    • Archie Comics Fan Forum
Re: Displaying only one Category
« Reply #10 on: January 17, 2005, 01:52:11 PM »
Nice. Never thought about doing it that way :)
Michael Eshom
Webmaster / SMF Lead Developer
oldiesmann@simplemachines.org

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #11 on: January 17, 2005, 03:45:42 PM »
I looked at 'function theme_linktree()' in index.template.php and I don't see an easy way to do what you did in BoardIndex.template.php.
The line in question is prolly 409:
Code: [Select]
echo '<b>', $settings['linktree_link'] && isset($tree['url']) ? '<a href="' . $tree['url'] . '" class="nav">' .
   $tree['name'] . '</a>' : $tree['name'], '</b>';
after the question mark

The URL that's being linked comes from a variable, $tree['url'], which again comes from $context['linktree']. The
Code: [Select]
<a href="' . $tree['url'] . '" would need to be replaced by the catogid link you used before, but it must come from $context['category']. I don't know how to do that...

Offline A.M.A

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 2,133
  • Gender: Male
  • ..
Re: Displaying only one Category
« Reply #12 on: January 17, 2005, 05:38:58 PM »
Please make a backup first.

in /Soucres/Load.php look for:
Code: [Select]
'url' => $scripturl . '#' . $board_info['cat']['id'],replace with:
Code: [Select]
'url' => $scripturl . '?catogid=' . $board_info['cat']['id'],
Really sorry .. real life is demanding my full attention .. will be back soon hopefully :)

Offline RicochetPeter

  • Semi-Newbie
  • *
  • Posts: 68
  • Gender: Male
Re: Displaying only one Category
« Reply #13 on: January 18, 2005, 01:43:58 AM »
kewl. got it. thanx again :-)

Offline mytreo

  • Jr. Member
  • **
  • Posts: 284
    • treo
Re: Displaying only one Category
« Reply #14 on: January 20, 2005, 01:38:59 PM »
Great thread, I needed to do the same and after reading this and messing aorund I have found a way to improve it so I'll share it here with you :)

This new method doesn't just hide the layer it actually changes the database query to only select the category that you want.

Pros:

1) the db query size is only as big as it needs to be, above you are still building ALL the categories into the array, then just hideing them from view
2) works in all browsers
3) the hidden categories disappear completely and no white space remains
4) you don't need to edit the template file

Cons:

1) Not really a con, but you need to edit the boardindex.php file NOT the template file.

How to do it:

Open BoardIndex.php and find the query at the top:

Code: [Select]
// Find all boards and categories, as well as related information.
$result_boards = db_query("
SELECT
c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
b.numPosts, b.numTopics, b.ID_PARENT,
IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? "
(IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ",
IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
FROM {$db_prefix}categories AS c, {$db_prefix}boards AS b
LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . "
LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
WHERE $user_info[query_see_board]
AND b.ID_CAT = c.ID_CAT
AND b.childLevel <= 1
ORDER BY c.catOrder, b.childLevel, b.boardOrder", __FILE__, __LINE__);

replace with our new query:

Code: [Select]
// Find all boards and categories, as well as related information.
$result_boards = db_query("
SELECT
c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
b.numPosts, b.numTopics, b.ID_PARENT,
IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? "
(IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ",
IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
FROM {$db_prefix}categories AS c, {$db_prefix}boards AS b
LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . "
LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
WHERE $user_info[query_see_board]
" . (isset($_REQUEST['catogid']) ? "
AND c.ID_CAT = {$_REQUEST['catogid']}" : '') . "
AND b.ID_CAT = c.ID_CAT
AND b.childLevel <= 1
ORDER BY c.catOrder, b.childLevel, b.boardOrder", __FILE__, __LINE__);

That's all!!  Just point at index.php?catogid=X where X is the category you wish to view :D

Example here: Just see the Star Developer Category at mytreo.net (catogid=4)

You can add links to the pages in the same way as you did above by editing the template file, or also by using that clever trick above in Load.php to change the linktree.

Hope someone else finds this useful. :)

Chris
Treo forum - Powered by SMF, of course
Treo news - powered by MovableType and integrated with SMF
Treo downloads - hacked from phpNuke and integrated with SMF
Treo knowledge base - powered by Wikka and integrated with SMF
Treo 650 | Treo 700w | Treo 700p

Offline A.M.A

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 2,133
  • Gender: Male
  • ..
Re: Displaying only one Category
« Reply #15 on: January 20, 2005, 04:56:05 PM »
Yup yours is much better .. I guess you could use the tree link modification without any problem. Right?
Really sorry .. real life is demanding my full attention .. will be back soon hopefully :)

Offline mytreo

  • Jr. Member
  • **
  • Posts: 284
    • treo
Re: Displaying only one Category
« Reply #16 on: January 20, 2005, 05:58:12 PM »
Yup yours is much better

Wholly inspired by you though, I wouldn't have known where to start otherwise but as I began messing with your code it all came together. I love SMF :D :D

Quote
I guess you could use the tree link modification without any problem. Right?

Yes right, it works just the same.

Chris
Treo forum - Powered by SMF, of course
Treo news - powered by MovableType and integrated with SMF
Treo downloads - hacked from phpNuke and integrated with SMF
Treo knowledge base - powered by Wikka and integrated with SMF
Treo 650 | Treo 700w | Treo 700p

Offline aaronsnet

  • Semi-Newbie
  • *
  • Posts: 21
  • Gender: Male
    • the detour
Re: Displaying only one Category
« Reply #17 on: March 16, 2005, 02:12:01 PM »
Anyone have a hack for the classic "BoardIndex.template.php" instead of the default?

thanks!

Offline A.M.A

  • SMF Friend
  • SMF Hero
  • *
  • Posts: 2,133
  • Gender: Male
  • ..
Re: Displaying only one Category
« Reply #18 on: March 16, 2005, 05:53:31 PM »
please check mytreo's method It does not need any template modifications so it will work with any theme.
Really sorry .. real life is demanding my full attention .. will be back soon hopefully :)

Offline Gobo

  • Sr. Member
  • ****
  • Posts: 912
  • Gender: Male
  • Peace Be Upon You
    • Path To Peace
Re: Displaying only one Category
« Reply #19 on: June 13, 2006, 11:47:54 AM »
Great thread, I needed to do the same and after reading this and messing aorund I have found a way to improve it so I'll share it here with you :)

This new method doesn't just hide the layer it actually changes the database query to only select the category that you want.

Pros:

1) the db query size is only as big as it needs to be, above you are still building ALL the categories into the array, then just hideing them from view
2) works in all browsers
3) the hidden categories disappear completely and no white space remains
4) you don't need to edit the template file

Cons:

1) Not really a con, but you need to edit the boardindex.php file NOT the template file.

How to do it:

Open BoardIndex.php and find the query at the top:

Code: [Select]
// Find all boards and categories, as well as related information.
$result_boards = db_query("
SELECT
c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
b.numPosts, b.numTopics, b.ID_PARENT,
IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? "
(IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ",
IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
FROM {$db_prefix}categories AS c, {$db_prefix}boards AS b
LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . "
LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
WHERE $user_info[query_see_board]
AND b.ID_CAT = c.ID_CAT
AND b.childLevel <= 1
ORDER BY c.catOrder, b.childLevel, b.boardOrder", __FILE__, __LINE__);

replace with our new query:

Code: [Select]
// Find all boards and categories, as well as related information.
$result_boards = db_query("
SELECT
c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
b.numPosts, b.numTopics, b.ID_PARENT,
IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? "
(IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ",
IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
FROM {$db_prefix}categories AS c, {$db_prefix}boards AS b
LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . "
LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
WHERE $user_info[query_see_board]
" . (isset($_REQUEST['catogid']) ? "
AND c.ID_CAT = {$_REQUEST['catogid']}" : '') . "
AND b.ID_CAT = c.ID_CAT
AND b.childLevel <= 1
ORDER BY c.catOrder, b.childLevel, b.boardOrder", __FILE__, __LINE__);

That's all!!  Just point at index.php?catogid=X where X is the category you wish to view :D

Example here: Just see the Star Developer Category at mytreo.net (catogid=4)

You can add links to the pages in the same way as you did above by editing the template file, or also by using that clever trick above in Load.php to change the linktree.

Hope someone else finds this useful. :)

Chris

hi

im getting this error

Unknown column 'lb.logTime' in 'field list'
File: /home/.cash/akulion/path-to-peace.net/forum/Sources/BoardIndex.php
Line: 85

im using smf 1.1rc2 with TP