phplib template简明教程(转)
摘自 虾米的游乐场 的博 http://hi.baidu.com/usemm/blog/item/2c19703139b0f61feac4afa2.html
第一章 如何进行安装配置
PHP世界中比较流行的模板处理工具有PHPLIB Template和FastTemplate两种。据笔者看有关资料介绍,PHPLIB Template的技术易用性和速度较为理想,所以俺就学习使用了PHPLIB Template。
phplib template 的安装其实非常简单。现在说简单,呵呵,其实刚开始上手的时候竟然花了好几天的功夫才知道大概是怎么一回事儿。那我们首先来认识一下phplib吧。
随着php的应用和推广,众多开发人员和很多爱好者在php的基础上开发了很多php的程序库,这些程序库大大简化了程序设计和提高了代码的可重用性。其 中phplib就是这些库中相当优秀的产品。phplib有五大功能:将数据库驱动和对数据库操作完全分离;支持session;权限许可;模板;购物 车。我们要用的模板功能只是phplib这个库的诸多功能中的一种。笔者刚开始看phplib 的网方官站 ,就看得一头雾水,怎么还有数据库、session等等,最后才明白原来俺需要的只是template。
要说安装,其实就是下载phplib库文件。你可以到phplib的官方网站下载最新的版本:http://phplib.sourceforge.net 这是一个 tar.gz 压缩包,下载完之后就是解压了。打开解压后的文件夹,里边有一个php文件夹,将该php文件夹复制到任何你想要的其它位置,但不要放在网页 服务器的目录下。比如:我的网页服务器根目录是:/var/www,我可以将php文件夹放在/ var下,与www文件夹平行。然后打开php的配置文件php.ini进行编辑。更改include_path,使其指向刚刚复制的php文件夹的位 置。比如:include_path = ".:/var/www/php"。phplib的官方站quick guide to installation讲了十个步骤,我们只用phplib template这一项功能的话,其它的安装步骤其实根本不用理会。保存退出,重启 apache2服务。然后就可以尝试编写你的第一个模板页了。
我是这样做的:我的网页服务器根目录是:D:\www\root,我的PHP安装目录是 D:\www\php,将下载的tar.gz 压缩包,解压后找到里面那个php文件,然后更名为phplib,它的存放目录是 D:www\phplib,然后打开php的配置文件php.ini进行编辑。更改include_path,使其指向刚刚复制的php文件夹的位 置:include_path=".;D:"www"phplib",一定不能写成 include_path="D:"www"phplib",要不然,进入phpMyAdmin后,将会是一片空白.
第二章 第一个简单的模板页
我理解,所谓"模板",就是将界面和实现代码分离开来,这样做的目的一是将美工和程序员的工作分离开来,提高工作效率,二是方便维护。下面我们就开始尝试写一个简单的模板了,文件名first.htm。
<HEAD>
<TITLE> 我的第一个模板文件 </TITLE>
</HEAD>
<BODY>
你知道吗? {man}真是一个好人。
<font color="#0000FF"> 作者:{author}</font>
</BODY>
</HTML>
first.html模板中的{man}{author}{date}可以称为"模板变量",用花括号({})括起来。
上面我们定义三个变量的原因是我们想随时改变它们的值,下面我们就来做这个工作。新建first.php文件,内容如下:
include ('template.inc'); //包含进模板类 template.inc
$tpl = new Template; //创建一个新模板
$tpl->set_file('main', 'first.html'); //把模板文件加载进来
$tpl->set_var('man', 'fuyatao'); // //给文件中的模板变量赋值
$tpl->set_var('author', 'fuyatao');
$tpl->parse('mains', 'main'); // //完成替换
$tpl->p('mains'); // //输出替换的结果
?>
你也可以一次完成给变量赋值,这样
array('man'=>'fuyatao', 'author'=>'fuyatao')
);
浏览器中浏览这个文件,你就会发现输出:你知道吗?fuyatao真是一个好人。作者:fuyatao.
初次尝试还算顺利吧?如果没有如你所愿地看到上述文字,那一定是你哪里弄错了。浏览器会有提示。还有如果你将这些代码复制到本机不能正确执行,有可能是标 点符号的问题,必须用英文的标点符号,程序中用中文的引号或分号都会引起程序不能正常运行,本人就曾经吃过这个亏,反复检查程序没有错,可就是执行不了, 后来才发现是一个地方用错了标点。
第三章 稍复杂点的应用
现在我们设想稍微复杂一点的情况,新建一个second.htm模板文件,内容为:
<HEAD>
<TITLE>第二个模板文件</TITLE>
</HEAD> <BODY>
下面是一个列表
<UL>
<li>谷军涛 的身高是 170cm
<li>武剑 的身高是 171cm
<li>青竹 的身高是 180cm
<li>王聪聪 的身高是 172cm
</UL>
</BODY>
</HTML>
以上页面是纯静态的,假设要使用数据库,用PHP代码嵌入HTML的话,是这样写的:
<HEAD>
<TITLE>第二个模板文件</TITLE>
</HEAD> <BODY>
下面是一个列表
<?php
$link=mysql_connect('localhost','fuyatao',' passwd');
$result=mysql_db_query('gfs','select name,tall from my_table');
echo "<UL>";
while ($a = mysql_fetch_array($result)){
echo "<li>$a[name]的身高是$a[tall]";
}
?>
</UL>
</BODY>
</HTML>
PHP新手一般都这样写,但你很快发现:你或者美工改这个列表样式的时候需要多么的小心翼翼,特别是美工,如果他不懂PHP代码,那么他会终日在恐惧之 中!因为稍微的不小心,可能就会带来程序的运行错误。对于页面的维护来说,非常不方便。即便是你自己写的代码,过一段时间你也可能有所遗忘,修改起来一样 要备加小心。
现在有了模板,你可以把PHP代码抽取出来。 我们可以这样修改second.htm文件。
<HEAD>
<TITLE>第二个模板文件</TITLE>
</HEAD> <BODY>
下面是一个列表
<UL>
<li>{ name1} 的身高是 {tall1}
<li>{name2} 的身高是 {tall2}
<li>{name3} 的身高是 {tall3}
<li>{name4} 的身高是 {tall4}
</UL>
</BODY>
</HTML>
建立second.php:
include ('template.inc');
$tpl = new Template;
$tpl->set_file('main', 'second.htm');
/******************************/
$result=mysql_db_query('fyt','select name,tall from my_table');
$i=0;
while ( $a = mysql_fetch_array($result))
{
$i++;
$tpl->set_var('name' . $i, $a[name]);
$tpl->set_var('tall' . $i, $a[tall]);
}
//********************************************************
/*上面是用面向面向过程的方法,如果想用面向对象的方法,可以这样写
@ $db = new mysqli('localhost','root','tograce','bookmarks');
$query = "select username,email from user";
$result = $db->query($query);
$num_result = $result->num_rows;
for($i=1;$i <$num_result+1;$i++)
{
$row = $result->fetch_assoc();
$tpl->set_var('name'.$i,$row[username]);
$tpl->set_var('email'.$i,$row[email]);
}
*********************************************************/
$tpl->parse('mains', 'main');
$tpl->p('mains', 'main');
?>
在浏览器里执行 second.php 一样会得到正确的结果。这样以后不管是你还是美工修改页面的时候,再也不用胆颤心惊、担心会把程序弄坏了。
第四章 block的应用
在上一章中,我们使用模板把html和php代码分开。其中second.htm模板中关于列表部分是这样写的:
<li>{name1} 的身高是 {tall1}
<li>{name2} 的身高是 {tall2}
<li>{name3} 的身高是 {tall3}
<li>{name4} 的身高是 {tall4}
</UL>
是不是有点烦琐?本来没用模板之前,我们用了一句
echo "<li>$a[name]的身高是$a[tall]";
}
就搞定了,用了模板,反而要写4次,如果是100人的列表,岂不是我们要写100次?天啊!够吓人的。好在phplib templete为我们提供了block,将其真译为"块"。通过定义块,也可以用一行轻松搞定。
<!-- BEGIN list -->
<li>{name} 的身高 {tall}
<!-- END list -->
</UL>
需要注意的是,BEGIN list与前后的中划线–之间必须有空格,前后中划都是两个,此处可能由于显示太小,两个中划线连到一块儿了。
在 second.php中需要加载块。
include ('template.inc');
$tpl = new Template;
$tpl->set_file('main', 'second.htm');
$tpl->set_block('main', 'list', 'nlist'); //加载模板main中的块list,并给其一个名字nlist
$link=mysql_connect('localhost','fuyatao','passwd');
$result=mysql_db_query('fyt','select name,tall from my_table');
while ( $a = mysql_fetch_array($result))
{
$tpl->set_var('name',$a[name]);
$tpl->set_var('tall',$a[tall]);
$tpl->parse('nlist', 'list', true);
}
$tpl->parse('mains', 'main');
$tpl->p('mains');
?>
第五章 模板嵌套
在写PHP页面的时候,我们会发现像页面头部分和尾部分,有好多页都要用,每页写一遍就太麻烦了,这些”公用代码”我们可以把它单独写在一个文件里,如果 这个公用部分要有所改动,无需再去改每一个页面,能减少非常多的工作量。用Template模板可以很方便的把一个页面随意插入另一个模板的任意地方。
新建3个文件third.htm、header.htm、footer.htm,内容分为如下
third.htm
{header}
<BODY>
下面是一个列表
<UL>
<!– BEGIN list –>
<li>{name} 的身高是 {tall}
<!– END list –>
</UL>
<!– 这是页脚部分 –>
{footer}
</BODY>
</HTML>
header.htm
<HEAD>
<TITLE> {title} </TITLE>
</HEAD>
footer.htm
下面我们开始我们的PHP程序:
include ('template.inc');
$tpl = new Template;
$tpl->set_file('main', 'third.htm');
$tpl->set_file('my_header', 'header.htm');
$tpl->set_file('my_footer', 'footer.htm');
$tpl->set_var('title', '这个是网页标题');
$tpl->set_block('main', 'list', 'nlist');
$link=mysql_connect('localhost','fuyatao','passwd');
$result=mysql_db_query('fyt','select name,tall from my_table');
while ( $a = mysql_fetch_array($result))
{
$tpl->set_var('name',$a[name]);
$tpl->set_var('tall',$a[tall]);
$tpl->parse('nlist', 'list', true);
}
$tpl->parse('header', 'my_header');
$tpl->parse(footer, my_footer);
$tpl->parse('mains', 'main');
$tpl->p('mains');
?>