Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 11-30-2012, 01:08 PM
pxd pxd is offline
 
Join Date: Jan 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default $vbulletin->datastore->fetch(array('customname')) adds 1 extra database call

I've been using the following lines of code to pull custom data from the datastore table:
PHP Code:
$vbulletin->datastore->fetch(array('customname'));
$data $vbulletin->customname
However, I noticed that it adds an extra database call, which means I can't actually take full advantage of the caching system in vBulletin that way.

Question is, would there be a better approach to this to avoid the extra db load to the server? Perhaps another way to hook the "customname" to the default items loaded from the datastore?

Thanks!
Reply With Quote
  #2  
Old 11-30-2012, 01:38 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You can create a plugin using hook init_startup and do this:

Code:
$new_datastore_fetch[] = 'customname';

That may still add a query if you have no other products adding to $new_datastore_fetch, but if there are other products using it then they will be combined in to one query (the blog uses it, so if you have that then this won't add a query).
Reply With Quote
  #3  
Old 11-30-2012, 03:26 PM
pxd pxd is offline
 
Join Date: Jan 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$new_datastore_fetch[] = 'customname'
I added the above line to the "init_startup" hook and it did nothing. (I replaced "customname" with the correct title).

I also tried another formula which I came across in another discussion here on vB.org
PHP Code:
$datastore_fetch[] = "'customname'"
but it did not do anything either.

Anything else I might be missing, please?
Using vB 4.2.0.
Reply With Quote
  #4  
Old 11-30-2012, 03:32 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hmm...we discussed this in the coder area not too long ago, and user Disasterpiece posted this code:

Code:
global $new_datastore_fetch;

if (!isset($new_datastore_fetch) || !is_array($new_datastore_fetch)) {
    $new_datastore_fetch = array('userstats');
} elseif (!in_array('userstats', $new_datastore_fetch)) {
    $new_datastore_fetch[] = 'userstats';
}

I didn't post all that because looking at the code around the init_startup hook it doesn't look like it should be necessary, but you might want to try it.

Where are you trying to use $vbulletin->customname (or whatever the actual name is), is it in a plugin or a custom script?
Reply With Quote
  #5  
Old 11-30-2012, 03:51 PM
pxd pxd is offline
 
Join Date: Jan 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks, kh99.

For testing purposes,
I attach the following code to the "init_startup" hook
and get nothing:

PHP Code:
global $new_datastore_fetch;

if (!isset(
$new_datastore_fetch) || !is_array($new_datastore_fetch)) {
    
$new_datastore_fetch = array('customname');
} elseif (!
in_array('customname'$new_datastore_fetch)) {
    
$new_datastore_fetch[] = 'customname';
}

print_r($vbulletin->customname); 

At the same time, the following works
(even though I'd really wish to avoid using it for the sake of saving on a few db calls):

PHP Code:
$vbulletin->datastore->fetch(array('customname')); 
print_r($vbulletin->customname); 
Reply With Quote
  #6  
Old 11-30-2012, 03:54 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, you won't be able to use the data in the init_startup hook because it hasn't been loaded yet, it's just adding your field to the array of fields to be loaded. But if you check $vbulletin->customname somewhere after the init_startup hook has executed (just about any other hook location since init_startup is first), you should find that it works.
Reply With Quote
  #7  
Old 11-30-2012, 10:35 PM
pxd pxd is offline
 
Join Date: Jan 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
if you check $vbulletin->customname somewhere after the init_startup hook has executed (just about any other hook location since init_startup is first), you should find that it works.
That was it, thanks a lot!
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 01:31 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.08648 seconds
  • Memory Usage 2,230KB
  • Queries Executed 13 (?)
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
  • (2)bbcode_code
  • (5)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)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_postinfo_query
  • fetch_postinfo
  • 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