动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   PHP → 阅读文章

 PHP3 之 FastTemplate

作者来源: 
阅读 数 429 人次 , 2006-3-29 4:13:00 


当你在建立一个站点的时候,可能不得不面对以下现实:
站点需要一名程序员来设计程序和一名网站设计者来组织页面。那么,是否有使两者很好的结合起来的方法呢?

有的,就是使用模板(fasttemplate:这个程序在本站的“程序和代码”中可以找到),这将会使你的工作更加轻松。

下面解释一下使用模板的好处:

1、在很短的时间内可以替换整个站点的外观
2、使程序员可以抽象编程,而无须接触html代码
3、速度非常之快
4、可以重复利用以前的模板

模板的来历:fasttemplate来自于同名的perl软件包(在cpan上可以找到)。 它被移植到了php3平台上。你只需要一个基础类文件class.fasttemplate.php3

先解释一下使用模板和使用echo或print命令建立html页面的区别,echo和 print在编写短小的脚本时显得非常实用,但是做出来的脚本的组织性和可定制性不好,修改起来颇废工夫,模板在编写支持多国语种的站点时的效率则要高的多,如用echo和print可以想象工作量之大。

不用担心,熟练使用fasttemplate会占去你一部分时间,但是这些时间会在你 以后的工作中弥补回来,尤其是大工程时。

那么,怎么使用fasttemplate呢?

第一步,只需使用函数<?php $tpl = new fasttemplate( "path"); ?>,其中path指向template目录所在的路径。这句函数建立了一个$tpl对象,以后可以对它指定参数,进行处理或用来建立各种页面等等。

fasttemplate是建立在这么一种理论基础之上的,即假定一个web页是由许多小的部分组成的。举例来说,如web页细分为title、page、foot等等。整个页被赋予一个变量名,每一个小部分又被赋予一个变量名,最小的不可分割的部分通常就是字符串了,它也被赋予一个变量名。具体处理的时候,是一层层的包含关系。被包含部分在上一层中以宏{name}的形式出现。最后经过一层层的向上输出,得到完整的页面。

那么最底层的向字符串赋值的函数是什么呢,就是:

<?php $tpl->assign(name, "text"); ?>

通过这个功能,fasttemplate将字符串text赋予了变量name,以后上一层就可替换宏{name}的内容为text。

例如:

$tpl->assign(name, "me");

这就将变量name赋值了字符串"me"。

第二步,$tpl需要知道其所调用的所有模板文件,即各个小部分。这个功能由define一个数组实现:

<?php $tpl->define(); ?>

例如:

<?php $tpl->define(array(foo => "foo.tpl", bar => "bar.tpl")); ?>

这说明总共包括了两个模板文件:foo.tpl和bar.tpl,并给它们指定了名字foo和bar。

有了第一节的知识以后,你现在是否想试一试将模板文件中所包含的宏
{macros}部分按照自己定义的变量替换呢?使用以下的命令即可实现:

<?php

$tpl->parse(pagecontent, "foo");

?>

这条命令的具体意义是:

我们首先已经用assign定义了foo模板中包含的若干宏变量,然后根据这些变量对模板文件foo进行替换处理,并将替换后的模板文件赋予另一个变量名pagecontent。

完整如下:

<?php

$tpl->assign(name, "me");
$tpl->parse(pagecontent, "foo");

?>

当然,我们还没有作完,因为bar模板文件才是web的主输出部分,bar模板包含着foo模板,bar中还包含着宏变量{pagetitle}和{pagecontent}等待处理,pagecontent经过对foo的处理已经得到,pagetitle还未指定,所以还要还要指定pagetitle,并调用函数

<?php $tpl->parse(main, "bar"); ?>

进行处理,并将处理后的结果赋予变量main。

如下:

<?php

$tpl->assign(pagetitle, "foobar test");
$tpl->parse(main, "bar");

?>

很简单吧,最后我们只需输出页面即可:

<?php

$tpl->fastprint(main);

?>

下面就是foo.tpl,bar.tpl与最终的demo.php3文件。
请大家仔细琢磨琢磨:

-------------------------------------------------------------
foo.tpl

<!-- foo.tpl -->
this does not do anything obvious. please look at {name}.

-------------------------------------------------------------
bar.tpl

<!-- bar.tpl -->
<html>
<head><title>feature world - {pagetitle}</title></head>
<body bgcolor=black text=white>
<h1>{pagetitle}</h1>
{pagecontent}
</body>
</html>

------------------------------------------------------------
demo.php3

<?php

include "class.fasttemplate.php3";

$tpl = new fasttemplate( ".");
$tpl->define(array(foo => "foo.tpl", bar => "bar.tpl"));

$tpl->assign(name, "me");
$tpl->parse(pagecontent, "foo");

$tpl->assign(pagetitle, "welcome!");
$tpl->parse(main, "bar");

$tpl->fastprint(main);

?>
------------------------------------------------------------

编制一个表格的例子:

经过以上的阐述,大家是否已经明白一点了。
下面是一个处理表格的例子,首先我们再学一些新知识。

当我们当处理完foo模板后,并赋予了变量tpl1,我们可以将bar模板的内容处理后追加进tpl1中,这样就不必定义过多变量,也易于理解,例处理完页面的title后将content部分追加进去,最后将foot追加,生成完整一个页面再输出。这条命令就是:
<?php $tpl->parse(tpl1, ".bar"); ?>
其中的.表示追加。

如下:

<?php

# 处理模板foo,并赋予变量tpl1
$tpl->parse(tpl1, "foo");

# 处理模板bar,并追加进变量tpl1
$tpl->parse(tpl1, ".bar");

?>

下面是一个完整的表格例子,大家好好揣摸揣摸

page.tpl

<html>
<head><title>feature world - {page_title}</title></head>
<body bgcolor=black text=white>
<h1>{page_title}</h1>
{page_content}
</body>
</html>

table.tpl

<table>
<tr> <th>name</th> <th>size</th> </tr>
{table_rows}
</table>

table_row.tpl

<tr>
<td>{filename}</td>
<td>{filesize}</td>
</tr>

yad.php3

<?php

include "class.fasttemplate.php3";

function initializetemplates() {
global $tpl;

$tpl = new fasttemplate( ".");
$tpl->define(
array(
page => "page.tpl",
table => "table.tpl",
table_row => "table_row.tpl"
)
);
}

function readcurrentdirectory() {
global $tpl;

$handle = opendir( ".");
while($filename = readdir($handle)) {
$tpl->assign(filename, $filename);
$tpl->assign(filesize, filesize($filename));
$tpl->parse(table_rows, ".table_row");
}
closedir($handle);
$tpl->parse(page_content, "table");
}

function printpage($title) {
global $tpl;

$tpl->assign(page_title, $title);
$tpl->parse(final, "page");
$tpl->fastprint(final);
}

initializetemplates();
readcurrentdirectory();
printpage( "yet another demo");

?>

关于速度的最后一点讨论:

看完以上的例子,你会说“太棒了!漂亮,但是,速度怎么样呢?”

没问题,你的站点会变得很快。简单的说:因为你是一个程序员,你应该关注于程序代码的设计,代码应该更加有效率,应容易修改和容易理解。使用fasttemplate可以可以帮助你做到这一点,所以它使你的工作更加轻松一些。

如果你想替代一个已经建好的web站点,我们建议使用regex(替换表达式)来替换,实际上fasttemplate使用的就是regex 来替换模板中的宏。

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:php编写大型网站问题集
· 下一篇:模板,PHPLIB处理方式
· 生成Excel文件范例(1):客户端
· 上传图片时生成缩微图象的函数
· PHP网站提速三大“软”招
· 在phpMyAdmin使用用户口令登陆
· 分页类


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077