View Single Post
  #2  
Old 08-02-2012, 06:50 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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:

Code:
<?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:

Code:
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.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01294 seconds
  • Memory Usage 1,769KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.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_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • 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
  • showpost_complete