Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
  #1  
Old 05-12-2003, 02:10 AM
Velocd's Avatar
Velocd Velocd is offline
 
Join Date: Mar 2002
Location: CA University
Posts: 1,696
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Simplifying this vB defined function, and eliminating the extra-queries.

This is sparked off from the thread by MadMax titled "How to check version," from the post where filburt said never to include queries inside a while loop.

This is obvious because most of the time there are easy ways to get around not having to include a query within a while loop.

But-- there is a defined recursive function in adminfunctions.php, called get makeforumchooser(), that does query in a while loop, and for good reason-- as I've tried to figure out a more efficient way of doing it (for another script of mine), but can't seem to.

PHP Code:
function makeforumchooser($name="forumid",$selectedid=-1,$forumid=-1,$depth="",$topname="No one",$title="Forum Parent",$displaytop=1,$displayid=0) {
  
// $selectedid: selected forum id; $forumid: forumid to begin with;
  // $depth: character to prepend deep forums; $topname: name of top level forum (ie, "My BB", "Top Level", "No one");
  // $title: label for the drop down (listed to the left of it); $displaytop: display top level forum (0=no; 1=yes)

  
global $DB_site;

  if (
$forumid==-1) {
    echo 
"<tr class='".getrowbg()."' valign='top'>\n<td><p>$title</p></td>\n<td><p><select name=\"$name\" size=\"1\">\n";
    if (
$displaytop==1) {
      echo 
"<option value=\"-1\" ".iif($selectedid==$forumid,"SELECTED","").">$depth$topname</option>\n";
    }
  } else {
    
$foruminfo=$DB_site->query_first("SELECT forumid,title,allowposting 
FROM forum 
WHERE forumid=
$forumid");
    echo 
"<option value=\"$foruminfo[forumid]\" " iif($selectedid==$forumid,"SELECTED","") . ">
$depth$foruminfo[title]iif($foruminfo['allowposting'],""," (no posting)").iif($displayid,$foruminfo[forumid]","--")."</option>\n";
  }

  
$depth.="--";

  
$forums=$DB_site->query("SELECT forumid FROM forum WHERE parentid=$forumid ORDER BY displayorder");
  while (
$forum=$DB_site->fetch_array($forums)) {
    
makeforumchooser("forumid",$selectedid,$forum[forumid],$depth,"","",1,$displayid);
  }

  if (
$forumid==-1) {
    echo 
"</select>\n</p></td>\n</tr>\n";
  }

The basic apparent problem with querying in a while-loop in this situation is that for every forum added, a query is added.
Reply With Quote
  #2  
Old 05-12-2003, 07:13 PM
Xenon's Avatar
Xenon Xenon is offline
 
Join Date: Oct 2001
Location: Bavaria
Posts: 12,878
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

well always remember, the admincp is not the board itself.
in acp you can use queries in a loop as it's easier to write and you are normally the only one who is involved.

but if you really want to eleminate the queries, take a closer look at the get forumjump function of vb and remove the permission parts from it
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:25 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.06131 seconds
  • Memory Usage 2,177KB
  • 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
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (2)post_thanks_box
  • (2)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit_info
  • (2)postbit
  • (2)postbit_onlinestatus
  • (2)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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete