Back to vBulletin 3 Articles

Create checkbox group at your hack's options (usergroup selection for example)
by FractalizeR 07 Aug 2008

Hello.

In this article I will show how to create a checkbox group in your hack's options. It's easy. Just do the following:

1. Create an option. Datatype validation type = free.

2. Enter the following code to Option code:
Code:
" . eval('$options=""; 
$fritems = array(
	"Test1Code" => "Test option checkbox",
	"Test2Code" => "Another test option checkbox",
);
foreach($fritems AS $fritem_id => $fritem_name)
{
	$options .= "\\t\\t<label for=\\"setting[$setting[varname]]$fritem_id\\" title=\\"item id: $fritem_id\\"><input type=\\"checkbox\\" tabindex=\\"1\\" name=\\"setting[$setting[varname]]"."[]\\" id=\\"setting[$setting[varname]][$fritem_id]\\" value=\\"$fritem_id\\"" . iif(strpos(",$setting[value],", ",$fritem_id,") !== false, \' checked="checked"\') . iif($vbulletin->debug, " title=\\"name=&quot;setting[$setting[varname]]&quot;\\"") . " />$fritem_name</label><br />\\n";
}
return "<span class=\\"smallfont\\">\\n$options\\t</span>";') . "<input type=\"hidden\" name=\"setting[$setting[varname]][]\" value=\"-1\" />
3. Save option. Now you will see your group of checkboxes. You can add more items to $fritems array. Array key will be the code of the option. Array value is the text to display near checkbox. Please note: all strings added to $fritems array should be double-quoted (because all there is inside single-quoted eval function) or, if you need single-quotes, escape them.

4. Now create a admin_options_processing hook with the following code:
PHP Code:
if (is_array($settings['my_setting_name']))
{
    
$settings['my_setting_name'] = implode(','$settings['my_setting_name']);


5. That's all. Now $vbulletin->settings['my_setting_name'] will be a string like "Test1Code,Test1Code" depending on what user checked at options page.

A little moment on option text localization. Instead of
PHP Code:
$fritems = array(
    
"Test1Code" => "Test option checkbox",
    
"Test2Code" => "Another test option checkbox",
); 
you can write
PHP Code:
$fritems = array(
    
"Test1Code" => $settingphrase["my_setting_phrase_name1"],
    
"Test2Code" => $settingphrase["my_setting_phrase_name2"]
); 
Just create phrases at VBulletin settings group with names my_setting_phrase_name1 and my_setting_phrase_name1:

Code:
<phrasetype name="vBulletin Settings" fieldname="vbsettings">
	<phrase name="my_setting_phrase_name1" date="1218041520" username="FractalizeR" version=""><![CDATA[Test option checkbox]]></phrase>
	<phrase name="my_setting_phrase_name2" date="1218040714" username="FractalizeR" version=""><![CDATA[Another test option checkbox]]></phrase>
</phrasetype>
Now a small example on how to list all usergroups and allow user to check some usergroups (take this text to Option code):

Code:
" . eval('$options =""; 
foreach($vbulletin->usergroupcache AS $usergroupid => $usergroup)
{
	$options .= "\\t\\t<label for=\\"setting[$setting[varname]]$usergroupid\\" title=\\"usergroupid: $usergroupid\\"><input type=\\"checkbox\\" tabindex=\\"1\\" name=\\"setting[$setting[varname]]"."[]\\" id=\\"setting[$setting[varname]]$usergroupid\\" value=\\"$usergroupid\\"" . iif(strpos(",$setting[value],", ",$usergroupid,") !== false, \' checked="checked"\') . iif($vbulletin->debug, " title=\\"name=&quot;setting[$setting[varname]]&quot;\\"") . " />$usergroup[title]</label><br />\\n";
}
return "<span class=\\"smallfont\\">\\n$options\\t</span>";') . "<input type=\"hidden\" name=\"setting[$setting[varname]][]\" value=\"-1\" />
All comments are welcome!
Attached Thumbnails
Click image for larger version
Name:	Demo.jpg
Views:	380
Size:	52.8 KB
ID:	85526  

vblts.ru supports vBulletin®, 2022-2024