Aug 08 2008

[VBulletin] Create checkbox group at your hack’s options (usergroup selection for example)

Category: Articles,VBulletinFractalizeR @ 5:43 pm

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!

Tags: ,

Leave a Reply

You must be logged in to post a comment. Login now.