很多时候,在使用模板进行网页设计制作的时候,都会碰到模板嵌套的事情...笔者最近在做一个个人BLOG的时候就遇到了这个问题,而且在嵌套上出现了错误.在百度上搜出来的答案都带有一些与讨论的题目无关的代码.可能自己水平有限,一番眼花缭乱之后什么也没看懂...最后只有使用看家本领:查看Smarty源码...开放源码就这点好处,可以随时拿来看看人家是怎么实现的
..废话不多说,我们开始!~
先了解一下Smarty类中display()和fetch()的区别,先来看一下这两个函数:
打开Smarty.class.php,全是英文...不过不要紧,我们主要的不是看那些英文(笔者现在CET-4还没过呢)..
找到display()函数
function display($resource_name, $cache_id = null, $compile_id = null)
{
$this->fetch($resource_name, $cache_id, $compile_id, true);
}
这个函数的作用就是向屏幕输出"模板文件"的一个函数.
这个函数有三个参数,第一个参数是我们要输出的模板文件名,后面的两个可以不用管它,我们这里只用到第一个参数..
类似这样:$my_smarty->display("tmplt.tpl");
从代码可以看到,display()只有一行语句,调用fetch()函数
fetch()函数的定义如下:
function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
{....}
这个函数代码比较多,请读者自己查阅"smarty.class.php"文件.
这个函数也是向屏幕输出"模板内容"的.
这里我们也只用到第一个参数..类似这样:
$my_smarty->fetch("内容");
理解了这两个函数的区别之后,我们来看一看具体实例:
/***************test.php****************/
require_once ("libs/Smarty.class.php");
$smarty = new Smarty();
$title = "嵌套模板试验";
$tmplt1 = "这是父模板显示的内容";
$tmplt2 = $smarty->fetch("tmplt2.tpl");
$smarty->assign("title",$title);
$smarty->assign("tmplt1",$tmplt1);
$smarty->assign("tmplt2",$tmplt2);
$smarty->display("tmplt1.tpl");
?>
{$title}
{$tmplt1}
{$tmplt2}
这是子模板要显示的内容
保存这三个文件,然后在浏览器中打开test.php文件,就可以看到结果了
注意:在test.php文件中$tmplt2 = $smarty->fetch("tmplt2.tpl");
这一句,如果把fetch()函数换成display()函数,就会显示错误的结果..因为那样的话处理程序会分别显示test1.tpl和test2.tpl两个文件,而且是先显示test2.tpl...
OK!~这就是今天的内容啦!
阅读(1842) | 评论(0) | 转发(0) |