一些模板引擎只能解析变量,Smarty模板引擎可以解析自定义函数。
一下引用:
好久不用smarty这个模板引擎了,今天改一个老系统,当时做的时候还是用的这个,现在要在模板里调用自定义的函数获取数据或者传值给自定义函数,让它自动返回相应格式的模板代码。又遇到了这个Smarty模板引擎中如何调用自定义函数的问题。记得当时做的时候,查了好多资料,才找到怎么在smarty里用自定义函数的,现在写个示例,记录一下。
比如现在要用自定义函数ssi返回一个符合ssi文件调用的代码
首先在smarty引擎初始化的时候注册一下这个自定义函数,如下:
<?php
//注:SITE_ROOT是定义的网站所在根目录
require_once (SITE_ROOT.’include/smarty/Smarty.class.php’);
//设定模版目录
$templates_dir = SITE_ROOT.’templates/’;
$compile_dir = SITE_ROOT.’data/compile/’;
$cache_dir = SITE_ROOT.’data/cache/’;
if(defined(‘IN_ADMIN’)) {
$dir = ‘admin’;
} else {
$dir = ‘site’;
}
$TPL = new Smarty;
//$TPL->debugging = TRUE;
$TPL->template_dir = $templates_dir.$dir;
$TPL->compile_dir = $compile_dir.$dir;
$TPL->cache_dir = $cache_dir.$dir;
$TPL->cache_lifetime = 0;
$TPL->caching = FALSE;
$TPL->left_delimiter = ‘<!–{‘;
$TPL->right_delimiter = ‘}–>’;
//$TPL->assign(‘SITE_ROOT’ , SITE_ROOT);
$TPL->register_function(“ssi”, “ssi”);//这里注册的自定义函数ssifile, 以上初始化smarty其它一些配置就不做解释了,不懂可以google
?>
然后写一个自定义函数
function ssi($params)
{
extract($params);
echo ‘<!–#include virtual=”‘.$filepath.’”–>’;
}
这样在模板引擎中就可以直接用你这个ssi函数了。
<!–{ssi filepath=”/ssi/header.html”}–>
这个函数经过smarty解析之后就是返回<!–#include virtual=”/ssi/header.html”–>
如果自定义函数的变量为多个,ssi后面跟多个变量就行了。
比如:<!–{block pageid=”index” blockno=”4〃}–>这个是自定义了一个block函数,里面是两个变量,当然相应的自定义函数里就可以直接用这两个变量了,因为已经用extract已经把smarty返回来的两个变量从数组的形式导入到当前的符号表了。
一下引用:
好久不用smarty这个模板引擎了,今天改一个老系统,当时做的时候还是用的这个,现在要在模板里调用自定义的函数获取数据或者传值给自定义函数,让它自动返回相应格式的模板代码。又遇到了这个Smarty模板引擎中如何调用自定义函数的问题。记得当时做的时候,查了好多资料,才找到怎么在smarty里用自定义函数的,现在写个示例,记录一下。
比如现在要用自定义函数ssi返回一个符合ssi文件调用的代码
首先在smarty引擎初始化的时候注册一下这个自定义函数,如下:
<?php
//注:SITE_ROOT是定义的网站所在根目录
require_once (SITE_ROOT.’include/smarty/Smarty.class.php’);
//设定模版目录
$templates_dir = SITE_ROOT.’templates/’;
$compile_dir = SITE_ROOT.’data/compile/’;
$cache_dir = SITE_ROOT.’data/cache/’;
if(defined(‘IN_ADMIN’)) {
$dir = ‘admin’;
} else {
$dir = ‘site’;
}
$TPL = new Smarty;
//$TPL->debugging = TRUE;
$TPL->template_dir = $templates_dir.$dir;
$TPL->compile_dir = $compile_dir.$dir;
$TPL->cache_dir = $cache_dir.$dir;
$TPL->cache_lifetime = 0;
$TPL->caching = FALSE;
$TPL->left_delimiter = ‘<!–{‘;
$TPL->right_delimiter = ‘}–>’;
//$TPL->assign(‘SITE_ROOT’ , SITE_ROOT);
$TPL->register_function(“ssi”, “ssi”);//这里注册的自定义函数ssifile, 以上初始化smarty其它一些配置就不做解释了,不懂可以google
?>
然后写一个自定义函数
function ssi($params)
{
extract($params);
echo ‘<!–#include virtual=”‘.$filepath.’”–>’;
}
这样在模板引擎中就可以直接用你这个ssi函数了。
<!–{ssi filepath=”/ssi/header.html”}–>
这个函数经过smarty解析之后就是返回<!–#include virtual=”/ssi/header.html”–>
如果自定义函数的变量为多个,ssi后面跟多个变量就行了。
比如:<!–{block pageid=”index” blockno=”4〃}–>这个是自定义了一个block函数,里面是两个变量,当然相应的自定义函数里就可以直接用这两个变量了,因为已经用extract已经把smarty返回来的两个变量从数组的形式导入到当前的符号表了。