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

哈,好久不写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等工具进行可视化编辑的。

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

时间: 2024-12-31 22:10:33

非常简单的php模版类--DarasionTemplate的相关文章

一个简单的链表模版类的实现

这是翻阅<数据结构.算法与应用--C++语言描述> 以及在网上得到的一些资料后写出来的.起因是在项目中要用到一个链表,但我做一个简单的链表在C++中用的时候跟C差别很多,比如赋值运算(编译器说要做操作符重载,或者考贝构造函数,C++中把结构当成一个类来看了,详见相关介绍的文档或书籍).后来一想干脆做个template顺便学习一下,一举两得. 几个问题: CListData和CNode的函数均为内联函数(inline),因为目前的编译器仍不支持分离编译.按<Thinking in C++&

模版类站点交换友情链接的三个快速而有效的方法

如今,开源建站程序是站长们最常见的,很多站长们都是通过开源建站程序来建设属于自己的网站,到目前未知开源建站程序大同小异,有PHP语音的也有ASP语言的,从最早的discuz论坛建站系统到后期的CMS文章系统等,一路发展而来呈现出了很多种开源建站程序,然而不管是哪一种建站后都需要给网站安装模版,而在这个时候很多站长们都会搜索引擎上搜索相关的模版网站,然后找到免费的或者付费的去安装网站模版,由此一来模版类型的网站慢慢的也流行起来,可想而之竞争力也是比较强大的. 当模版类的网站发展起来之后,很多站长们

PHP实现的一个简单的数据库操作类

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $username; private $password; public $default_db; public $link; // 声明构造函数 public f

一个ASP(VBScript)简单SQL语句构建“类”

vbscript|语句|vbscript <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><% Option Explicit %><% Response.Buffer = True %><%' /////////////////////////////////////////////////////////////////////////////////////////////////////

动态库接口 模版类-C++模版类是否可以作为动态库接口

问题描述 C++模版类是否可以作为动态库接口 C++模版类是否可以作为动态库接口,怎么实现,现在弄出来 template extern "C" __declspec(dllexport) class IDlgT { }; error C2988: 不可识别的模板声明/定义 不能的话请说下原因,不需要解决方式 解决方案 一个原因是模版类都是在头文件中,而你通过dll导出也需要提供头文件,那么你还导出干嘛,别人可以直接用头文件来实例化你的模版类 http://stackoverflow.c

php实现的简单数据库操作Model类_php技巧

本文实例讲述了php实现的简单数据库操作Model类.分享给大家供大家参考,具体如下: 该数据库模型类可实现数据库的增删改查,简化数据库操作. 1. config.php代码: <?php define("HOSTNAME","127.0.0.1"); define("USERNAME","root"); define("PASSWORD",""); define("DA

PHP实现简单实用的分页类代码_php技巧

本文实例讲述了PHP实现简单实用的分页类.分享给大家供大家参考,具体如下: <?php class Page { private $total; //总记录 private $pagesize; //每页显示多少条 private $limit; //limit private $page; //当前页码 private $pagenum; //总页码 private $url; //地址 private $bothnum; //两边保持数字分页的量 //构造方法初始化 public funct

PHP实现简单实用的验证码类_php技巧

本文实例讲述了PHP实现简单实用的验证码类.分享给大家供大家参考.具体如下: <?php /** * @version 1.0 * @author bolted snail * @date 2011-10-15 * @PHP验证码类 * 使用方法: * $image=new Captcha(); * $image->config('宽度','高度','字符个数','验证码session索引'); * $image->create();//这样就会向浏览器输出一张图片 * //所有参数都可

直主题和应用简单的web2.0类网站将失败

这个观点,很早谢文先生就说过.我没有注意. 最近我在为我的站点寻找资源的时候,发现很多web2.0站点, 我们仅需要花一两个小时,就可以翻新了它的站点.竞争力实在薄弱. 于是,我坚信垂直主题和应用简单的web2.0类分享网站都不会成功! 同时想起谢文曾经的一些分析:      500){this.resized=true;this.style.width=500;}"> newnew.cn 是一个专门做web2.0网站的分享和点评的网站. 相信很多站长都知道. 收录web2.0站点近100