phpBB

Development Wiki

Difference between revisions of "Build cfg template"

From phpBB Development Wiki

(Description)
Line 3: Line 3:
 
==Description==
 
==Description==
 
<code>function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)</code>
 
<code>function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)</code>
This function is used in the ACP to build configuration pages and cuts down on all the INPUT fields and allows you to create a simple array of all the fields you need to set, along with limits, validation, etc...
+
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...
  
The main area to look at is the $display_vars['vars'] part of the array.
+
This is done by building a $[[Build_cfg_template#display_vars_array|display_vars array]] and then looping through it and passing the data to the function.
  
$display_vars['vars'][$config_key] => ''configuration_settings_array()''
+
==Parameters==
 +
'''tpl_type'''<br>
 +
'''key'''<br>
 +
'''new'''<br>
 +
'''config_key'''<br>
 +
'''vars'''<br>
  
This last array is the key to the configuration settings.
+
==display_vars array==
 
+
'''title'''<br>
==Parameters==
+
ACP title<br><br>
 +
'''lang'''<br>
 +
Include a different lang file<br><br>
 +
'''vars array'''<br>
 +
Used to build form<br>
 
{|border="1" cellspacing="0" cellpadding="3"
 
{|border="1" cellspacing="0" cellpadding="3"
 
! Key
 
! Key
Line 70: Line 79:
 
     'title' => 'ACP_FOO',
 
     'title' => 'ACP_FOO',
 
     'vars' => array(
 
     'vars' => array(
         'legend1'       => 'GENERAL_FOO',
+
         'legend1'       => 'GENERAL_FOO',
 
         'foo1'          => array('lang' => 'ALLOW_BAR',  'validate' => 'bool',    'type' => 'radio:yes_no',  'explain' => false),
 
         '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),
 
         '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),
 
         'foo3'          => array('lang' => 'BAR_TYPE',  'validate' => 'string',  'type' => 'custom',    'method' => 'bar_type', 'explain' => true),
 
     ),
 
     ),
);</php>
+
);
 +
 
 +
$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]);
 +
}</php><br>
 +
 
 +
'''Template'''<br>
 +
<php><!-- 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 --></php>
 
[[Category:API]]
 
[[Category:API]]
 
[[Category:Concepts]]
 
[[Category:Concepts]]

Revision as of 17:07, 9 September 2008

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