Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42892
  • 博文数量: 18
  • 博客积分: 400
  • 博客等级: 下士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-03 12:27
文章分类
文章存档

2010年(4)

2008年(14)

我的朋友
最近访客

分类:

2008-04-03 12:47:56

很多时候,在使用模板进行网页设计制作的时候,都会碰到模板嵌套的事情...笔者最近在做一个个人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) |
给主人留下些什么吧!~~