PHPLIB TEMPLATE

模板类实例方法

可调用实例方法

Template($root = ".", $unknowns = "remove")

构造函数.可以有两个可选的参数.第一歌参数设定模板所在目录,第二个参数设定未知变量的处理方式.

set_root($root)

该函数检查$root是否为一个有效的目录,然后把这个模板存放所在目录设为瞩目路.

set_unknowns($unknowns = "remove")

该函数设定未处理的变量名称的处理方式.必须是"remove","comment"或"keep"三者中的一个. 如果设为"keep",这些变量名称将原封不动的保留下来.如果设为"comment",那么会在报错的同时,将未完成处理的变量名称全部转换成HTML的注释.如果设为"remove",未完成处理的变量名称便会被悄悄的删除(这是默认的情况).

set_file($varname, $filename = "")

该函数为一个函数的初值定义一个文件名,可以用一个$varname/$filename对或者一系列的$varname/$filename对来调用它.这些文件只有在需要时才会被加载.

set_block($parent, $varname, $name = "")

变量$parent可包含一个以$varname命名的变量块.该函数会从$parent中把这个块删除,然后用一个名称为$name的变量代替它.如果$name被忽略了,那么它将被假定为和$varname一样

set_var($varname, $value = "")

该函数设定一个变量的初值.可以用一个$varname/$value对或者一系列的$varname/$value对来调用它.

subst($varname)

该函数返回一个名为$varname的变量的值,所有以定义变量的值都已经填入.结果字符串并不是最终结果,而是未完全处理变量的处理还没有应用前的结果.

psubst($varname)

这个是print $this->subst($varname)的简写形式.

parse($target, $varname, $append = false)

该函数替代以$varname为名中的所有已定义变量的值,并存储或附加在以$target为变量名的结果中.

如果$varname为变量名数组,$append就会被屏蔽.以$varname为名的变量被连续的替代,每一个替代步骤的结果都存在$target里.最终的替代结果

可在以$target为名的变量里获得,可以视为下一个$varname的一个中间处理环节.

pparse($target, $varname, $append = false)

这个是print $this->parse(...). 的简写形式

get_vars()

返回所有以定义值的序列,每个值都以其名字为键.

query_id()

返回以$varname命名的变量的值.如果$varname对应着一个文件,而且文件尚未加载,就会报告变量为空.当用变量名称数组调用时,会返回一个值的序列,以它们的名字为键.

get_undefined($varname)

该函数以$varname,名称未键的方式,返回一系列未处理变量名称(即一个含$a[$name]=$name的序列).

finish($str)

该函数将返回$str的最终版本,即针对未完全处理的处理方式将应用到$str上来.

p($varname)

该函数将输出以$varname命名的变量的最后版本的值.

get($varname)

该函数将得到以$varname命名的变量的最后版本的值.

haltmsg($msg)

该函数可以在你的模板子类中被覆写.它可以输出用来调用的信息.

内部实例方法

filename($filename)

当用一个相对路径调用时,函数返回一个路径名,附带从$this->root中提取的合适的目录名.如果是绝对路径,则不加变化即被使用.

结果文件名必须是存在的,否则就会长生一个错误.

varname($varname)

该函数根据所给的变量名称构造一个变量名称表达式(译注:即 var -> {var}).

loadfile($varname)

如果一个变量未定义或者为空,并且对应一个文件,对应着的这个文件就会被加载,文件内容将被赋为该变量的值.

halt($msg)

无论何时发生了一个错误,这个函数都将被唤起,并根据 $this->halt_on_error定义的方式处理这个错误.

模板类应用实例

该模板类管理一些变量的集合,都为文本字符串.这些字符串可能以 {变量}的形式包含其他变量的引用.当分析或替换时,一个变量的引用就会被那个变量的值所替代.例如,如果你这样

<?php

$t = new Template;

$t->set_var("a", "defined as hugo");

$t->set_var("b", "the value of a is {a}");

print $t->subst("b")

?>

将输出"the value of a is defined as hugo".

一个变量的值可以以手工调用set_var('名称", "值");的方式定义,或者可能调用set_file("名称","filename.ihtml");从一个文件中定义.在后一种情况中,当需要时(尽可能晚)文件内容就被加载,并被设置为变量的值.

第三种定义变量值的方式是调用set_block("parent", "block", "name");.这种情况下,以"parent"为名的变量被当作以<!-- BEGIN block -->为开始,以<!-- END block -->为结束的块被查找.字符串从变量"parent"中被删除,赋给以"block"为名的变量.在"parent"里的"name"对应的变量引用被替代了.如果可选项"name"

留空,"block"将被用于替代.

例如,如果这样写

<?php

$t = new Template;

$t->set_var("a", "front matter

<!-- BEGIN b -->

this is block b

<!-- END b -->

end matter");

$t->set_block("a", "b", "bb");

?>

会把变量"a"定义为"front matter {bb} end matter",变量"b"则作为一个块.这一切使得当你在下例中设置内部变量debug为7时,跟踪变量访问情况变得更加清晰.

直接使用模板类或者如有需要的话,定义一个模板类的子类.

象下面一样定义一个名为page.ihtml的模板文件.

<html>

<head><title>{PAGETITLE}</title></head>

<body bgcolor="#ffffff">

<table border=1 cellpadding=4 cellspacing=0 bgcolor="#eeeeee">

<tr>

<td colspan=2><h1>{PAGETITLE}</h1></td>

</tr>

<tr>

<td>{OUT}</td>

<td>Content<br>{UNDEFINED_VARIABLE}</td>

</tr>

</table>

</body>

</html>

这个文件包含一个对应变量PAGETITLET的引用和一个以OUT命名的引用.另外一个以UNDEFINED_VARIABLE为名的变量的引用不作解析.另外一个模板文件,命名为box.ihtml,包含一个名为row的块,含有三个变量引用. {TITLE}, {NUM} 和{BIGNUM}:

<!-- start box.ihtml -->

<table border=1 bgcolor="#cccccc" cellpadding=4 cellspacing=0>

<tr>

<td colspan=2><b>{TITLE}</b></td>

</tr>

<!-- BEGIN row -->

<tr>

<td>{NUM}</td>

<td>{BIGNUM}

</tr>

<!-- END row -->

</table>

<!-- end box.ihtml -->

下面的php文件示范如何使用这些模板:

<?php

/* 引入模板类 */

include("template.inc");

/* 用需要的参数生成模板类的一个实例对象 */

$t = new Template("/home/kris/www/test.koehntopp.de/pages/template", "keep");

/* $t->debug = 7; */ /* 激活全部调试 */

/* 从文件中定义两个变量 */

$t->set_file(array(

"page" => "page.ihtml",

"box" => "box.ihtml"));

/* 定义包含在另一个变量里面的变量 */

$t->set_block("box", "row", "rows");

/* 手动定义两个变量 */

$t->set_var(array("TITLE" => "Testseite",

"PAGETITLE" => "hugo"));

for ($i=1; $i<=3; $i++) {

$n = $i;

$nn = $i*10;

/* 给NUM和BIGNUM赋值 */

$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));

/* 替换row中的NUM和BIGNUM

* 把结果附加到rows */

$t->parse("rows", "row", true);

}

/* 替换box里的所有变量,

结果存储在OUT里面 */

$t->parse("OUT", array("box", "page"));

/* 打印OUT*/

$t->p("OUT");

?>

<hr>

输出未定义变量:

<?php

print @implode(", ", $t->get_undefined("OUT"));

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值