Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 3.0 > vBulletin 3.0 Full Releases
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
Latest Threads On Forum Home Details »»
Latest Threads On Forum Home
Version: 1.00, by NTLDR (Coder) NTLDR is offline
Developer Last Online: Oct 2004 Show Printable Version Email this Page

Version: 3.0.0 Rating:
Released: 01-20-2004 Last Update: Never Installs: 170
 
No support by the author.

Latest Threads On Forum Home
Version: 1.0.2
vB-version: 3.0.0 Release Candidate 2
Developer: NTLDR
Install-difficulty: 1
File-edits: 2
Template-edits: 1

Description of the Hack:
This is taken from my vBindex hack and will display the latest X threads on your forum home page. Permissions are done automatically so forums users can't view will be excluded. Includes thread icon/goto new post image (if the thread is unread), title, last post info, number of views and replies.



Files modified for this Hack:
index.php


New templates for this Hack:
forumhome_latestthreadbit


Templates modified for this Hack:
FORUMHOME

New phrases for this Hack:
latest_threads

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #92  
Old 04-27-2004, 01:17 PM
dutchbb dutchbb is offline
 
Join Date: Nov 2003
Posts: 899
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by NTLDR
Latest Threads On Forum Home
Can this be set by usergroup? And how would I do that please.

Great hack!
Reply With Quote
  #93  
Old 04-27-2004, 01:19 PM
dutchbb dutchbb is offline
 
Join Date: Nov 2003
Posts: 899
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TECK
Hi Lee,
I looked at your code and I think there is a problem with your hack.
You are doing full table scans and that could easily crash your server in a busy site.

Your search for latest threads should generate at least a 70% MySQL activity...
IMO is extremly high. Let me know what you think.

Regards,
Floren.
Hm doesn't sound good, interested in what he has to say...
Reply With Quote
  #94  
Old 04-27-2004, 01:20 PM
NTLDR's Avatar
NTLDR NTLDR is offline
Coder
 
Join Date: Apr 2002
Location: Bristol, UK
Posts: 3,644
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Triple_T
Can this be set by usergroup? And how would I do that please.

Great hack!
You mean only display the latest threads block for certain groups?
Reply With Quote
  #95  
Old 04-28-2004, 02:27 PM
dutchbb dutchbb is offline
 
Join Date: Nov 2003
Posts: 899
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by NTLDR
You mean only display the latest threads block for certain groups?
Yes, like only for paid membership groups.

Is it true what Teck said?
Reply With Quote
  #96  
Old 04-28-2004, 02:37 PM
NTLDR's Avatar
NTLDR NTLDR is offline
Coder
 
Join Date: Apr 2002
Location: Bristol, UK
Posts: 3,644
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Replace:

PHP Code:
// [START HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ]
// #################### PROCESS LATEST THREADS #######################
// fetch the permissions for each forum
$forumperms = array();
foreach(
$forumcache AS $forum) {

    
$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);

    
// ## HIDE FORUMS WITHOUT THE CANVIEW OR CANVIEWOTHERS PERMISSION ##
    
if (!($forumperms["$forum[forumid]"] & CANVIEW) || !($forumperms["$forum[forumid]"] & CANVIEWOTHERS)) {
        
$limitfids .= ','.$forum['forumid'];
    }
}
unset(
$forum);

if (
$vboptions['threadpreview'] > 0) {
    
$previewfield ', post.pagetext AS preview';
    
$previewjoin 'LEFT JOIN '.TABLE_PREFIX.'post AS post ON(post.postid = thread.firstpostid)';
}

$getthreads $DB_site->query("
    ## GET LATEST THREADS ##
    SELECT thread.*,thread.iconid AS threadiconid 
$previewfield
    FROM "
.TABLE_PREFIX."thread AS thread
    LEFT JOIN "
.TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')
    
$previewjoin
    WHERE open = '1'
    AND forumid NOT IN (0
$limitfids)
    AND thread.visible = '1'
    AND deletionlog.primaryid IS NULL
    ORDER BY lastpost
    DESC LIMIT 5"
);

while(
$thread $DB_site->fetch_array($getthreads)) {

    
$threads true;
    
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 22));
    
$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
    
$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
    
$thread['preview'] = preg_replace('#\[quote(=("|"|\'|).*\\2)?\](.*)\[/quote\]#siU'''$thread['preview']);
    
$thread['preview'] = htmlspecialchars_uni(fetch_trimmed_title(strip_bbcode(fetch_censored_text($thread['preview']), falsetrue), $vboptions['threadpreview']));
    
$thread['replycount'] = vb_number_format($thread['replycount']);
    
$thread['views'] = vb_number_format($thread['views']);

    
// thread icon
    
$show['icon'] = false;
  
$icon fetch_iconinfo($thread['iconid']);

  if (
is_array($icon)) {
      
$show['icon'] = true;
      
$thread['threadiconpath'] = $icon['iconpath'];
      
$thread['threadicontitle'] = $icon['title'];
  }

    
// show goto new post
    
$show['firstnew'] = false;
    
$bbforumview fetch_bbarray_cookie('forum_view'$thread['forumid']);

    if (
$bbforumview $bbuserinfo['lastvisit']) {
        
$lastread $bbforumview;
    } else {
        
$lastread $bbuserinfo['lastvisit'];
    }

    if (
$thread['lastpost'] > $lastread) {

        
$threadview fetch_bbarray_cookie('thread_lastview'$thread['threadid']);

        if (
$thread['lastpost'] > $threadview) {
            
$show['firstnew'] = true;
            
$show['icon'] = false;
        }
    }

    
exec_switch_bg();

    eval(
"\$threadbits .= \"".fetch_template('forumhome_latestthreadbit')."\";");
}
if (
$threads) {
    
$show['latestthreads'] = true;
}
// memory saving
unset($thread$threads);
$DB_site->free_result($getthreads);
// [END HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ] 
With: (Changing X to the usergroupid you wish to show it for
PHP Code:
if (is_member_of($bbuserinfoX) {

    
// [START HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ]
    // #################### PROCESS LATEST THREADS #######################
    // fetch the permissions for each forum
    
$forumperms = array();
    foreach(
$forumcache AS $forum) {

        
$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);

        
// ## HIDE FORUMS WITHOUT THE CANVIEW OR CANVIEWOTHERS PERMISSION ##
        
if (!($forumperms["$forum[forumid]"] & CANVIEW) || !($forumperms["$forum[forumid]"] & CANVIEWOTHERS)) {
            
$limitfids .= ','.$forum['forumid'];
        }
    }
    unset(
$forum);

    if (
$vboptions['threadpreview'] > 0) {
        
$previewfield ', post.pagetext AS preview';
        
$previewjoin 'LEFT JOIN '.TABLE_PREFIX.'post AS post ON(post.postid = thread.firstpostid)';
    }

    
$getthreads $DB_site->query("
        ## GET LATEST THREADS ##
        SELECT thread.*,thread.iconid AS threadiconid 
$previewfield
        FROM "
.TABLE_PREFIX."thread AS thread
        LEFT JOIN "
.TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')
        
$previewjoin
        WHERE open = '1'
        AND forumid NOT IN (0
$limitfids)
        AND thread.visible = '1'
        AND deletionlog.primaryid IS NULL
        ORDER BY lastpost
        DESC LIMIT 5"
);

    while(
$thread $DB_site->fetch_array($getthreads)) {

        
$threads true;
        
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 22));
        
$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
        
$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
        
$thread['preview'] = preg_replace('#\[quote(=("|"|\'|).*\\2)?\](.*)\[/quote\]#siU'''$thread['preview']);
        
$thread['preview'] = htmlspecialchars_uni(fetch_trimmed_title(strip_bbcode(fetch_censored_text($thread['preview']), falsetrue), $vboptions['threadpreview']));
        
$thread['replycount'] = vb_number_format($thread['replycount']);
        
$thread['views'] = vb_number_format($thread['views']);

        
// thread icon
        
$show['icon'] = false;
      
$icon fetch_iconinfo($thread['iconid']);

      if (
is_array($icon)) {
          
$show['icon'] = true;
          
$thread['threadiconpath'] = $icon['iconpath'];
          
$thread['threadicontitle'] = $icon['title'];
      }

        
// show goto new post
        
$show['firstnew'] = false;
        
$bbforumview fetch_bbarray_cookie('forum_view'$thread['forumid']);

        if (
$bbforumview $bbuserinfo['lastvisit']) {
            
$lastread $bbforumview;
        } else {
            
$lastread $bbuserinfo['lastvisit'];
        }

        if (
$thread['lastpost'] > $lastread) {

            
$threadview fetch_bbarray_cookie('thread_lastview'$thread['threadid']);

            if (
$thread['lastpost'] > $threadview) {
                
$show['firstnew'] = true;
                
$show['icon'] = false;
            }
        }

        
exec_switch_bg();

        eval(
"\$threadbits .= \"".fetch_template('forumhome_latestthreadbit')."\";");
    }
    if (
$threads) {
        
$show['latestthreads'] = true;
    }
    
// memory saving
    
unset($thread$threads);
    
$DB_site->free_result($getthreads);
    
// [END HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ]

I've had no problems running this code on several sites, though I may look into optimising it if and when I have time.
Reply With Quote
  #97  
Old 04-28-2004, 02:43 PM
dutchbb dutchbb is offline
 
Join Date: Nov 2003
Posts: 899
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for this very quick reply
Reply With Quote
  #98  
Old 04-28-2004, 08:45 PM
TECK's Avatar
TECK TECK is offline
 
Join Date: Nov 2001
Location: Canada
Posts: 4,182
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by NTLDR
I've had no problems running this code on several sites, though I may look into optimising it if and when I have time.
Lee, I hope you did not take it in a bad way my reflection, I was simply trying to help.

If you allow me, I will explain what is wrong with the code.
The query will perform a full scan from ALL forums and ALL threads. At this precise moment, the MySQL % will raise to the sky... for an instance the server will be suffocated with the flood of information it has to compile, in order to display the results, and that?s only for one person... imagine what will happen when 500 users will visit in the same time your front page.

A good rule to keep in mind for coders is: never perform full table scans.
If you have a very small forum with 200-300 posts, that will not really count, since your database is very small, but what do you do with huge forums who have 1 million posts?
Unfortunatelly, the 5 threads limit does not reduce the query scan at all, it will perform it, then grab only the latest 5 results.

What I recommend you to do is this: put a time/date limit in the query. In this way, instead of scanning the hole forum/thread tables, you select a very small portion of it.
The result is obvious, a very small database/server usage...

Regards,
Floren.
Reply With Quote
  #99  
Old 04-30-2004, 08:45 PM
dutchbb dutchbb is offline
 
Join Date: Nov 2003
Posts: 899
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by NTLDR
With: (Changing X to the usergroupid you wish to show it for
PHP Code:
if (is_member_of($bbuserinfoX) {

    
// [START HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ]
    // #################### PROCESS LATEST THREADS #######################
    // fetch the permissions for each forum
    
$forumperms = array();
    foreach(
$forumcache AS $forum) {

        
$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);

        
// ## HIDE FORUMS WITHOUT THE CANVIEW OR CANVIEWOTHERS PERMISSION ##
        
if (!($forumperms["$forum[forumid]"] & CANVIEW) || !($forumperms["$forum[forumid]"] & CANVIEWOTHERS)) {
            
$limitfids .= ','.$forum['forumid'];
        }
    }
    unset(
$forum);

    if (
$vboptions['threadpreview'] > 0) {
        
$previewfield ', post.pagetext AS preview';
        
$previewjoin 'LEFT JOIN '.TABLE_PREFIX.'post AS post ON(post.postid = thread.firstpostid)';
    }

    
$getthreads $DB_site->query("
        ## GET LATEST THREADS ##
        SELECT thread.*,thread.iconid AS threadiconid 
$previewfield
        FROM "
.TABLE_PREFIX."thread AS thread
        LEFT JOIN "
.TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')
        
$previewjoin
        WHERE open = '1'
        AND forumid NOT IN (0
$limitfids)
        AND thread.visible = '1'
        AND deletionlog.primaryid IS NULL
        ORDER BY lastpost
        DESC LIMIT 5"
);

    while(
$thread $DB_site->fetch_array($getthreads)) {

        
$threads true;
        
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 22));
        
$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
        
$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
        
$thread['preview'] = preg_replace('#\[quote(=("|"|\'|).*\\2)?\](.*)\[/quote\]#siU'''$thread['preview']);
        
$thread['preview'] = htmlspecialchars_uni(fetch_trimmed_title(strip_bbcode(fetch_censored_text($thread['preview']), falsetrue), $vboptions['threadpreview']));
        
$thread['replycount'] = vb_number_format($thread['replycount']);
        
$thread['views'] = vb_number_format($thread['views']);

        
// thread icon
        
$show['icon'] = false;
      
$icon fetch_iconinfo($thread['iconid']);

      if (
is_array($icon)) {
          
$show['icon'] = true;
          
$thread['threadiconpath'] = $icon['iconpath'];
          
$thread['threadicontitle'] = $icon['title'];
      }

        
// show goto new post
        
$show['firstnew'] = false;
        
$bbforumview fetch_bbarray_cookie('forum_view'$thread['forumid']);

        if (
$bbforumview $bbuserinfo['lastvisit']) {
            
$lastread $bbforumview;
        } else {
            
$lastread $bbuserinfo['lastvisit'];
        }

        if (
$thread['lastpost'] > $lastread) {

            
$threadview fetch_bbarray_cookie('thread_lastview'$thread['threadid']);

            if (
$thread['lastpost'] > $threadview) {
                
$show['firstnew'] = true;
                
$show['icon'] = false;
            }
        }

        
exec_switch_bg();

        eval(
"\$threadbits .= \"".fetch_template('forumhome_latestthreadbit')."\";");
    }
    if (
$threads) {
        
$show['latestthreads'] = true;
    }
    
// memory saving
    
unset($thread$threads);
    
$DB_site->free_result($getthreads);
    
// [END HACK='Latest Threads On Forum Home' AUTHOR='NTLDR' VERSION='1.0.0' CHANGEID= 2 ]

Sorry to ask, can you give an example when using permission for 2 or more usergroups, I 'm not sure if and how to use the "OR" here
Reply With Quote
  #100  
Old 04-30-2004, 08:52 PM
Dio Br@ndo's Avatar
Dio Br@ndo Dio Br@ndo is offline
 
Join Date: Apr 2002
Posts: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Create a new phrase called latest_threads in the GLOBAL group with the following content:

i dont understand where create the phrase....can u explain me better pls?

and

$thread['views'] = vb_number_format($thread['views']);

doesnt works and show always 0 :ermm:
Reply With Quote
  #101  
Old 04-30-2004, 08:57 PM
NTLDR's Avatar
NTLDR NTLDR is offline
Coder
 
Join Date: Apr 2002
Location: Bristol, UK
Posts: 3,644
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TECK
Lee, I hope you did not take it in a bad way my reflection, I was simply trying to help.
Of course not, thanks for the input, I'll try and update the instructions with a more suitable query
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:53 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07391 seconds
  • Memory Usage 2,433KB
  • Queries Executed 25 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (3)bbcode_php
  • (7)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (1)pagenav_pagelinkrel
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete