Cache System Explanation (datastore)
1 Attachment(s)
I'm going to try and explain the datastore system used in vBulltin. This tutorial is based around users who are already familar with PHP and MySQL.
What is Cache? I'll show you way using the datastore is a better solution for you and the users who will use your hacks. Attachment 44423 Now everytime you add, edit, or delete your information, it will be changed in the database. Here is an example of the database tree. We have 3 rows of information. Attachment 44424 PHP Code:
Then you need to use the function called build_datastore(). This function requires the following. build_datastore(1, 2). #1 is the name of your datastore item, and number two is the serialize information to store. This function will create a new datastore item with the name and all your info. The serialize info will look like this... Code:
a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:4:"name";s:3:"Dog";s:5:"value";s:3:"Dog";}i:1;a:3:{s:2:"id";s:1:"2";s:4:"name";s:3:"Cat";s:5:"value";s:3:"Cat";}i:2;a:3:{s:2:"id";s:1:"3";s:4:"name";s:3:"Cow";s:5:"value";s:3:"Cow";}} Attachment 44425 Don't let the serialize data freak you out. You don't really NEED to read that data. Though I kinda like doing it, so I'll break it down alittle for you. Here is a tree of the serialize data. Code:
a:3:{ PHP Code:
PHP Code:
(ID: 1) (Title: Dog) (Value: Dog) (ID: 2) (Title: Cat) (Value: Cat) (ID: 3) (Title: Cow) (Value: Cow) What your doing is simple. The variable $vbulletin->dropmenu holds the information though it's still serialize. The reason why $vbulletin->dropmenu is the variable is because you need to tell vBulletin which datastore row to get. In this case it is dropmenu because remember we stored it in there like this: build_datastore('dropmenu', serialize($variable_array)); Now in order for vBulletin to know about that specific row, you need to add it to the $specialtemplates array. Example: PHP Code:
So $vbulletin->dropmenu = unserialize($vbulletin->dropmenu); baiscly gets the serialize info and unserialize's it using the function called unserialize() Once that is finished you want to loop the info using a foreach() function. foreach ($vbulletin->dropmenu AS $dropmenu). Doing that is storing the array info into $dropmenu and you can get each one by using the following vaiables. $dropmenu['id'], $dropmenu['title'], and $dropmenu['value']. The reason why this is better is because vBulletin allready runs one global query to get all the datatore information. So instead of running a query everytime you want to get the drop down information, you just get it from the datastore and save that query. Some may think this is kinda extreme when you can just run a query, though as your site grows; you want to save as many queires as possiable. If your interested in saving queries and bandwidth. I would suggest taking a look at Trigunflames profile. He has released many hacks to help in these areas. :) Copyright ?2004-2006 vBHackers.com All Rights Reserved. This tutorial may not be redistributed in whole or significant part. |
Excellent article!
The only thing I have to say, "Damn, these thumbnail size!" |
great, now I can understand how it can be used :)
|
Great article. Thank you, LiveWire.
|
very, very, great tutorial 'ken' ;)
|
huh now i get what the a:3 means its the size of the array. damn i feel dumb now.
|
Nice. Is it useful write my own items to file-based datastore cache?
If yes, how I can do this ? |
right..
I'm being thick here, clearly : I want to show $numbermembers and $totalposts at the top of each page of my forum, from within the header template. As these two values are not available unless you've already parsed the forumhome stats, I've successfully cached these values just after they are calculated at the end of index.php. I have added it to special templates on the index.php page. The problem I'm having is getting the data back out again, and into a useable format so I can insert it into the template. I'm missing a step somewhere.. If I stick $vbulletin->cachedstats into the header template I see the full serialised data in there, but I can't work out from the examples exactly how (and probably more importantly WHERE) to unserialise the data and turn it into eval variables that I can use in the header template. If anyone could give me a bit of code and tell me where to put it, I would be eternally greatful! Thanks in advance. Simon |
You need $vbulletin->cachedstats = unserialize($vbulletin->cachedstats);
for all data (except loaded from file based datastore in my case). store full parsed html code for maximum speed. If not, use like this in templates : Total users : {$vbulletin->cachedstats[totalusers]} |
Thank you netwind.
Could you please tell me where I can put the unserialise code? I've tried lots of places, but wherever I'm placing it seems to be either before the cache memory is populated, or after the header has been built. cheers |
All times are GMT. The time now is 04:20 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 | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|