phpBB

Development Wiki

Build cfg template

From phpBB Development Wiki

Revision as of 17:07, 9 September 2008 by Technocrat (Talk | contribs)

Function: build_cfg_template();

Description

function 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 and then looping through it and passing the data to the function.

Parameters

tpl_type
key
new
config_key
vars

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
  • bool
  • int
  • lang
  • string
  • wpath
type Type of field
  • dimension
  • custom
  • password
  • radio
  • select
  • string
  • text
  • textarea
  • false
explain Show explain text
  • false
  • true
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

$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),
    ),
);

$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]);
}

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 -->