<?php
/*
* (C) Copyright 1999-2000 NetUSE GmbH
* Kristian Koehntopp
*
* $Id: template.inc,v 1.12 2002/07/11 22:29:51 richardarcher Exp $
*
*/
//Bo-Blog所用的模板类 PHPLIB 版权归属 PHPLIB开发者所有!
//请访问PHPLIB的官方站点获取更多有关PHPLIB的知识!
PHP中文帮助文档 www.shengfang.org
帮助文档格式下载(.chm):http://cn.php.net/get/php_manual_zh.chm/from/a/mirror
所有语言版下载:http://www.php.net/download-docs.php
我下载了台湾和大陆的,繁体的和简体的,结果索引中文部分全是乱码。凑合着看看,明天把自己那个弄回来
看了半天IWAS的模板处理,单步跟踪进去,也是莫名其妙的,还以为是他的那个类不行,一阵乱搜索,发现原来是使用了这个Template类,不过他是继承了他自己的FILE类,绕来绕去的,记得BOBLOG好像也是这个方法,打开文件,自己看看。
参考:PHPlib Template 模板类中文文档 第一版 2004-10-16 iwind译 (2004-10-24更新)
该模板类允许你在一些外部文件中保留HTML代码,这些文件完全不包含PHP代码,只含有用以替换的字段(译注:就是下文中所说的变量的"引用")。这个类就提供了一些可以让你用任意的字符串填入欲替换字段的函数。
我的理解就是类似于文本替换,如果你够狠,你可以写一个HTML文件,然后里面加上一个××××之类的,然后用PHP读取文本,str_replace("×××ד,”www.shengfang.org", 应该也差不多
class Template 定义类 www.shengfang.org
{
var $classname = "Template"; 这个好像没有什么用处 :类名称.
var $debug = false; 调试模式,里面代码根据这个开关输出一些调试信息
标识:设为1可观察所有变量赋值情况,设为2可观察可调用变量,设为4可观察内部函数调用.
var $root = "."; 就是你模板文件所在的目录,例如你的模板 ./TMP/TMP.HTML,这里就是./TMP
var $file = array(); 字符串数组,用来保持模板文件名称的,例如 TMP.HTML
例如一个ARRAY("1"=>"A","2"=>"B")
var $varkeys = array(); 数组,保存KEY的索引 1,2就是索引值
var $varvals = array(); 键值 A,B就是键值
var $unknowns = "remove"; 指示未知变量的处理方式
为"keep","comment", "remove" (默认)三者之一.决定了在输出环节上如何处理模板中未完成处理的变量名称.如果设为"keep",这些变量名称将原封不动的保留下来.如果设为"comment",那么会在报错的同时,将未完成处理的变量名
称全部转换成HTML的注释.如果设为"remove",未完成处理的变量名称便会被悄然删除(这也是默认的情况).
var $halt_on_error = "yes";
为"yes"(默认), "report", "no"三者之一. 决定了模板类错误处理方式.如设为"yes"(默认),错误就会被报告,程序执行也随之中断. 如果设为"report",错误同样会被报告,只是程序继续执行,并返回"false".如果设为"no",错误就被屏蔽掉,程序执行结果返回"false"
var $last_error = ""; 最近的一次错误信息保存在这个变量里面
类构造函数,两个参数默认值 www.shengfang.org
function Template($root = ".", $unknowns = "remove") {
if ($this->debug & 4) {
echo "<p><b>Template:</b> root = $root, unknowns = $unknowns</p>\n";
}
$this->set_root($root);
$this->set_unknowns($unknowns); 调用内部函数赋值
}
设置根目录 www.shengfang.org
function set_root($root) {
if ($this->debug & 4) {
echo "<p><b>set_root:</b> root = $root</p>\n";
}
if (!is_dir($root)) { 判断是否目录
$this->halt("set_root: $root is not a directory.");
return false;
}
$this->root = $root; 赋值
return true;
}
设置参数,处理模式
function set_unknowns($unknowns = "remove") {
if ($this->debug & 4) {
echo "<p><b>unknowns:</b> unknowns = $unknowns</p>\n";
}
$this->unknowns = $unknowns;
}
www.shengfang.org
设置模板文件和数组索引
function set_file($varname, $filename = "") {
if (!is_array($varname)) { 判断是否数组
if ($this->debug & 4) {
echo "<p><b>set_file:</b> (with scalar) varname = $varname, filename = $filename</p>\n"; www.shengfang.org
}
if ($filename == "") { 如果为空
$this->halt("set_file: For varname $varname filename is empty.");
return false;
}
$this->file[$varname] = $this->filename($filename); 将file数组 file("1)="temp.html"
} else { 如果是数组
reset($varname); 将数组的内部指针指向第一个单元
while(list($v, $f) = each($varname)) { 返回数组中当前的键/值对并将数组指针向前移动一步,分别赋值给v,f
if ($this->debug & 4) {
echo "<p><b>set_file:</b> (with array) varname = $v, filename = $f</p>\n";
}
if ($f == "") { 文件名
$this->halt("set_file: For varname $v filename is empty.");
return false;
}
$this->file[$v] = $this->filename($f); V索引,F键值
}
}
return true;
}
www.shengfang.org设置变量:变量名称、变量值、是否追加
function set_var($varname, $value = "", $append = false) {
if (!is_array($varname)) { 如果不是数组
if (!empty($varname)) { 如果为空
if ($this->debug & 1) {
printf("<b>set_var:</b> (with scalar) <b>%s</b> = '%s'<br>\n", $varname, htmlentities($value));
}
$this->varkeys[$varname] = "/".$this->varname($varname)."/"; 索引数组赋值
if ($append && isset($this->varvals[$varname])) { 如果是追加 检测变量是否设置
$this->varvals[$varname] .= $value; 拷贝到原值后面
} else {
$this->varvals[$varname] = $value; 赋值
}
}
} else { 数组
reset($varname); 第一个
while(list($k, $v) = each($varname)) { 取,赋值 K,V
if (!empty($k)) { 索引判断
if ($this->debug & 1) {
printf("<b>set_var:</b> (with array) <b>%s</b> = '%s'<br>\n", $k, htmlentities($v));
}
$this->varkeys[$k] = "/".$this->varname($k)."/"; 索引数组赋值
if ($append && isset($this->varvals[$k])) {
$this->varvals[$k] .= $v;
} else {
$this->varvals[$k] = $v;
}
}
}
}
}
清空变量
function clear_var($varname) {
if (!is_array($varname)) { 非数组
if (!empty($varname)) { 非空
if ($this->debug & 1) {
printf("<b>clear_var:</b> (with scalar) <b>%s</b><br>\n", $varname);
}
$this->set_var($varname, ""); 赋空值
}
} else {
reset($varname); 第一个
while(list($k, $v) = each($varname)) {
if (!empty($v)) {
if ($this->debug & 1) { www.shengfang.org
printf("<b>clear_var:</b> (with array) <b>%s</b><br>\n", $v);
}
$this->set_var($v, ""); 逐个赋空值
}
}
}
}
释放变量 www.shengfang.org
function unset_var($varname) {
if (!is_array($varname)) {
if (!empty($varname)) { www.shengfang.org
if ($this->debug & 1) {
printf("<b>unset_var:</b> (with scalar) <b>%s</b><br>\n", $varname);
}
unset($this->varkeys[$varname]); 销毁指定的变量
unset($this->varvals[$varname]);
}
} else {
reset($varname);
while(list($k, $v) = each($varname)) {
if (!empty($v)) {
if ($this->debug & 1) {
printf("<b>unset_var:</b> (with array) <b>%s</b><br>\n", $v);
}
unset($this->varkeys[$v]); 逐个销毁指定的变量
unset($this->varvals[$v]);
}
}
} www.shengfang.org
}