PDA

View Full Version : Vbulletin Settings: How to utilize Check boxes in option code?


DetroitYES
08-02-2012, 03:24 PM
I'm building a product that will append various buttons to the footer area of posts in threads, and blog entries... this may later extend to cms articles and other vbulletin content types...

In the settings for the product, I would like to enable the user to specify which areas get which buttons. For now, since I'm only using 2 options I can do it easily with 4 radio buttons (all, neither, blog only, posts only)... but this model will get over complicated with a third content type so checkboxes would be more ideal...

Can anyone point me in the right direction in how to implement checkboxes in the option code?

I took a peek at the few instances they occur in the default vbulletin options but it didn't yeild much information.

thanks

kh99
08-02-2012, 06:50 PM
You can create your own bitfields to use as options by creating an xml file and uploading it to includes/xml (and it has to be named bitfield_something.xml). For example you might have something like this:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bitfields product="myproduct">
<bitfielddefs>
<group name="misc">
<group name="myoptions">
<bitfield name="option_1">1</bitfield>
<bitfield name="option_2">2</bitfield>
<bitfield name="option_3">4</bitfield>
<bitfield name="option_4">8</bitfield>
</group>
</group>
</bitfielddefs>
</bitfields>

(Note the values are powers of 2 - 1, 2, 4, 8, 16, 32, etc). After putting the file in the includes/xml folder, go to the adminCP and choose Rebuild > Rebuild Bitfields (you don't have to worry about this when installing your product, it's done for you after a product in imported).

Then you also need to create a phrase for each one. The varnames will be the same as the "name" fields, and they should be Phrase Type "Control Panel Options".

Next, when you edit your setting, in the Option Code field you would put bitfield:misc|myoptions, and for "Data Validation Type" select "bitfield". The value of your option will be a number which is the sum of all the options selected (which is why only powers of 2 are used - then each option represents 1 bit when you think of the number as a binary value).

The bit values will be loaded from the datastore and are available (for the example above) in $vbulletin->bf_misc_myoptions, and you can those values with the bitwise AND operator to check if an option is selected. For example, if the varname of the option is 'myoption', you could do this to check them:

if ($vbulletin->options['myoption'] & $vbulletin->bf_misc_myoptions['option_1'])
{
// option 1 box was checked
}
if ($vbulletin->options['myoption'] & $vbulletin->bf_misc_myoptions['option_2'])
{
// option 2 box was checked
}
// etc.


If you search the article section for titles with "bitfields" in them you will find a couple articles with more information. (One of them has a lot of the same info I posted above, but doesn't quite seem to have everything).

BTW, if anyone has anything to add, please do - I figured this out mostly by trial and error so I may have missed some details.

Edit: BTW, I think it may also be possible to just put html code for some checkboxes in the Option Code field and bypass some of these steps.

DetroitYES
08-03-2012, 06:12 PM
holy cow, thanks a ton

I hope the client paid you sufficiently for digging all that out!