此苹果非彼苹果
« »
2011 年 01 月 13 日LA/NMP

实例解析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返回来的两个变量从数组的形式导入到当前的符号表了。

其实应用你可以举一反三实践一下。这里就算简单记录一下,以备将来再用到的时候想不起来了,备查。

日志信息 »

该日志于2011-01-13 15:43由 Apple 发表在LA/NMP分类下, 评论已关闭。 如果觉得这篇文章不错,可以分享给你的朋友们~ :)
返回顶部