Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions

Reply
 
Thread Tools Display Modes
  #11  
Old 01-29-2005, 05:51 AM
TECK's Avatar
TECK TECK is offline
 
Join Date: Nov 2001
Location: Canada
Posts: 4,182
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Zurih, can I give you an advice? Buy few PHP and MySQL books and start studying, it will help you understand better the code, as well to write it your way... the good way.

First, let me say that vBulletin is a very inteligent piece of software, that finds a good balance between the right usage of PHP/MySQL, in order to avoid any stress on the server. Many coders do not understand this simple thing and create monstreous pieces of code that make "old school" scream or laugh to die off... I imagine Scott, Stefan etc. having a winky smile while snooping at certain "code mods" (I laugh also at some of my first hacks released here at vb.org, they are really pathetic... ) released by people who want only to have 2000000000 hacks in their list with no quality or performance to be considered as part of VB software.

Let's review the code above.
Keep in mind that you ned this code into the main index.php, why do you need to bulk it with unneeded queries? Is useless, please don't do it.

Simplify as much as possible you code and add as less hacks you need into the original VB software, unless you write it yourself and you are sure they are performant.

If I would be you, I would do this:
1. Write a new template with the minimum content of latest threads, no need to add extra bells, people don't read it anyway.
2. Avoid extra queries or full table scans, keep it really simple.
3. Order by lastpost, not dateline... you want to get the latest threads where people posted, not the ones who where started at a certain date.

One rule, less code is better always.

Here it is a basic example:
Code:
$forumperms = array();
foreach ($forumcache AS $forum)
{
	$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);
	if (!($forumperms["$forum[forumid]"] and CANVIEW) or !($forumperms["$forum[forumid]"] and CANVIEWOTHERS))
	{
		$limitfids .= ',' . $forum['forumid'];
	}
}

$getthreads = $DB_site->query("
	SELECT thread.title, thread.date, thread.time, thread.replycount
	FROM " . TABLE_PREFIX . "thread AS thread
	WHERE open = '1'
	AND thread.lastpost >= " . (time() - 86400) . "
	AND forumid NOT IN (0$limitfids)
	AND thread.visible = '1'
	ORDER BY lastpost DESC
	LIMIT 5
");

while ($thread = $DB_site->fetch_array($getthreads))
{
	$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68));
	$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
	$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
	$thread['replycount'] = vb_number_format($thread['replycount']);

	eval('$threadbits .= "' . fetch_template('myowntemplate_latestthreadbit') . '";');
}

unset($forum, $thread, $threads);
$DB_site->free_result($getthreads);
Take a look at this part:
thread.lastpost >= " . (time() - 86400) . "

You only grap threads where the last posts were made in the last day only...
60sec * 60min * 24hrs = 86400 (1 day)

Simple and elegant, with the basic info only...
And please, use the right syntax, tabs, brackets, etc. People need to show respect to the VB devs, by writing code the VB way, not the jungle way.
If you buy those books, I bet you will have your way around in less then 6 months...

Cheers.
Reply With Quote
  #12  
Old 01-29-2005, 06:54 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

TECK, thanks for this useful info!
I really looked at the code and realized that 50% of it is not necessary.

Now I have to start looking at the codes of the hacks I've installed...
But in overall I really dont add any hacks that I really dont need for my board.

The code you gave me is works like a charm.
Really appreciate your help..
The query count is down by 1!
And I have to buy one of those books!

One thing though, I cant figure is out how to add the forumname of the thread to the info. All the things I tried gave me a Database error. You can see what I've tried in this thread...

Thanks again! :classic:
Reply With Quote
  #13  
Old 01-29-2005, 07:27 AM
cinq's Avatar
cinq cinq is offline
 
Join Date: Oct 2002
Posts: 1,398
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TECK


Here it is a basic example:
Code:
$forumperms = array();
foreach ($forumcache AS $forum)
{
	$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);
	if (!($forumperms["$forum[forumid]"] and CANVIEW) or !($forumperms["$forum[forumid]"] and CANVIEWOTHERS))
	{
		$limitfids .= ',' . $forum['forumid'];
	}
}

$getthreads = $DB_site->query("
	SELECT thread.title, thread.date, thread.time, thread.replycount
	FROM " . TABLE_PREFIX . "thread AS thread
	WHERE open = '1'
	AND thread.lastpost >= " . (time() - 86400) . "
	AND forumid NOT IN (0$limitfids)
	AND thread.visible = '1'
	ORDER BY lastpost DESC
	LIMIT 5
");

while ($thread = $DB_site->fetch_array($getthreads))
{
	$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68));
	$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
	$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
	$thread['replycount'] = vb_number_format($thread['replycount']);

	eval('$threadbits .= "' . fetch_template('myowntemplate_latestthreadbit') . '";');
}

unset($forum, $thread, $threads);
$DB_site->free_result($getthreads);
A typo in red ?

Quote:
Originally Posted by TECK
Code:
$forumperms = array();
foreach ($forumcache AS $forum)
{
	$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);
	if (!($forumperms["$forum[forumid]"] and CANVIEW) or !($forumperms["$forum[forumid]"] and CANVIEWOTHERS))
	{
		$limitfids .= ',' . $forum['forumid'];
	}
}

$getthreads = $DB_site->query("
	SELECT thread.title, thread.date, thread.time, thread.replycount, f.title as forumtitle
	FROM " . TABLE_PREFIX . "thread AS thread
        LEFT JOIN " . TABLE_PREFIX . "forum as f
        ON f.forumid = thread.forumid
	WHERE thread.open = '1'
	AND thread.lastpost >= " . (time() - 86400) . "
	AND  thread.forumid NOT IN ($limitfids)
	AND thread.visible = '1'
	ORDER BY  thread.lastpost DESC
	LIMIT 5
");

while ($thread = $DB_site->fetch_array($getthreads))
{
	$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68));
	$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
	$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
	$thread['replycount'] = vb_number_format($thread['replycount']);
        $forumname = $thread['forumtitle'];
	eval('$threadbits .= "' . fetch_template('myowntemplate_latestthreadbit') . '";');
}

unset($forum, $thread, $threads);
$DB_site->free_result($getthreads);
Adding on to TECK's code, this should give you the forum of that particular thread as well. ( use $forumname in your template ).
Changes in red bold

Hope that helps.
Reply With Quote
  #14  
Old 01-29-2005, 07:52 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

thanks cinq,

but after I add those lines I've got:

mysql error: Column: 'forumid' in where clause is ambiguous
mysql error number: 1052

:ermm:
Reply With Quote
  #15  
Old 01-29-2005, 07:55 AM
cinq's Avatar
cinq cinq is offline
 
Join Date: Oct 2002
Posts: 1,398
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

try again, editted my post.
Reply With Quote
  #16  
Old 01-29-2005, 07:59 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

changed... same error... god knows why

A full code of my index.php will help?
Reply With Quote
  #17  
Old 01-29-2005, 08:01 AM
cinq's Avatar
cinq cinq is offline
 
Join Date: Oct 2002
Posts: 1,398
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

ok try again.
Should work now.
Reply With Quote
  #18  
Old 01-29-2005, 08:11 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

now I've got

mysql error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')
AND thread.visible = '1'
ORDER BY thread.lastpost DESC
mysql error number: 1064
Reply With Quote
  #19  
Old 01-29-2005, 08:17 AM
cinq's Avatar
cinq cinq is offline
 
Join Date: Oct 2002
Posts: 1,398
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Odd, I dont see any error.
But i do wonder what columns are you looking for when you want these :

PHP Code:
thread.datethread.time 
There are no such columns.
Reply With Quote
  #20  
Old 01-29-2005, 08:25 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yes i know, I changed that..

now I have:
thread.lastpost, thread.threadid, thread.postuserid, thread.postusername,thread.title, thread.replycount

I have no idea why I'm getting this annoying error :ermm:
I modified index.php (and others) a lot, but I dont see any dependence on the forumname code...
Reply With Quote
Reply

Thread Tools
Display Modes

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 08:21 AM.


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.04483 seconds
  • Memory Usage 2,261KB
  • Queries Executed 11 (?)
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
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_code
  • (1)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)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