[PHP]模板引擎Smarty深入浅出介绍(7)


  <html> 
  <head> 
  <title>横向重复表格测试</title> 
  </head> 
  <body> 
  <table width="500" border="1" cellspacing="0" cellpadding="3"> 
  <tr> 
  <{section name=sec1 loop=$my_array}> 
  <td><{$my_array[sec1].value}></td> 
  <{if $smarty.section.sec1.rownum is div by 2}> 
  </tr> 
  <tr> 
  <{/if}> 
  <{/section}> 
  </tr> 
  </table> 
  </body> 
  </html> 
   

 重点在于 $smarty.section.sec1.rownum 这个 Smarty 变量,在 section 循环中这个变量会取得从 1 开始的索引值,所以当 rownum 能被 2 除尽时,就输出 </tr><tr> 使表格换列 (注意!是 </tr> 在前面<tr> 在后面) 。因此数字 2 就是我们在一列中想要呈现的资料笔数。各位可以由此去变化其它不同的呈现方式。
  
  加载外部内容
  
  我们可以在模版内加载 PHP 程序代码或是另一个子模版,分别是使用 include_php 及 include 这两个 Smarty 模版语法; include_php 笔者较少用,使用方式可以查询官方手册,这里不再叙述。
  
  在使用 include 时,我们可以预先加载子模版,或是动态加载子模版。预先加载通常使用在有共同的文件标头及版权宣告;而动态加载则可以用在统一的框架页,而进一步达到如 Winamp 般可换 Skin 。当然这两种我们也可以混用,视状况而定。
  
  我们来看看下面这个例子:
  
  test5.php:


<?php 
  require "main.php"; 
  $tpl->assign("title", "Include 测试"); 
  $tpl->assign("content", "这是模版 2 中的变量"); 
  $tpl->assign("dyn_page", "test5_3.htm"); 
  $tpl->display(@#test5_1.htm@#); 
  ?> 

模版 1 的写法如下:
  
  templates/test5_1.htm:


  <html> 
  <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=big5"> 
  <title><{$title}></title> 
  </head> 
  <body> 
  <{include file="test5_2.htm"}><br /> 
  <{include file=$dyn_page}> 
  <{include file="test5_4.htm" custom_var="自订变量的内容"}> 
  </body> 
  </html> 
   

模版 2 的写法如下:
  
  templates/test5_2.htm:
  
  <{$content}>
  模版 3 的写法如下:
  
  templates/test5_3.htm:
  
  这是模版 3 的内容
  模版 4 的写法如下:
  
  templates/test5_4.htm:
  
  <{$custom_var}>
  这里注意几个重点:1. 模版的位置都是以先前定义的 template_dir 为基准;2. 所有 include 进来的子模版中,其变量也会被解译。;3. include 中可以用「变量名称=变量内容」来指定引含进来的模版中所包含的变量,如同上面模版 4 的做法。
用PHP实现MVC开发模式的逻辑层和表示层有多种模板引擎可供选择,但是官方引擎SMARTY诞生后,选择就有了变化。它的理念和实现都是相当"前卫"的。本文主要讨论SMARTY之于其他模板引擎的不同特点,简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了SMARTY和PHPLIB template的速度和易用性。

一、MVC需要模板

MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式,MVC分别代表了"模型"、"视图"和"控制",目的就是让不同的开发角色在大中型项目中各司其职。在网络应用程序的开发中,可以用下图来表示各概念之间的关系。 

https://www.jb51.net/uploadfiles/image006_65505.gif


该图展示了一个简单的WEB应用程序,用户在浏览器上看到信息是数据库服务器上的内容,但在这之前经过了应用服务器加工。开发人员负责的就是建立数据结构、处理数据的逻辑以及表示数据的方法。 

96年CGI在中国开始流行的时候,早期的WEB程序员都是从HTML开始自学成材的,在PERL中print一行行的HTML并不是一件难事,但是随着网络的一步步提速,页面大小也从当初的二、三十K暴涨了十倍。写CGI程序就产生了一个迫切的要求:分开PERL和HTML源码。于是,社会进步体现在开发小组内部的分工上。由于美工和程序员对互相的工作并不是十分熟悉,在进行合作的过程中需要用一种约定的"语言"进行交流。 

这种语言并不是我们的母语或者英语,术语叫做"模板",逻辑和表示依靠它联系。它是结合了HTML和脚本语言特征的一种表达方式。通过这种方式,表示层可以按照用户所希望的格式来显示经过逻辑层处理过的数据。如果你有Windows平台下MFC的开发经验,那么一定会很熟悉Document/Document Template/View的封装,这就是一个很典型的MVC例子。对于Web应用来说,个人认为J2EE中的EJB/servlets/JSP是最强大的,当然还有简洁优美的Structs。另一个很有名的实现就是COM/DCOM+ASP,这个组合在我国是最多人使用的。 

通过几种MVC实现在WEB应用程序里的对比,可以得到一个关于模板的概念:一组插入了HTML的脚本或者说是插入了脚本HTML,通过这种插入的内容来表示变化的数据。下面给出一个模板文件的例子,这个模板经过处理后在浏览器里显示"Hello, world!"


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/12482a27b7aeccb8a7834d8fd7f09ea3.html