I thought I would post my experience of learning php and the way vB works under the hood. Please contribute if you have anything to add or if I need correcting!
Why? My reason for posting this is because I think learning to modify your vBulletin source is quite confusing if you keep refering to the php/mySQL site to try and understand their code. vB uses its own functions which actually save you time and help you quickly develop your idea and keep it consistant throughout the forum. These snippets of code are precious in my opinion, and I thought I would share what I have learnt so far! Firstly you should obviously read the "Do's and Don'ts" thread in this forum to make sure you don't screw everything up. Even better, install a second vB (which is private and non operational) and that also uses a second database. If you do break/corrupt anything its not going to matter. :) On with the show.. Getting information (queries) Instead of using the standard basic mySQL function to connect to the forum database and get/put information as documented on the php site - vBulletin has its own function which does this in a cleaner way. PHP Code:
$DB_site->query is the piece of magic here. All of the stuff that you may have read on on the php.net site concerning connecting to databases - you can forget for the moment. :) $DB_site->query is great for quickly and easily grabbing information, however complex the query without worring about the details of the connection. The variable $results becomes equal to everything (*) in the user table and stored as an array ($results) with many sets. Next we need to cycle though all of these records and either extract or use the information we have. This can be done with a while statement and also the fetch_array function built into vB for us to take advantage of! fetch_array is a condition which can be used in the while statement to "Keep looping until we're all out of records". Tip!: When picking variable names, keep them logical. For queries which return an array, use a plural (such as $results not $result). For queries which make use of query_first or when looping though an array, use a singular variable name to indicate you are being specific to 1 record and not all of the information. PHP Code:
Sometimes though, we know we only want to get 1 record which has a unique feature or condition. Example: "select the forum title from the forum table where the forumid = 6". This can be done using a query_first connection as below: PHP Code:
PHP Code:
Thats all folks! For the moment anyway. If anyone else with more hacking experience has ways in which we can save time and keep things simple - please reply. I'll try and post how to build tables in the admin cp and how variables are passwed between forms. HTH someone! Its taken me long enough to work out. Comments, errors and revisions welcomed. |
Just something random I picked up:
Quote:
$result is returned as a normal array and the PHP code needs to echo $result[title]. Also when you use query(), you are not getting an array, but a result set (of MySQL). When you use query_first() you get an array. :) Great thread. :D |
Ahh, I didn't realise. :) Updated, thats for the info.
|
Quote:
|
Quote:
Well, just for hacking purposes, I would need to 'surf' the above $results set. How could I - for example - reset the fetch pointer without resending the query ? Is that set just like a stack or each fetch_xxx() I'll loose at all the previous record ? Thanks. |
Quote:
Is it the best way ? Clean ? Thanks |
Yup Jawelin, that's also the way vBulletin does it (using $DB_site->data_seek()).
|
Thnx.
|
$DB_site is my friend...
Saves SOOOOOOO much coding. A suggestion... get under the $DB_site hood... Go to your admin folder and open db_mysql.php That contains the complete code for the $DB_site object, including all it's methods, like insert_id and stuff... IMPORTANT TO NOTE: If you want to use $DB_site (and other standard vB variables, like $bbuserinfo) you need to start your script with a require("global.php"); And to use $DB_site in a FUNCTION, you have to declare it as a global global $DB_site; Otherwise you'll get slapped with parse errors talking about member functions of a non-object |
Major bump :P
Just wondering.. 1) Can these functions be used to connect to another database? 2) Where are the connection details for the database hidden? Eg. username/password, database name.. |
2) = config.php :p
|
thank you for this tutorial this is going to help me out a alot
|
Quote:
While PHP Code:
PHP Code:
|
Indeed the majority of time thats correct, using the first method could produce the wrong result eg:
PHP Code:
|
You only quote your single strings when you are not inbetween any double or single quotes. As:
PHP Code:
|
Quote:
PHP Code:
|
Quote:
echo "The forum title is $result[{'title'}]"; |
All times are GMT. The time now is 11:34 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 | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|