Go Back   vb.org Archive > vBulletin Article Depository > Read An Article > vBulletin 3 Articles

Reply
 
Thread Tools
Add options per forum
Logikos
Join Date: Jan 2003
Posts: 2,924

 

Show Printable Version Email this Page Subscription
Logikos Logikos is offline 08-01-2005, 10:00 PM

What this is
This guide will teach you to use the hooks system to add options to your admincp/forum.php page. One finished, you will be able to add new options to your forum with just a few lines of code.

Don't understand?
Ever wanted to turn something on, but only in one of your forums? For example, lets say you want to execute code, but only in forum I.D. 2, 16, and 45.

Lets begin!
In this tutorial we will assume that you want a yes or no option; in order to enable/disable some code. In order to do that we first need to create a new row in the database. This will hold the information of which forums will be enabled/disabled. Always remember that '1' is considered as on, or enabled. And that '0' is considered off, or disabled.

Please make sure this is all done on a test forum!

We have to store the data!
Run this SQL Query:
[sql]
ALTER TABLE forum ADD (
var smallint(3) unsigned not null default ''
)
[/sql]

Var = The name of the row in the database. This should be a name that will describe your system in one word. For example. In my vB Category Icons hack. This row is named 'forumhomeicon'

Now that we have added our new row named 'var'. We now have to add the on/off option in the forums manager area of the admin control panel.

Add the option in the ACP
To add this new option in the ACP we need to create a new hook and add some code to that hook.

The hook name should be: forumadmin_edit_form
And the code should be:
PHP Code:
print_input_row($vbphrase['your_phrase'], 'forum[var]'$forum['var']); 
Notice the 'var'? Remember, that's the row name!
That will actually add the yes/no row to all your forums in the admincp. So when you click on the save button, it will add your selection to the database.

But how does it know which row to add it to? Glad you asked.

You have to create one more hook!
The hook name should be: forumdata_start
And the code to add there is the following
PHP Code:
$this->validfields['var'] = array(TYPE_STRREQ_NO); 
Notice the var again? That's telling it which row to add it to.

I want to add more then just one option!
Then you will need to repeat this tutorial for each option you would like to have.

Now that you have saved both hooks. You can now use the following code in any of your hooks.

PHP Code:
if ($foruminfo['var'] == 1)
{
     
// your code here

In templates you would use

HTML Code:
<if condition="$foruminfo['var'] == 1">
     <!-- Your Code Here -->
</if>
Big Tip:
If you have 2 or more options being added to the forums, you can place all the code in each hook. For example:

Hookname: forumadmin_edit_form
Code:
PHP Code:
print_input_row($vbphrase['your_phrase'], 'forum[var1]'$forum['var1']);
print_input_row($vbphrase['your_phrase'], 'forum[var2]'$forum['var2']); 
Hook Name: forumdata_start
Code:
PHP Code:
$this->validfields['var1'] = array(TYPE_STRREQ_NO);
$this->validfields['var2'] = array(TYPE_STRREQ_NO); 
You don't have to keep creating new hooks for more options for the same hack. Is better to only create hooks for separate hacks.



Custom Fields
The following fields can also be used.
PHP Code:
// This will print an input form. Good for titles, and such.
print_input_row($vbphrase['your_phrase'], 'forum[var]'$forum['var']); 
PHP Code:
//This will print a yes or no row
print_yes_no_row($vbphrase['your_phrase'], 'forum[var]'$forum['var']); 
PHP Code:
//This will print a text area. Good for descriptions
print_textarea_row($vbphrase['your_phrase'], 'forum[var]'$forum['var']); 
There are more that can be used. When I have some more time I will add them all here.

This tutorial was created for a member who needed to know how to do this exact thing, so I figured I would teach everyone.
Reply With Quote
  #2  
Old 08-02-2005, 01:19 PM
akanevsky akanevsky is offline
 
Join Date: Apr 2005
Posts: 3,972
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

There is actually an easier way:
Just add a new bit to the $_FORUMOPTIONS array and you are there. Why alter the database?
Reply With Quote
  #3  
Old 08-02-2005, 01:24 PM
Logikos Logikos is offline
 
Join Date: Jan 2003
Posts: 2,924
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Dark Visor
There is actually an easier way:
Just add a new bit to the $_FORUMOPTIONS array and you are there. Why alter the database?
Care to share?
Reply With Quote
  #4  
Old 08-02-2005, 01:29 PM
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Location: Germany
Posts: 6,863
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Using existing Bitfields is bad coding style
This will cause problems sooner or later when Jelsoft starts to use further Bits.

Furthermore, $_FORUMOPTIONS doesn't even exist in vBulletin 3.5

And as it is possible not to use forumoptions here, it should be encouraged to do so (eg. use custom fields).
This is official Jelsoft stance regarding Bitfields.
Reply With Quote
  #5  
Old 08-02-2005, 01:32 PM
Logikos Logikos is offline
 
Join Date: Jan 2003
Posts: 2,924
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for clearing that up Andreas. I thought the way I was doing it was incorrect for a min.
Reply With Quote
  #6  
Old 08-02-2005, 01:35 PM
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Location: Germany
Posts: 6,863
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Nope, it's absolutely correct - but you might want to point out that if you are adding a bunch of Yes/No type settings, it could be a good idea to introduce a custom bitfield
Reply With Quote
  #7  
Old 08-02-2005, 01:39 PM
Logikos Logikos is offline
 
Join Date: Jan 2003
Posts: 2,924
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by KirbyDE
but you might want to point out that if you are adding a bunch of Yes/No type settings, it could be a good idea to introduce a custom bitfield
Thanks, I'll edit my first post with all of them in a few mins. After I type them all.
Reply With Quote
  #8  
Old 08-02-2005, 02:01 PM
akanevsky akanevsky is offline
 
Join Date: Apr 2005
Posts: 3,972
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Using existing Bitfields is bad coding style
Umm... Why? Did you just make this up?

Quote:
This will cause problems sooner or later when Jelsoft starts to use further Bits.
That would be a release of a new version. And the hack would have to be recoded anyways.

Quote:
Furthermore, $_FORUMOPTIONS doesn't even exist in vBulletin 3.5
You're right. I thought it was there because it was in 3.0.7. I am sure there is another variable of that kind, I'ma go and take a look at the code.. By the way, I used custom bitfields in one of my hacks for 3.0.7.. It was fine.

Quote:
And as it is possible not to use forumoptions here, it should be encouraged to do so (eg. use custom fields).
This is official Jelsoft stance regarding Bitfields.
Then they should make "custom fields" for forums just like there are some for users.

Quote:
Thanks for clearing that up Andreas. I thought the way I was doing it was incorrect for a min.
Didn't say "incorrect". Just wanted to suggest a way that does not involve changing DB..
Reply With Quote
  #9  
Old 08-02-2005, 02:07 PM
Logikos Logikos is offline
 
Join Date: Jan 2003
Posts: 2,924
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When i said incorrect, I meant not to your coding standards.
Reply With Quote
  #10  
Old 08-02-2005, 02:09 PM
Andreas's Avatar
Andreas Andreas is offline
 
Join Date: Jan 2004
Location: Germany
Posts: 6,863
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Dark Visor
Umm... Why? Did you just make this up?
No. As said, this is official Jelsoft stance.
It is bad, as (in contrary to custom tables/colums/variables) using default vBulletin Bitfields for custom settings will cause Problems.

Wort Case scenario: Your Hack uses the next available Bit in forumoptions for "Show Quick Stats for this Forum".
Now the next vBulletin Version comes and redifines this Bit to "Prune this Forum every 24 hours".
Now all users of this Hack have the Bit set ...


Quote:
Then they should make "custom fields" for forums just like there are some for users.
Well, what does adding a custom field do?
It adds a record to Table profilefield and alters table userfield to have a new MEDIUMTEXT columd fieldxx.
This is just an easy-to-use frontend to alter the Database, so where is the difference?

Keeping the Product Manager in mind, such DB alterations can be done easily, without the User having to know anything about running queries.
Reply With Quote
Reply

Thread Tools

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 04:41 PM.


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.04742 seconds
  • Memory Usage 2,312KB
  • Queries Executed 23 (?)
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)bbcode_html
  • (8)bbcode_php
  • (9)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_article
  • (1)navbar
  • (4)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (9)postbit
  • (10)postbit_onlinestatus
  • (10)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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete