您好,欢迎访问一九零五行业门户网

PHPLIB Template入门系列

在php程序里,我们常常会把公用代码或公用部分写进一个文件里,前者象我们的系统配置文件,比如config.php,或者公共函数都写入一个functions.php文件里;后者象一个站点都需要用到的页面头部,尾部.这样做的好处是可以很方便的维护站点,而如果这个公用部分要有所改动,无需再去改每一个页面,大大减少了我们的工作量.
phplib template入门系列 - 4 模板嵌套
【楼 主】
在php程序里,我们常常会把公用代码或公用部分写进一个文件里,前者象我们的系统配置文件,比如config.php,或者公共函数都写入一个functions.php文件里;后者象一个站点都需要用到的页面头部,尾部.这样做的好处是可以很方便的维护站点,而如果这个公用部分要有所改动,无需再去改每一个页面,大大减少了我们的工作量.
以前你或许用require,include(require_once,include_once)引进一个公用的页面头部,确实方便而有效,现在我们用template模板类也可以实现了,并且可以很方便的把一个页面随意插入另一个模板的任意地方.如果你想也把要插进的页面做成含有变量的模板的话,那么你会发现模板类会把这个工作处理的很好.
在template目录下新建三个文件third.html,header.html,footer.html.内容分为如下
third.html
下面是一个列表
的成绩是
header.html
footer.html
author © iwind
你也看到了,我们前几节的例子中都是用
$tpl->set_file(main, 模板文件名);
来加载模板文件的。只所以命名为main,是因为我们想给它一个意义:主模板。这里的third.html就可以称之为“主模板”,而欲嵌入主模板third.html的变量所在位置的模板文件header.html,则可以称为子模板.同样footer.html也是一个子模板,我们想把它放到主模板里的位置.一个主模板内可以随意嵌入不限内容,尺寸大小,格式等的任何多个子模板.
下面我们开始我们的php程序.
先是创建一个类的实例对象
//包含进模板类 template.inc
require inc/template.inc;
//创建一个实例
$tpl = new template(template);
//读进三个模板文件的内容,分别给变量main, my_header, my_footer
$tpl->set_file(main, third.html);
$tpl->set_file(my_header, header.html);
$tpl->set_file(my_footer, footer.html);
//执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
$tpl->parse(header, my_header);
$tpl->parse(footer, my_footer);
//然后完成主模板内变量的替换,并输出主模板分析后的内容
$tpl->parse(mains, main);
//输出
$tpl->p(mains);
于是,我们便可以通过查看源文件确信header.html,footer.html两个子模板文件的内容已经被加进主模板里了.
下面是一个列表
的成绩是
author © iwind
你会发现,所有的变量都没了,包括我们未赋值的,,.这是因为我们在创建对象时,第二个参数未设置,而自动采用了remove
$tpl = new template(template);

$tpl = new template(template, remove);
的效果是一样的.
如果我们想给这些变量也赋值,那么方法和单个模板里变量的分析方法是一样的.
//读模板内容进变量
$tpl->set_file(main, third.html);
$tpl->set_file(my_header, header.html);
$tpl->set_file(my_footer, footer.html);
//设置子模板header.html里的变量title的值
$tpl->set_var(title, 这个是网页标题);
//以下分析主模板里的块的内容
//设置块
$tpl->set_block(main, list, lists);
$array = array(张三 => 82, 李四 => 90, 王二 => 60, 麻子 => 77);
foreach ($array as $username=>$score)
{
    $tpl->set_var(username, $username);
    $tpl->set_var(score, $score);
    $tpl->parse(lists, list, true);
}
所有程序为
set_file(main, third.html);
$tpl->set_file(my_header, header.html);
$tpl->set_file(my_footer, footer.html);
//设置header.html里的变量title的值
$tpl->set_var(title, 这个是网页标题);
//设置块
$tpl->set_block(main, list, lists);
$array = array(张三 => 82, 李四 => 90, 王二 => 60, 麻子 => 77);
foreach ($array as $username=>$score)
{
$tpl->set_var(username, $username);
$tpl->set_var(score, $score);
$tpl->parse(lists, list, true);
}
//执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
$tpl->parse(header, my_header);
$tpl->parse(footer, my_footer);
//完成主模板内变量的替换
$tpl->parse(mains, main);
//输出
$tpl->p(mains);
?>
输出的结果为
这个是网页标题
下面是一个列表
张三 的成绩是 82
李四 的成绩是 90
王二 的成绩是 60
麻子 的成绩是 77
author © iwind
一切都是我们所期望的.
在这个程序里,我们用
$tpl->set_block(main, list, lists);
加载一个块.其实它的第一个参数为该块所在父变量,如果这个块在header.html里,那么恐怕要这样写了
$tpl->set_block(my_header, list, lists);
但分析方法还是一样的.
从以往和这节中的例子,我们可以看出来,定义一个模板变量值的方法是用
$tpl->set_var(var_name, var_value);
但把一个变量的值给另一个变量就需要用parse.
$tpl->parse(target_name, from_name, true);
或者
$tpl->parse(target_name, from_name, false);
使用parse就先执行from_name大变量的模板变量的替换,然后再把所得结果赋给target_name.
一个变量无论在模板的何处(块里面,子模板里),定义的方法都是一样的.
子模板里还可以嵌入新的子模板,称之为多重嵌套,分析的方法都是一样的,只是一般用不到.块也可以多重嵌套,而且非常有用,使得模板可以设计的可以很清晰,这就是我们下一节的内容了.
其它类似信息

推荐信息