哈,好久不写blog了,今天就随便写点吧,怎么这blog的编辑器成了FCK的了呢?
突发灵感,写了一个非常简单的模版类,虽然没啥先进的东西,不过我总认为灵感也是需要积累的。
功到自然成嘛。模版类文件代码:
/**
* 作者:darasion
* 版权:使用或转载注明作者
*
*/
class DarasionTemplate{
var $template = "";
var $VAR = array();
var $className = "DarasionTemplate";
/**
* 设定 参数/模版
*
*/
function setVar($name,$value){
if(strtolower(get_class($value))==strtolower($this->className)){
$this->VAR[$name]=$value->parse();
}else{
$this->VAR[$name]=$value;
}
}
/**
* 获得 参数/解析后的模版
*
*/
function getVar($name){
if(isset($this->VAR[$name])){
return $this->VAR[$name];
}
}
/**
* 设定模版路径
*
*/
function setTemplate($tpl){
$this->template = $tpl;
}
/**
* 输出html
*
*/
function out(){
echo $this->parse();
}
/**
* 解析模版
*
*/
function parse(){
ob_start();
include_once($this->template);
echo $content=ob_get_contents();
ob_end_clean();
return $content;
}
}
?>
这个模版类能够支持模版的嵌套,只要将子模版类的实例当作参数设置给父模版即可
使用方法:
test.php
include("DarasionTemplate.php");
//建立父模版
$tpl=new DarasionTemplate();
$tpl->setTemplate("inc/__tpl.php");
//父模版参数
$tpl->setVar("title","参数title");
$tpl->setVar("a","参数a");
$tpl->setVar("b","参数b");
//建立子模版
$tpl1=new DarasionTemplate();
$tpl1->setTemplate("inc/__tpl1.php");
//设置子模版参数
$tpl1->setVar("kk","kk");
//将子模版放入父模版中
$tpl->setVar("c",$tpl1);
$tpl->out();
?>
//父模版:__tpl.php
getVar("kk");?> | getVar("kk");?> | getVar("kk");?> |
输出的html:
kk | kk | kk |
このテンプレート クラスでは、他のテンプレート クラスとは異なるメソッドを使用して実装します。
1. 他のテンプレート クラスの {a} と同様のものを そしてその形式は子テンプレートと親テンプレートで同じです。
2. ループする必要がある場合は、foreach() などの PHP ループ コードを記述するだけです。
これを行う利点は次のとおりです:
1. 文字列の置換プロセスが節約されます (多くの正規表現は常に理解するのが困難です。笑、私は自分で怠惰な方法を考えました)。
2. まだラベルになっていない多くのことを再学習するプロセスが節約されます (それでも私は怠け者なので)。
3. さらに重要な利点は、このテンプレート クラスに対応するテンプレートを Dreamweaver などのツールを使用して視覚的に編集できることです。
これは気まぐれに書かれたものなので、厳密な精査に耐えられるものではありません。実際に役立つのであれば、そのほうが良いでしょう。