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

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
 18  1/2  1  2  > 
     
标题: [原创] 小而精,没有一个正则表达式,只有30行的摸板类  
 
robinhunan
注册会员
Rank: 2
一般会员



UID 20392
精华 0
积分 181
帖子 151
金钱 181 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-6-3
状态 离线
[广告]: q m
小而精,没有一个正则表达式,只有30行的摸板类

代码量只有1K,实际代码只有30行。
以前用了很多的模板,用得最多的是phplib
和smarty。
模版的好处显而易见,用于应用和显示分离,特别是对于大型程序,由于美工和程序员对互相的工作并不是十分熟悉,在进行合作的过程中需要用一种约定的"语言"进行交流。这种约定的语言就是标签。
  在项目的开发中我用了很长时间的smarty
和phplib,但是最近的一个项目使我放弃了这两种模版。
    原因有:
    1.smarty的标签对美工来说看起来很怪异,不接受,而实际上开发过程中,排版效果非常差。
    2.美工往往看不懂模版的逻辑,里面的逻辑太多了。
    3.对程序员来说,smarty也很复杂,以至于有一本smarty 手册。一段时间没有用,想重拾smarty,发现似乎是去学一门新语言。
    4.phplib简单,标签看起来一目了然。
不过实际用起来还是不怎么好用。
    鉴于以上缺点:写了一个非常非常简单的模版。既然简单,所以就不强调它的功能,而是易用易学,高效,稳定,并省下了启动正则的开销。不过广大phper增加额外的负担,
php本身也是一个模版语言,不想把复杂的逻辑写在模版里面,对于实际项目中你会发现用php这些会更简单。
   《注:转载本文章请保持完整性,作者:zhuyubing@gmail.com>
   使用教程
核心代码template.php



<?php
/* @author: zhuyubing@gmail.com */
class Template{
        var $code;
        function Template($template){
            $this->code = implode('', @file($template));
        }
        function assign($name,$var=null){
    if(is_string($name) && is_string($var)){
     $this->code = str_replace('{'.$name.'}', $var, $this->code);
    } else if(is_array($var)){
     list($this->code,$tmp,$end)=explode('<!--'.$name.'-->',$this->code);
     while(list(,$v)=each($var)){
      $t=$tmp;$k2=$v2='';
      while(list($k2, $v2) = each($v)){
           $t = str_replace('{'.$k2.'}', $v2,$t);
      }
      $this->code .= $t;
     }
     $this->code .= $end;     
    } else {     
     while (list ($k2, $v2) = each($name)){
           $this->code = str_replace('{'.$k2.'}', $v2, $this->code);
     }
    }
        }
        function display(){
                echo $this->code;
        }
}
?>

最简单的hello_world
准备一个php模版文件hello_world.html
<html>
<head>
<meta http-equiv="Content-Type" c />
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
</body>
</html>
接下来就是模版的翻译工作了
<?php
include('../include/template.php'); //包含模版核心类文件
$tpl=new Template('hello_world.html'); //参数为模版路径和文件名,可以使用相对路径,也可以使用绝对路径
$tpl->assign('title',"hello world!"); //将标签{title} 替换成hello world
$tpl->display();
?>

模版中使用数组
test_array.html
<html>
<body>
<h3>{user} {email}</h3>
<h3>{user1} {email1}</h3>
</body>
</html>
模版处理文件
<?php
include('../include/template.php');
$tpl=new Template('test_array.html');
$user=array('user'=>'yubing','email'=>'test@sina.com');
$tpl->assign($user);
$tpl->assign('user1','jack');
$tpl->assign('email1','zhuyubing@gmail.com');
$tpl->display();
?>
简单的区块处理
block.html
<table width="400" border="1">
  <tr>
    <td>User Name</td>
    <td>E-Mail</td>
  </tr>
  <!--users-->
  <tr>
    <td>{name}</td>
    <td>{email}</td>
  </tr>
  <!--users-->
</table>
区块处理程序
block.php
<?php
include('../include/template.php');
$tpl=new Template('block.html');

$users=array(
  array('name'=>'jack','email'=>'test@example.com'),
  array('name'=>'tom','email'=>'tom@sina.com')
  );   
$tpl->assign('users',$users);
$tpl->display();
?>
模版包含测试
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" c />
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
    <p>{block}</p>
</body>
</html>
模版包含处理程序
<?php
include('../include/template.php');
$tpl=new Template('block.html');
$users=array(
array('name'=>'jack','email'=>'test@example.com'),
array('name'=>'tom','email'=>'zhuyubing@gmail.com'),
);
$tpl->assign('users',$users);
$block=$tpl->code;
$tpl->Template('main.html');
$tpl->assign('block',$block);
$tpl->assign(array('title'=>'测试多模版文件'));
$tpl->display();
?>


 附件: 您所在的用户组无法下载或查看附件
2007-1-31 12:03 PM#1
查看资料  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4863
帖子 1735
金钱 4853 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 请教一个smarty初学问题,关于自定义标签<{}>
果然是强人



在场外支持奥运.....
2007-1-31 12:15 PM#2
查看资料  访问主页  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 请求热心人帮帮忙
如果可以编译成或生成缓存,就更妙了。现在的电脑运行速度是越来越快了,想办法提高编程效率才是……



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2007-1-31 02:03 PM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
nany
论坛元老
Rank: 8Rank: 8
乞丐上路


UID 20308
精华 0
积分 7460
帖子 1402
金钱 7460 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2003-5-31
来自 北京
状态 离线
[推荐阅读] LINUX+APACHE比WINDOWS+IIS快多少?
我是冲着题目进来的



*****足球之夜*****
http://club.cn.yahoo.com/fifa
2007-1-31 02:18 PM#4
查看资料  访问主页  Blog  发短消息  顶部
 
满天星
新手上路
Rank: 1



UID 74281
精华 0
积分 9
帖子 10
金钱 9 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-5-29
状态 离线
[推荐阅读] $_SERVER['PHP_SELF'] 和$_SERVER['SCRIPT_NAME']有什么区别呢?
俺菜鸟!看看学习
2007-2-2 02:46 PM#5
查看资料  发短消息  顶部
 
klht (宇宙)
中级会员
Rank: 3Rank: 3


UID 77270
精华 0
积分 427
帖子 1082
金钱 426 喜悦币
威望 0
人脉 1
阅读权限 30
注册 2006-7-30
来自 UN星系
状态 离线
[推荐阅读] 初级软件工程师[上海]
学习了,....  .



什么时候才能找到梦寐以求的PHPER工作...
2007-2-2 03:21 PM#6
查看资料  访问主页  Blog  发短消息  顶部
 
Macaulay
高级会员
Rank: 4


UID 83520
精华 0
积分 709
帖子 438
金钱 426 喜悦币
威望 0
人脉 283
阅读权限 50
注册 2006-11-20
来自 浙
状态 离线
[推荐阅读] 武汉恒信科技招聘PHP开发人员
关注,学习
2007-2-5 03:33 PM#7
查看资料  发短消息  QQ  ICQ 状态  顶部
 
FLASH百强
新手上路
Rank: 1


UID 88126
精华 0
积分 1
帖子 27
金钱 1 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-2-7
状态 离线
[推荐阅读] [北京]招聘PHP开发人员
支持图片目录不
2007-2-13 02:05 PM#8
查看资料  发短消息  顶部
 
looking_for1
注册会员
Rank: 2


UID 78393
精华 0
积分 119
帖子 307
金钱 119 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-8-15
来自 hubei
状态 离线
[推荐阅读] sadly进来

果然厉害哈。
高手的模板计划————————




爱我的人们,我一定会爱你们
2007-2-13 04:40 PM#9
查看资料  访问主页  Blog  发短消息  QQ  Yahoo!  顶部
 
堅...
注册会员
Rank: 2
中级会员



UID 63434
精华 0
积分 198
帖子 165
金钱 198 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-2-27
来自 Hong Kong
状态 离线
[推荐阅读] 放弃类别?如何用标签?
how to loop of loop?
2007-2-25 12:56 PM#10
查看资料  发短消息  顶部
 18  1/2  1  2  > 
     


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


 




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

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