Rumah > Artikel > pembangunan bahagian belakang > PHP3之FastTemplate_PHP
当你在建立一个站点的时候,可能不得不面对以下现实:
站点需要一名程序员来设计程序和一名网站设计者来组织页面。那么,是否有使两者很好的结合起来的方法呢?
有的,就是使用模板(FastTemplate:这个程序在本站的“程序和代码”中可以找到),这将会使你的工作更加轻松。
下面解释一下使用模板的好处:
1、在很短的时间内可以替换整个站点的外观
2、使程序员可以抽象编程,而无须接触HTML代码
3、速度非常之快
4、可以重复利用以前的模板
模板的来历:FastTemplate来自于同名的Perl软件包(在CPAN上可以找到)。 它被移植到了PHP3平台上。你只需要一个基础类文件class.FastTemplate.php3
先解释一下使用模板和使用echo或print命令建立html页面的区别,echo和 print在编写短小的脚本时显得非常实用,但是做出来的脚本的组织性和可定制性不好,修改起来颇废工夫,模板在编写支持多国语种的站点时的效率则要高的多,如用echo和print可以想象工作量之大。
不用担心,熟练使用FastTemplate会占去你一部分时间,但是这些时间会在你 以后的工作中弥补回来,尤其是大工程时。
那么,怎么使用FastTemplate呢?
第一步,只需使用函数,其中path指向template目录所在的路径。这句函数建立了一个$tpl对象,以后可以对它指定参数,进行处理或用来建立各种页面等等。
FastTemplate是建立在这么一种理论基础之上的,即假定一个web页是由许多小的部分组成的。举例来说,如WEB页细分为TITLE、PAGE、FOOT等等。整个页被赋予一个变量名,每一个小部分又被赋予一个变量名,最小的不可分割的部分通常就是字符串了,它也被赋予一个变量名。具体处理的时候,是一层层的包含关系。被包含部分在上一层中以宏{NAME}的形式出现。最后经过一层层的向上输出,得到完整的页面。
那么最底层的向字符串赋值的函数是什么呢,就是:
assign(NAME, "text"); ?>
通过这个功能,FastTemplate将字符串text赋予了变量NAME,以后上一层就可替换宏{NAME}的内容为text。
例如:
$tpl->assign(NAME, "me");
这就将变量NAME赋值了字符串"me"。
第二步,$tpl需要知道其所调用的所有模板文件,即各个小部分。这个功能由define一个数组实现:
define(); ?>
例如:
define(array(foo => "foo.tpl", bar => "bar.tpl")); ?>
这说明总共包括了两个模板文件:foo.tpl和bar.tpl,并给它们指定了名字foo和bar。
有了第一节的知识以后,你现在是否想试一试将模板文件中所包含的宏
{MACROS}部分按照自己定义的变量替换呢?使用以下的命令即可实现:
$tpl->parse(PAGECONTENT, "foo");
?>
这条命令的具体意义是:
我们首先已经用assign定义了FOO模板中包含的若干宏变量,然后根据这些变量对模板文件FOO进行替换处理,并将替换后的模板文件赋予另一个变量名PAGECONTENT。
完整如下:
$tpl->assign(NAME, "me");
$tpl->parse(PAGECONTENT, "foo");
?>
当然,我们还没有作完,因为bar模板文件才是WEB的主输出部分,BAR模板包含着FOO模板,BAR中还包含着宏变量{PAGETITLE}和{PAGECONTENT}等待处理,PAGECONTENT经过对FOO的处理已经得到,PAGETITLE还未指定,所以还要还要指定PAGETITLE,并调用函数
parse(MAIN, "bar"); ?>
进行处理,并将处理后的结果赋予变量MAIN。
如下:
$tpl->assign(PAGETITLE, "FooBar test");
$tpl->parse(MAIN, "bar");
?>
很简单吧,最后我们只需输出页面即可:
$tpl->FastPrint(MAIN);
?>
下面就是foo.tpl,bar.tpl与最终的demo.php3文件。
请大家仔细琢磨琢磨:
-------------------------------------------------------------
foo.tpl
This does not do anything obvious. Please look at {NAME}.
-------------------------------------------------------------
bar.tpl
name | size |
---|