喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
     
标题: [原创] Just template---发一个自己编写的模板  
 
streen003
注册会员
Rank: 2
一般会员


UID 67784
精华 0
积分 58
帖子 45
金钱 58 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-1-5
来自 山东
状态 离线
Just template---发一个自己编写的模板

本人最近研究了PHPLIB等模板之后,乘兴编写了this template class 。之所以命名为:Just template,就是告诫自己这仅仅是一个模板,真正PHP世界的迷人风光我还没有领略到。所以,我对自己说:“streen003向前行,streen003一定赢”。
       Just template 作为分析型的模板,采用了与PHPLIB相似的运行原理。功能不算强大,不过速度高效,操作简单,依然不失为template class里的实用之选。
模板代码如下:

<?php
/******************************************************************
*
*                        Just template 
*                       ---------------
*            Written by streen003 <[email]streen003@gmail.com[/email]>
*                     [url]http://www.bc263.com[/url]
*                Version: Just template 2008.3.19.
*
******************************************************************/
/**
*  The interface of this Template class was originally inspired 
*  by PHPLib templates,and the template file formats are quite
*  similar. Thanks for flyinghail's and anran's help.
*/

class Template {
    
// 声明模板变量
var $classname 'Template';
var 
$files = array();  
var 
$root '';
var 
$varkey = array();
var 
$varval = array();
var 
$varblock = array();
var 
$varblockkey = array();
var 
$varblockval = array();
    
// 声明模板用法
function Template($root '.')
{
  
$this -> set_root($root);
  return 
true;
}
// 设置模板文件路径
function set_root($dir)
{
  if(!
file_exists($dir))
  {
   
trigger_error('Template -> set_root():the patch could not be found'E_USER_ERROR);
  }
  
$this -> root $dir;
  return 
true;
}
    
// 设置模板文件。 
function set_file($handle$filename '')
{
  if(!
is_array($handle))
  {
   if(empty(
$filename))
   {
    
trigger_error('Template -> set_file(): ' $filename ' is not exists'E_USER_ERROR);
   }
   
$this -> files[$handle] = $this -> root $filename;
   
$this -> load_file($handle);
   
$this -> set_block($handle);
  }
  else
  {
   foreach(
$handle as $h => $v)
   {
    if(empty(
$v))
    {
     
trigger_error('Template -> set_file(): ' $v ' is not exists'E_USER_ERROR);
    }
    
$this -> files[$h] = $this -> root $v;
    
$this -> load_file($h);
    
$this -> set_block($h);
   }
  }
  return 
true;
}
    
// 设置数值 set_var(变量名或是数组,设置数值[数组不设置此值]);
function set_var($key$value ''$inside false)
{
  if(!
$inside)
  {
   if(!
is_array($key))
   {
    
$this -> varkey[$key] = '{' $key '}';
    
$this -> varval[$key] = $value;
   }
   else
   {
    foreach(
$key as $k => $V)
    {
     
$this -> varkey[$k] = '{' $k '}';
     
$this -> varval[$k] = $v;
    }
   }
  }
  else
  {
   if(!
is_array($key))
   {
    
$this -> varblockkey[$key] = '{' $key '}';
    
$this -> varblockval[$key] = $value;
   }
   else
   {
    foreach(
$key as $k => $v)
    {
     
$this -> varblockkey[$k] = '{' $k '}';
     
$this -> varblockval[$k] = $v;
    }
   }
  }
  return 
true;
}
    
// 读取文件。
function load_file($handle)
{
  if(!isset(
$this -> files[$handle]))
  {
   
trigger_error('Template -> load_file():No file specified for handle'E_USER_ERROR);
  }
  
$filename $this -> files[$handle];
  
$str function_exists('file_get_contents') ? file_get_contents($filename) : implode(''file($filename));
  if(empty(
$str))
  {
   
trigger_error('Template -> load_file():File ' $filename ' for handle' $handle ' is empty'E_USER_ERROR);
  }
  return 
$this -> set_var($handle$str);
}
    
// 设置BLOCK数据。
function set_block($handle)
{
  if(!isset(
$this -> varval[$handle]))
  {
   
trigger_error('Template -> set_block():Unable to load ' $handleE_USER_ERROR);
  }
  
$str $this -> varval[$handle];
  
$reg "/<!--[ ]+BEGIN[ ]+(.*?)[ ]+-->/";
  if(
preg_match($reg$str$m))
  {
   
$blockname $m[1];
   
$reg "/<!--[ ]+BEGIN[ ]+{$blockname}[ ]+-->(.*)<!--[ ]+END[ ]+{$blockname}[ ]+-->/sm";
   
preg_match($reg$str$m);
   if(isset(
$m[1])) $this -> set_var($blockname$m[1]);
   
$this -> set_var($handlepreg_replace($reg'{' $blockname '}'$str));
   
$this -> set_block($blockname);
   
$this -> set_block($handle);
  }
  return 
true;
}
    
// 处理BLOCK循环。
function set_block_var($handle$key$value '')
{
  if(!isset(
$this -> varval[$handle]))
  {
   
trigger_error('Template -> set_block_var():Unable to load ' $handle E_USER_ERROR);
  }
  
$str $this -> varval[$handle];
  if(!
is_array($key))
  {
   
$this -> set_var($handle '.' $key$valuetrue);
  }
  else
  {
   foreach(
$key as $k => $v)
   {
    
$this -> set_var($handle '.' $k$vtrue);
   }
  }
  
$str str_replace($this -> varblockkey$this -> varblockval$str);
  
$this -> varblock[$handle] .= $str;
  return 
$this -> varblock[$handle];
}
    
    
// 处理BLOCK二重循环时,内部BLOCK数据与外部BLOCK数据的替换。
    
function parse($main$handle)
{
  if(!isset(
$this -> varblock[$main]) || !isset($this -> varblock[$handle]) || !isset($this -> varkey[$handle]))
  {
   
trigger_error('Template -> parse(): Unable to load' $main ' or ' $handleE_USER_ERROR);
  }
  else
  {
   
$this -> varblock[$main] = str_replace($this -> varkey[$handle], $this -> varblock[$handle], $this -> varblock[$main]);
   unset(
$this -> varblock[$handle]);
   return 
true;
  }
}
    
// 输出模板内容。
function display($handle)
{
  if(!isset(
$this -> varval[$handle]))
  {
   
trigger_error('Template -> display():Unable to load ' $handleE_USER_ERROR);
  }
  
$str $this -> varval[$handle];
  
$this -> varval array_merge($this -> varval$this -> varblock);
  
$str str_replace($this -> varkey$this -> varval$str);
  echo 
$str;
  return 
true;
}
}
?>


 附件: 您所在的用户组无法下载或查看附件
2008-3-25 12:50 AM#1
查看资料  发短消息  QQ  顶部
 
chinahtml
金牌会员
Rank: 6Rank: 6


UID 69683
精华 0
积分 1009
帖子 1012
金钱 1009 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-3-16
状态 离线
[推荐阅读] 菜鸟关于类编写的一些疑问
看起来跟Phplib长得很像。



-地振山冈,一派溪山千古秀
-门朝大海,山合河水万年流
2008-3-25 06:58 PM#2
查看资料  发短消息  顶部
 
可酷可乐
新手上路
Rank: 1



UID 89361
精华 0
积分 46
帖子 82
金钱 46 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-3-14
状态 离线
[推荐阅读] mysql连接校对问题
the patch  
应该是The path
patch是补丁,path是路径。
2008-3-26 10:53 AM#3
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 请问一下php程序后台实现原理??
高手就是这样成长的! 在不断探索与实践中进步!



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2008-3-29 01:19 AM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
mdy_jun
注册会员
Rank: 2



UID 72596
精华 0
积分 178
帖子 159
金钱 178 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-30
状态 离线
[推荐阅读] 求兼职或外包
学习一下。



http://movie.mamabian.com
免费看最新最全的电影
2008-4-3 08:43 AM#5
查看资料  访问主页  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.039501 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP