分享
 
 
 

PHPLIB Template入门系列 -2 开始你的第一个应用

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一个封装很好的类对使用者(可能不是开发者本人)来说,最大的好处就是,你无需知道类内部是怎么运作的,只需知道如何利用它提供的接口做你想做的事情即可.所以,本文不打算具体讲述PHPLIB Template(以下简称Template)是如何将"元素"转换成"值"的,你需要了解的是"它能这样做",而不是"它为什么能这样做".

好了,下面我们就开始它的第一个应用了.

先在我们要测试的网站的目录下建两个文件夹inc和template.目录inc下放引用文件,比如类库,函数库等,这里我们就把template.inc放如该目录下.tempate下放模板文件,我们先建一个模板文件first.html,内容如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> 我的第一个模板文件 </TITLE>

</HEAD>

<BODY>

真想对你说:我爱你 {lover} ,但我却不敢说,因为我知道你爱的人是 {man}.

<P>

<font color="#0000FF">{author}</font> 于 {date}

</BODY>

</HTML>

用inc,template命名文件目录,都是我的个人习惯,你完全可以采取不同的方式.我用扩展名为.html的名称命名模板文件,是为了方便美工用frontpage或者dreamweaver修改,但这完全取决于你自己的习惯.

first.html模板中的{lover},{man},{author}可以称为"模板变量",用花括号({})把变量名称括住即组成一个模板变量.模板变量就是模板元素的一种。你可能会担心它的命名问题,其实除了空格(" "),回车换行("\r", "\n"),tab(\t)外它都被视为是正确的.所以

{your-lover}

也是正确的.这点有时可能会令你很痛苦,因为模板里的有些javascript代码可能无意间变没有了,比如

if(a>b){document.write("i love u");}

中的

{document.write("i love u");}

也被视为一个变量了.上面的代码在你选的模板处理方式下,可能会变成if(a>b){},从而导致javascript错误.为什么会"变没"了呢?稍后将做解释.

上面我们定义的三个变量{lover},{man},{author}的原因是,我们想随时改变它们的值.下面我们就来做这个工作.新建first.php文件,内容如下:

<?php

//包含进模板类 template.inc

require "inc/template.inc";

//创建一个实例

$tpl = new Template("template", "keep"); //注1

//将整个文件读进来

$tpl->set_file("main", "first.html"); //注2

//给文件中的模板变量赋值

$tpl->set_var("lover", "kiki"); //注3

$tpl->set_var("man", "ccterran"); //注4

$tpl->set_var("author", "iwind"); //注5

//完成替换

$tpl->parse("mains", "main"); //注6

//输出替换的结果

$tpl->p("mains"); //注7

?>

浏览器中浏览这个文件,你就会发现输出

真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

iwind 于 {date}

这一切正如我们所期望的(除了{date}).注1

$tpl = new Template("template", "keep");

是创建一个Template类的实例对象.它有两个参数,都是可选的.

第一个参数是模板所在目录,如果不设置则为"."(即当前目录),由于我们刚才把模板文件first.html放到template下了,所以这里为template.注意它一般使用相对路径,如果你用相对于根目录(比如 /phplib/test/template)的路径,就会出现

Template Error: set_root: /phplib/test/template is not a directory.

Halted.

的错误.

第二个参数是指定模板类对"未完成处理"变量的处理方式,所谓"未完成处理"指的是模板变量未赋值,块未完成替换工作(下面一节将讲到它),它有三个值可选,分别为"keep","comment","remove":

如果设为"keep",这些变量将原封不动的保留下来.

如果设为"comment",那么会在报错的同时,将未完成处理的变量全部转换成HTML的注释.

如果设为"remove",未完成处理的变量便会被删除(这也是默认的情况).

所以在上面的例子中,我指定的是"keep",于是{date}因为未赋值,所以还保留着.而缺省的情况下是"remove",所以,如果我这样创建实例对象

$tpl = new Template("template", "remove");

或者

$tpl = new Template("template");

的话,输出就变成了

真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

iwind 于

可以看出{date}被删除了.如果是

$tpl = new Template("template", "comment");

它的结果将是

真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

iwind 于

看起来和"remove"方式一样,但查看源文件,我们会发现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> 我的第一个模板文件 </TITLE>

</HEAD>

<BODY>

真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

<P>

<font color="#0000FF">iwind</font> 于 <!-- Template variable date undefined -->

</BODY>

</HTML>

其中有<!-- Template variable date undefined -->的错误信息,告诉我们date变量未定义(赋值).

用"comment"或许对程序的调试很有帮助.

我们再回头看看

if(a>b){document.write("i love u");}

{document.write("i love u");}

会"变没"的问题,是因为模板类视之为模板变量,但你没有给它指定值(当然会没有),且你没有指定"keep"方式来处理未定义变量,所以它就被"remove"了.

所以在模板使用过程中应该多多注意这些问题.

注2是将一个模板文件加载进来,事实上你可以一次加载多个模板(在第四节将讲到这个问题).你可以想象

$tpl->set_file("main", "first.html");

把"first.html"内容给变量"main"(尽管很多人称之为"句柄",但本文决定不谈"句柄"),所以"main"的值就变成模板的内容了,包含着那些模板变量.

注3,注4,注5,是给模板变量赋值.值是什么,你自然可以随便定.比如你还可以

$tpl->set_var("lover", "kiki1");

$tpl->set_var("man", "ccterran1");

$tpl->set_var("author", "iwind_php");

你也可以一次完成给一列的变量赋值.这样

$tpl->set_var(

array("lover"=>"kiki", "man"=>"ccterran", "author"=>"iwind")

);

如果你想设置一个变量的值为空的话,可以

$tpl->set_var("man", "");

或者

$tpl->set_var("man");

注6,是执行将上面$tpl->set_var给模板变量指定的值替换掉模板中的模板变量这个操作,第一个参数即为模板分析的结果,也可以视为一个变量.

当然注7的 $tpl->p("mains"); 就将模板分析的结果如你所愿的输出啦.

喏,恭喜你,你的第一个模板类应用就完成了.你可能不小心弄错了哪个地方,模板类默认情况下会自动打印出错误提示的,根据这些提示,你就很容易就可以找出问题所在,在第6节将会具体讲到.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有