Build cfg template
From phpBB Development Wiki
build_cfg_template(); –– Build configuration template for the ACP.
Contents |
Description
string build_cfg_template( $tpl_type , $key , &$new , $config_key , $vars)
This function is used in the ACP to build a configuration page and cuts down on all the INPUT fields you have to make in the template. It allows you to create a simple array of all the fields you need to set, along with limits, validation, etc...
This is done by building a $display_vars array, looping through it and passing the data to the function.
Parameters
| Parameter | Usage |
|---|---|
| tpl_type | |
| key | |
| new | |
| config_key | |
| vars |
Return Values
HTML string for output within the template.
display_vars array
title
ACP title
lang
Include a different lang file
vars array
Used to build form
| Key | Description | Valid Type |
|---|---|---|
| lang | Text label | |
| validate | Expected data type |
|
| type | Type of field |
|
| explain | Show explain text |
|
| method | A function inside your acp class to create screen output, generally used for optional elements <OPTION name=foo>FOO_LABEL</OPTION> | |
| function | A function not inside your acp class to create screen output, generally used for optional elements <OPTION name=foo>FOO_LABEL</OPTION> | |
| params | Input parameters to use with the function or method | |
| append | Any text that follows the form field |
Examples
Example #1
$display_vars = array(
'title' => 'ACP_FOO',
'vars' => array(
'legend1' => 'GENERAL_FOO',
'foo1' => array('lang' => 'ALLOW_BAR', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'foo2' => array('lang' => 'MAX_BAR', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
'foo3' => array('lang' => 'BAR_TYPE', 'validate' => 'string', 'type' => 'custom', 'method' => 'bar_type', 'explain' => true),
'foo4' => array('lang' => 'SELECT_EXAMPLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false)
),
);
$this->new_config = $config;
$cfg_array = (isset($_REQUEST['config'])) ? request_var('config', array('' => '')) : $this->new_config;
$error = array();
validate_config_vars($display_vars['vars'], $cfg_array, $error);
foreach ($display_vars['vars'] as $config_key => $vars)
{
if (!is_array($vars) && strpos($config_key, 'legend') === false)
{
continue;
}
if (strpos($config_key, 'legend') !== false)
{
$template->assign_block_vars('options', array(
'S_LEGEND' => true,
'LEGEND' => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
);
continue;
}
$type = explode(':', $vars['type']);
$l_explain = '';
if ($vars['explain'] && isset($vars['lang_explain']))
{
$l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
}
else if ($vars['explain'])
{
$l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
}
$content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars);
if (empty($content))
{
continue;
}
$template->assign_block_vars('options', array(
'KEY' => $config_key,
'TITLE' => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
'S_EXPLAIN' => $vars['explain'],
'TITLE_EXPLAIN' => $l_explain,
'CONTENT' => $content,
));
unset($display_vars['vars'][$config_key]);
}
function style_select($default = '', $all = false)
{
global $db;
$sql_where = (!$all) ? 'WHERE style_active = 1 ' : '';
$sql = 'SELECT style_id, style_name
FROM ' . STYLES_TABLE . "
$sql_where
ORDER BY style_name";
$result = $db->sql_query($sql);
$style_options = '';
while ($row = $db->sql_fetchrow($result))
{
$selected = ($row['style_id'] == $default) ? ' selected="selected"' : '';
$style_options .= '<option value="' . $row['style_id'] . '"' . $selected . '>' . $row['style_name'] . '</option>';
}
$db->sql_freeresult($result);
return $style_options;
}
Template
<!-- BEGIN options -->
<!-- IF options.S_LEGEND -->
<!-- IF not options.S_FIRST_ROW -->
</fieldset>
<!-- ENDIF -->
<fieldset>
<legend>{options.LEGEND}</legend>
<!-- ELSE -->
<dl>
<dt><label for="{options.KEY}">{options.TITLE}:</label><!-- IF options.S_EXPLAIN --><br /><span>{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
<dd>{options.CONTENT}</dd>
</dl>
<!-- ENDIF -->
<!-- END options -->
See Also

