The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
[How to] Write Plug-ins/Hooks
This is your basic guide to making plug-ins and hooks, as we are all coming over from the 'hack the files' mentality I am posting this thread more for people that are used to hacking the 3.0.x source code and looking to port modifications. Although a newbie should be able to come away with a good understanding of how to do this to . [high]Things to consider[/high] Ok before we get started here are a few things to keep in mind. First and foremost plug-ins are stored in the database, serlized, unserlized and evaled on page generation. If you code preforms badly with such a wrapper forget making a plug-in and just hack it, trust me you'll thank yourself for it when your forum gets large. Second thing, hooks will not get you into every corner of the code. Some things will always be done best with a hack. For example if you are looking to add something but need to query the db for some extra data and want to avoid and extra query (in other words you are going to modify an existing one with a join or such) forget it and hack it in, there are no hooks that let you modify existing queries. Last but not least hooks are not magic, don't add a million of them and expect your forum to run as fast as it did when you first installed it. Only plug-in/hack-in what you really need! Ok enough with the boring stuff, lets add our first plug-in! [high]Basics:[/high] First thing you need to do is make sure plug-ins are enabled, you can find this option in the admin cp by browsing to vBoptions -> Select Plugin/Hook System from menu -> Set Enable Plugin/Hook System to yes. Now head to the add plug-in page located at http://www.yoururl.com/forum/admincp/plugin.php?do=add Lets go over what all these options mean: Hook Location: This is where the php code will be executed at, hook locations at defined all across vBulletin. You can find them by opening and php file and searching for the var $hook. When you find a bit of php code like this you have found a hook: PHP Code:
Title: This is the title of your plug-in, use a good name because this is the only thing you have to identify the plug-in in the plug-in manager. Plugin PHP Code: Can you guess? This is where you put your custom php code, on page generation it is executed at the hook location in the .php files. Note that you do not need <?php ?> tags here, in other words: wrong: PHP Code:
PHP Code:
Edit - Thanks to Revan for this addition: Quote:
At first approach coding the plug-in like a hack. Open the php file you would normally edit and get your mind around the new code. Once you have a good understanding of the new code you should start looking for where you need to add your custom php. Once you find the right location in the code start looking for a nearby hook, if you don't see one you can work with you are out of luck! Edit- Thanks to KirbyDE for his addition: Quote:
|
#52
|
|||
|
|||
Quote:
You can join into Queries now: Lets say you wanted to show some custom info on each post. In 3.0x you would modify an exsiting query. Its the biggest query in showthread.php. Starts like "$posts = $db->query_read("". You would have to add you own SELECT statments like table.username AS username, and JOIN statements like LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = post.userid). You don't need to do that anymore. If you wanted to do this is 3.5 using hooks you can. Open showthread.php and find around line: 923-924. You should see... PHP Code:
You would simple go into the plugins, add new plugin and write it like so: Plugin Name is "showthread_query" PHP Code:
Just remember to start "$hook_query_fields" variable with a comma. You can also add conditions around this which is great I think. Example: PHP Code:
|
#53
|
||||
|
||||
Can't this thread be sticky :-)?
|
#54
|
|||
|
|||
Help..
I got this part in my plugin: Quote:
Quote:
Quote:
the template shows. But $guestIC won't show What's wrong ? |
#55
|
||||
|
||||
Re-read the instructions. Your code that calls the hook is wrong, and you need to enter the hook into the xml file that holds the hooks.
|
#56
|
|||
|
|||
Before I make an xml file, I'm building it first as if it was already installed
The plugin is set in the global_start hook, so that's fine. the plugin itself has to add the to be used templated to the cache, that's what I've used that eval line for |
#57
|
|||
|
|||
Can one add hooks in plugins (for add-ons)?
I guess not, but I don't lose anything by asking... |
#58
|
|||
|
|||
Quote:
Another article by Brad lol |
#59
|
|||
|
|||
Quote:
|
#60
|
|||
|
|||
Have you tried it out anyway? I don't really see the point of including a hook in your plugin code if people want to develop modifications for it then they could just edit the plugin code. I guess it is your choice but it wouldn't be something I would do.
|
#61
|
|||
|
|||
Quote:
So hooks would really come in handy here. |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|