SmartTemplate初体验

http://www.cnblogs.com/hsrzyn/articles/1612635.html

  由于业务上的需要,最近先暂时把.net放一放,开始接触php,看了2天(主要参考书《php5+mysql5 web应用开发宝典》),感觉和asp有很多相似的地方,最明显的就是php代码和Html代码相互嵌套,貌似很乱啊,不仅不利于页面设计人员和程序开发人员之间的合作与分工,而且还有许许多多可能产生的问题,……

  不过这个世界上高手太多了,有不少的PHP末班引擎,它的作用就是将页面显示和业务逻辑分开,将php代码和Html代码分离,使得php开发人员和页面设计人员专注于自己的工作。今天主要看了下SmartTemplate(这是看的第一个,因为书上有现成的代码,就先看看这个,别的因素未考虑),

特点:

小巧。一般情况下只需复制三个php文件到php可以访问的目录下即可;

语法简单,易于使用

 

工作原理

       在Html模板文件中以特定的格式定义占位符,用于接收php代码处理得到的结果数据。在php文件中,通过引擎将php程序问价个html模板文件关联起来,并将php程序中的数据指定给模板文件中的占位符。这样就将php程序结果与html页面关联起来。

 

使用(我是在Windows下使用的)

  下载SmartTemplate的压缩包(可以再这里下载http://smarttemplate.yi.org/www.smartphp.net/content/app/download.php),其中class.smarttemplate.php、class.smarttemplatedebugger.php、class.smarttemplateparser.php是引擎的核心文件,直接将他们放在php项目的根目录下,最好新建个文件夹。

  新建Compiled文件夹和Temp文件夹

  打开class.smarttemplate.php文件,修改$temp_dir(用于保存混合文件的目录,即刚建立的Complied文件夹) 和$cache_dir(刚已经建立Temp文件夹)

 

在程序中的使用步骤:

  首先在HTML文件中定义占位符,用于接收PHP程序中得到的数据。用“{ **}”定义,**指占位符名称。占位符数目不受限制,且可以出现在Html代码中的任意位置。

  在Php文件中包含class.smartTemplate.php文件

  实例化SmartTemplate类的一个对象,并定义与当前Php文件关联的html文件

  将数据域Html文件中的占位符关联

  输出到模板文件

 

1.

a.html,主要代码如下

复制代码
例1
< table >
    
< tr >
        
< td > 姓名 </ td >
        
< td > {name} </ td >
    
</ tr >
    
< tr >
        
< td > Email </ td >
        
< td > {Email} </ td >
    
</ tr >
</ table >
复制代码

  

a.html中定义了{name}{Email}占位符,分别用于接收姓名,Email数据

a.php

 

复制代码
例1
<? php
// 包含class.smarttemplate.php文件
require ( " ../comm/class.smarttemplate.php " );

// 实例化SmartTemplate的一个对象,并与a.html关联
$page   =   new  SmartTemplate( " a.html " );

// 与Html中的占位符关联
$page -> assign( " name " , " 姓名张三 " );
$page -> assign( " Email " , " Email没有 " );

// 输出
$page -> output();
?>
复制代码

 

运行a.php,看结果……

 

刚说的是最基本的使用方法,使用assign将数据和占位符关联。如果数据时多条的(比方说读取一个学校的学生信息),这样写就很局限性了,不过可以使用BEGIN……END块关联数据来实现 ,此时去刚建立的compiled文件夹下,会发现多了个a_html.php文件……

先看例子吧:

a.html

 

复制代码
例2
< table >
    
<!--  BEGIN INFO  -->
    
< tr  >
        
< td > 姓名 </ td >
        
< td > {name} </ td >
        
< td > Email </ td >
        
< td > {Email} </ td >
        
< td > Age </ td >
        
< td > {Age} </ td >
        
< td > QQ </ td >
        
< td > {QQ} </ td >
    
</ tr >
    
<!--  END INFO  -->
</ table >
复制代码

 a.php

 

例2
<? php
// 包含class.smarttemplate.php文件
require ( " ../comm/class.smarttemplate.php " );
// 实例化SmartTemplate的一个对象,并与a.html关联
$page   =   new  SmartTemplate( " a.html " );

$INFOS   =   array (
    
array ( " name " => " 张三 " , " Email " => " 张三@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " name " => " 里斯 " , " Email " => " 里斯@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " name " => " 王五 " , " Email " => " 王五@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " name " => " 赵六 " , " Email " => " 赵六@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " )
    );
$page -> assign( " INFO " , $INFOS );

// 输出
$page -> output();
?>

 

运行下看到什么结果?

 

html中只写了一行,在php中用个数组将数据组织起来,然后关联,得到的是多行。

 

  再看两个扩展属性,ROWCNT和ROWBIT,ROWCNT表示当前BEGIN……END块内对应的行,从0开始,即0,1,2,……ROWBIT表示ROWCNT最低二进制的值,改值将以0,1,0,1,0,1……出现,这两个是引擎自动得到的,可以直接使用 看例子

a.html


复制代码
例3
< style >
body
{
    font-size
: 12px ;
}
.col0
{
    background-color
: #ffffff ;
}
.col1
{
    background-color
: #cccccc ;
}
</ style >

< table  >
    
<!--  BEGIN INFO  -->
    
< tr  class ="col{ROWBIT}" >
        
< td > 第{ROWCNT}行 </ td >
        
< td > 姓名 </ td >
        
< td > {name} </ td >
        
< td > Email </ td >
        
< td > {Email} </ td >
        
< td > Age </ td >
        
< td > {Age} </ td >
        
< td > QQ </ td >
        
< td > {QQ} </ td >
    
</ tr >
    
<!--  END INFO  -->
</ table >
复制代码

 

 还使用刚才的php文件,运行后看结果

在SmartTemplate中还有类似 if……else…… 的判断结构,主要用来对html文件进行控制。语法格式如下

<!-- IF condition-->

  HTML code

<!-- ELSEIF condition -->

  HTML code

<!-- ENDIF-->

  其中condition是一个条件表达式(形式:"占位符"="值")或仅仅是一个占位符,占位符接收php传递的值,如果该值与条件表达式等号右边的值相等,则显示该分支下的Html code,否则不显示;如果条件表达式仅仅是一个占位符,则当占位符收到的值非空是,条件表达式成立,否则不成立。

  在表达式中,等号右侧的值只支持字符串,且必须使用双引号,如<!-- IF class="0"-->.

看下面的例子

 

例四
< style >
body
{
    font-size
: 12px ;
}
.col0
{
    background-color
: #ffffff ;
}
.col1
{
    background-color
: #cccccc ;
}
.col2
{
    background-color
: #ccc000 ;
}
</ style >

< table  >
<!--  IF Test_IF  -->
    
<!--  BEGIN INFO  -->
    
<!--  IF col="0"  -->
    
< tr  class  = "col0" >
    
<!--  ELSEIF col="1"  -->
    
< tr  class  = "col1" >
    
<!--  ELSE  -->
    
< tr  class  = "col2" >
    
<!--  ENDIF  -->
        
< td > 第{ROWCNT}行 </ td >
        
< td > 姓名 </ td >
        
< td > {name} </ td >
        
< td > Email </ td >
        
< td > {Email} </ td >
        
< td > Age </ td >
        
< td > {Age} </ td >
        
< td > QQ </ td >
        
< td > {QQ} </ td >
    
</ tr >
    
<!--  END INFO  -->
<!--  ENDIF  -->

    
< tr >
    
< form  name  = "test" >
        
< td  colspan  ="9"  align ="left" >
            
<!--  IF If_Check  -->
            
< input  type  = "checkbox"  value = "1"  checked >
            
<!--  ELSE  -->
            
< input  type  = "checkbox"  value = "1"   >
            
<!--  ENDIF  -->
            是否选择
        
</ td >
    
</ form >
    
</ tr >

</ table >

b.php代码

 

代码
<? php
// 包含class.smarttemplate.php文件
require ( " ../comm/class.smarttemplate.php " );
// 实例化SmartTemplate的一个对象,并与a.html关联
$page   =   new  SmartTemplate( " b.html " );

$INFOS   =   array (
    
array ( " col "   =>   " 0 " , " name " => " 张三 " , " Email " => " 张三@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " col "   =>   " 1 " , " name " => " 里斯 " , " Email " => " 里斯@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " col "   =>   " 3 " , " name " => " 王五 " , " Email " => " 王五@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " ) ,
    
array ( " col "   =>   " 4 " , " name " => " 赵六 " , " Email " => " 赵六@qq.com " , " Age " => " 12 " , " QQ " => " 1111 " )
    );

$Test_if   =   " 1 " ;
// 单独的占位符:正负数均可,空格也行,null也行、0为false,""false
$If_Check   =   " -1 " ;
$page -> assign( " INFO " , $INFOS );
$page -> assign( " Test_IF " , $Test_if );
$page -> assign( " If_Check " , $If_Check );

// 输出
$page -> output();
?>

 

运行自行查看结果

 

其中书写的时候要注意:

IF、ELSEIF、ENDIF全部大写,且ELSEIF可以写成ELSE IF(中间有空格),ENDIF不行,表达式中不能有空格,如上例中的 IF col="1" 不能写成 IF col = "1"(等号两侧有空格)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值