分享
 
 
 

在PHP中如何使用模板

王朝php·作者佚名  2008-12-22
窄屏简体版  字體: |||超大  

是否你面临着创建由一个编程人员(可能就是你)和一个设计人员同时进行创作的网站?你不知道如何使工作对你俩来说变得容易吗?我来给你答案:使用FastTemplate来使你的站点更容易定制!

好了,你可能想知道为什么你要使用FastTemplates。

·可以在几秒钟改变你的整个站点的外观

·抽象程序设计,没有垃圾HTML代码

·设计人员不需要关心全部的"模糊"代码

·令人惊讶地快

·更容易重用旧的模版(对普通的表单而说)

FastTemplate源于一个有同样名称的Perl软件包(可以在CPAN上找到)。你可以下载PHP 的版本从它的主页(本站下载地址为:http://www.phpe.net/downloads/1.shtml)。你只需要其中的一个类的文件(class.FastTemplate.php)。

让我首先解释一下在使用模板生成一个页面与简单地通过echo或print 将页面输出之间有什么不同吧。

简单地使用echo/print的方法很适合编写短的脚本,但是不能帮助你更好的组织和定制。模板在另一方面给

了你创建多国语言站点的能力,只是通过改动一个参数。他们可以促使你更关心你要做的。

在开始编码之前不要害怕思考。它可能会花费一些时间,但是这些花费会随着项目的发展对你有所回报。

那么,如何应用FastTemplate呢?首先你需要先进行一个简单地调用:

<?php $tpl=new FastTemplate ("path");

?>

传递给它一个路径,是所有你的模板文件存放的目录。它返回一个对象,你可以用它进行参

数赋值,生成页面等等。

FastTemplate是基于这样一种假设:一个很大的页面是由很多小的部分组成的。每一个部分有一个唯一

的名字。最小的部分是赋值给这样有着唯一名字的一段正常的文本字符串。这个可以通过 <?php

$tpl->assign(NAME, "text");

?>

来完成。现在,如果你的一个模板包含{NAME},FastTemplate 就知道你

的意图了。

另外,FastTemplate需要知道你想如何调用你的模板。你需要通过传递一个相关数组(associative

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

来给它一个提示。

<?php

$tpl->define(array(foo => "foo.tpl",

bar => "bar.tpl"));

?>

这些赋值将分别给foo和bar以不同的文件(名为foo.tpl和bar.tpl)。

现在你想让FastTemplate替换在模板foo中的所有{MACROS}为相应的值。通过发出命令

<?php

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

?>

来实现。 这个命令将把模板"foo"的内容赋给PAGECONTENT。 当然,我们还没有做完,因为模板bar中为主要的页面定义,FastTemplate需要替换其中的

{PAGECONTENT}宏。我们也需要给PAGETITLE赋值,如下所做: <?php

$tpl->assign(PAGETITLE, "FooBar test");

$tpl->parse(MAIN, "bar");

?>

容易吧,不是吗?我们现在只需要把它输出: <?php

$tpl->FastPrint(MAIN);

?>

下面三个文件显示了实际练习中的更多的细节描述。我不知道在现实生活了离了这个技术应如何生活 --

你的设计者会高兴,你的老板会微笑,因为你可以在更短的时间内做更多的事情。

bar.tpl <!-- bar.tpl -->

<HTML>

<HEAD><TITLE>Feature world - {PAGETITLE}</TITLE></HEAD>

<BODY BGCOLOR=BLACK TEXT=WHITE>

<H1>{PAGETITLE}</H1>

{PAGECONTENT}

</BODY>

</HTML>

foo.tpl <!-- foo.tpl -->

很明显示什么都没做。请看{NAME}.

demo.php3 <?php

include "class.FastTemplate.php3";

$tpl = new FastTemplate( ".");

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

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

$tpl->assign(PAGETITLE, "Welcome!");

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

$tpl->parse(MAIN, "bar");

$tpl->FastPrint(MAIN);

?>

创建整个表格

我也写了一个短的例子,用来演示如何通过单行模板来生成整个表格。它很有效,因为你仍然不需要直

接修改HTML文档。

我们增加一个模板的内容到一个已经定义过的唯一命名的后面来创建HTML表格。这个可以通过在调用

$tpl->parse()时,在模板名前加上一个"."来实现。 <?php

// 将模板foo的内容赋给TPL1

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

// 在TPL1后附上模板bar的内容

$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");

?>

速度讨论

"Ok," 你可能会说,"一切都太好了。但是它不会影响我的网站的速度吗?"

不,你的网站可能变得更快。一个简单的原因就是:因为你作为一个编程人员关心的是设计你的应用和编写代码,你的代码将会更有效率,处理相同的任务更容易和更快速。所以,你可能会在上面列出的为什么考虑使用FastTemplate在你的项目中的原因列表中增加另一条理由。

如果你只是想转换一个已经存在的web站点,性能上的成功可能不会被注意到。我建议在PHP中使用正则表达式缓冲,它将对这种情况有所帮助。因为FastTemplate对每一个宏都使用正则表达式,每一个正则表达式将被只编译一次并且速度上的影响可以忽略不计。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有