作者:北人南漂记 | 来源:互联网 | 2013-09-25 11:33
smarty的插件放在/smarty/libs/plugins下面,它为程序的开发提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变量$yesterday进行格式化。在我们的php文件中,并不需要对date_forma
一,smarty插件介绍
smarty的插件放在/smarty/libs/plugins下面,它为程序的开发提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变量$yesterday进行格式化。在我们的php文件中,并不需要对date_format进行处理,我们只要拿来用就好了。
二,smarty插件命名规则
1,插件文件名命名规则
type .name .php
type有以下几种
-
function
-
modifier
-
block
-
compiler
-
prefilter
-
postfilter
-
outputfilter
-
resource
-
insert
例如:modifier.date_format.php这个就是smarty自带的日期插件的文件名
2,插件文件里面的函数命名规则
smarty_type_name()
例如:smarty_modifier_date_format
上面的紫色字对应的是插件类型,桔黄色字对应的是插件名称
三,添加自定义插件功能
个人觉得modifier和function这二种类型的插件最有用,也是最常用的。所以下面我以这二个类型来举例子
1,添加modifier插件
a ),/smarty/libs/plugins下面建个文件modifier.reverse.php
b),在调用模块的文件文件里加上
$this->tpl->assign("test", "123456789");
c),在模块文件文件中加入
reverse == {$test|reverse}
上面的这个例子是把一个字符串进行反转,结果是:987654321
2,添加function插件
a ),/smarty/libs/plugins下面建个文件function.html_lis.php
function smarty_function_html_lis($params, &$smarty)
{
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
$class = 'li_style';
$optiOns= null;
$separator = '';
$js = '';
$labels =true;
$output = null;
$extra = '';
foreach($params as $_key => $_val) {
switch($_key) {
case 'class':
case 'separator':
$$_key = $_val;
break;
case 'labels':
$$_key = (bool)$_val;
break;
case 'js':
$$_key = $_val;
break;
case 'options':
$$_key = (array)$_val;
break;
case 'output':
$$_key = array_values((array)$_val);
break;
case 'lis':
$smarty->trigger_error('html_lis: the use of the "lis" attribute is deprecated, use "options" instead', E_USER_WARNING);
$optiOns= (array)$_val;
break;
default:
if(!is_array($_val)) {
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
} else {
$smarty->trigger_error("html_lis: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
}
break;
}
}
if (!isset($options) && !isset($values))
return ''; /* raise error here? */
$_html_result = array();
if (isset($options)) {
foreach ($options as $_key=>$_val)
$_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);
} else {
foreach ($values as $_i=>$_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);
}
}
if(!empty($params['assign'])) {
$smarty->assign($params['assign'], "
");
} else {
return "
".implode("\n",$_html_result)."
";
}
}
function smarty_function_html_lis_output($class, $value, $output, $extra, $separator, $labels, $js) {
$_output = '';
if ($labels) $_output .= '';
$_output .= '
' . $output;
if ($labels) $_output .= '';
$_output .= $separator;
return $_output;
}
?>
b),在调用模块的文件文件里加上
$this->tpl->assign('cust_lis', array(
"china" => '中国',
"shanghai" => '上海',
"heifei" => '合肥',
"luan" => '六安'));
$this->tpl->assign("onclick", "Onclick=sep()");
c),在模块文件文件中加入
{html_lis optiOns=$cust_lis js=$onclick}
d),输入结果为