首页 > 开发 > PHP > 正文

非常简单的php模版类--DarasionTemplate

2024-05-04 23:04:34
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,

哈,好久不写blog了,今天就随便写点吧,怎么这blog的编辑器成了fck的了呢?

突发灵感,写了一个非常简单的模版类,虽然没啥先进的东西,不过我总认为灵感也是需要积累的。
功到自然成嘛。模版类文件代码:
<?php
/**
* 作者: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
<?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
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title><?php echo @$this->getvar("title");?></title>
</head>

<body>
<?php echo @$this->getvar("a");?>
<?php echo @$this->getvar("b");?>
<?php echo @$this->getvar("c");?>
</body>
</html>

//子模版:__tpl1.php

<table width="200" border="1" bordercolor="#000000">
  <tr>
    <td><?php echo @$this->getvar("kk");?></td>
    <td><?php echo @$this->getvar("kk");?></td>
    <td><?php echo @$this->getvar("kk");?></td>
  </tr>
</table>


输出的html:

<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>参数title</title>
</head>

<body>
参数a 参数b
<table width="200" border="1" bordercolor="#000000">
  <tr>
    <td>kk</td>
    <td>kk</td>
    <td>kk</td>
  </tr>
</table>
</body>
</html>

在这个模版类中,使用了与其他模版类不同的方法来实现:
1、把其他模版类中的类似{a}的换成了<?php echo @$this->getvar("a");?>而且子模版和父模版中他们的形式相同。
2、如果需要循环,只需要写php的循环代码即可,如:foreach()。

这样做的好处是:
1、省去了字符串的替换过程(一大堆的正则总是看不懂,呵呵,给自己想了个偷懒的办法)。
2、省去了重新学习一大堆说是标签还不是标签的东西的过程(还是因为自己懒)。
3、更重要的好处是,用这个模版类对应的模版,是完全可以用dreamweaver等工具进行可视化编辑的。

由于是一时兴起写成的东西,肯定经不起仔细的推敲,只是给大家提出一个想法,供大家讨论;如果真的能在实际中对你有所帮助,自然更好了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表