smarty实例教程 (2)

字体大小: 中小 标准 ->行高大小: 标准
例3使用了一些smarty模板中内置的一些函数,相似的函数大家可以在手册中查到,使用方法很简单,大家可以自己去查找. 


 

例4.模板控制(if / elseif / else/ endif )
=======================================================
example4.tpl
=======================================================



接下来介绍一个section循环块与foreach循环块,本来它应该属于模板部分,但是由于它们是smarty的精华所在,而且与smarty程序设计部分联系非常紧密,所以就在本节单独拿出来讲一下。

1. foreach:用于循环简单数组,它是一个选择性的section循环,它的定义格式为:



其次,我们再来看看news.tpl:

1. 看这一句:


<html>
<head><title>模板中的流程控制</title><head> 
<body> 
<table border="1"> 
{assign var="tbColor" value="#D4D0C8"} 
色彩:{$tbColor}<br> 

{section name=loop loop=$News} 
{if $tbColor == "#D4D0C8"} 
<tr bgcolor="{$tbColor}"> 
{assign var="tbColor" value="#EEEEEE"} 
{else $tbColor == "#EEEEEE"} 
<tr bgcolor = "{$tbColor}"> 
{assign var="tbColor" value="#D4D0C8"} 
{/if} 
<td>{$News[loop].newsID}</td> 
<td>{$News[loop].newsTitle}</td> 
<tr> 
{/section} 
</table> 
</body> 
</html> 

=======================================================
example4.php
=======================================================

php代码: 



 



==================================================
example4.php输出:
==================================================

<html> 
<head><title>模板中的流程控制</title><head> 
<body> 
<table border="1"> 

<tr bgcolor="#D4D0C8"> 

<td>001</td> 
<td>第1条新闻</td> 
</tr> 
<tr bgcolor = "#EEEEEE"> 

<td>002</td> 
<td>第2条新闻</td> 
</tr> 
<tr bgcolor="#D4D0C8"> 

<td>003</td> 
<td>第3条新闻</td> 
</tr> 
<tr bgcolor = "#EEEEEE"> 

<td>004</td> 
<td>第4条新闻</td> 
</tr> 
<tr bgcolor="#D4D0C8"> 

<td>005</td> 
<td>第5条新闻</td> 
</tr> 
<tr bgcolor = "#EEEEEE"> 

<td>006</td> 
<td>第6条新闻</td> 
</tr> 
<tr bgcolor="#D4D0C8"> 

<td>007</td> 
<td>第7条新闻</td> 
</tr> 
<tr bgcolor = "#EEEEEE"> 
<

BR><td>008</td> 
<td>第8条新闻</td> 
</tr> 
</table> 
</body> 
</html> 

模板文件中使用:




{if $tbColor == "#D4D0C8"} 
<tr bgcolor="{$tbColor}"> 
{assign var="tbColor" value="#EEEEEE"} 
{else $tbColor == "#EEEEEE"} 
<tr bgcolor = "{$tbColor}"> 
{assign var="tbColor" value="#D4D0C8"} 
{/if} 

这一语句块进行设置每一行的背景颜色, {assign var="tbColor" value="#D4D0C8"}还记的吧,是例3中设置模板内部变量的定义方法,

使用模板内置的流程控制语句有时可以极大程度上提高程序的控制能力,下面一个例子是phpx.com中曾经有位朋友问过的,我将它作为
实例放在这里供大家学习.
例4我用来说明{if / elseif /else /if}的使用方法,如果单为了实现隔行的目的,大家可以使用这一句就行了:
PHP代码:

-------------------------------------------------------------------------------- 
{section name=rows loop=$data} 
<tr bgcolor="{cycle values="#D4D0C8,#EEEEEE"}"> 
<td>{$data[rows]}</td> 
</tr> 
{/section} 
--------------------------------------------------------------------------------- 

例5: 使用模板内置流程控制语句进行一行多单元格内容输出, 也就是在视觉上smarty每记输出几条记录:
================================================
example5.tpl
================================================

<html>
<head><title>一行输出多条记录</title></head> 
<body> 
<table> 
<tr> 
{section name=loop loop=$News step=1}  
{if $smarty.section.loop.index % 4 == 0} 
</tr>  
<tr> 
{/if} 
<td>{$News[loop].newsID}</td> 
<td>{$News[loop].newsTitle}</td> 
{/section} 
</tr>  
</table> 
</body> 
</html> 

====================================================
example5.php
====================================================



php代码: 




==================================================
example5.php输出内容:
==================================================


<html> 
<head><title>一行输出多条记录</title></head> 
<body> 
<table> 
<tr> 

</tr>  
<tr> 
<td>001</td> 
<td>第1条新闻</td> 

<td>002</td> 
<td>第2条新闻</td> 

<td>003</td> 
<td>第3条新闻</td> 

<td>004</td> 
<td>第4条新闻</td> 

</tr>  
<tr> 
<td>005</td> 
<td>第5条新闻</td> 

<td>006</td> 
<td>第6条新闻</td> 

<td>007</td> 
<td>第7条新闻</td> 

<td>008</td> 
<td>第8条新闻</td> 
</tr>  
</table> 
</body> 
</html> 

说明:本来还可以优化,使得第一行不输出一个空行的<tr> </tr>,但是学习程序,简单为好,先就这么用了. 在这里说明一下:




{section name=loop loop=$News step=1}  
{if $smarty.section.loop.index % 4 == 0} 
</tr>  
<tr> 
{/if} 
<td>{$News[loop].newsID}</td> 
<td>{$News[loop].newsTitle}</td> 
{/section} 

{ section}{/ section}指的是一个循环部分,在下一节会有详细的介绍,我们主要来看看这一句:




{if $smarty.section.loop.index % 4 == 0} 

$smarty.section.loop指出$smarty的实例中的section段有一个叫loop的部分, 它有一个属性叫index, 它的表示当前循环的索引值,从0开始递增,我们把它%4后与0相比较,也就是说,如果当前的索引值是4的倍数,它就输出一个</tr><tr>,否则执行下面的部分,
很简单的就解决了一个在程序上实现起来很麻烦的事情.这里我仅演示的是如何使用{ if}语句功能,实现这个功能在Smarty的模板中还有一个非常方便的办法:{ cycle},使用的例子如下所示:






================================= 
     {section name=rows loop=$data} 
<tr bgcolor="{cycle values="#D4D0C8,#EEEEEE"}"> 
<td>{$data[rows]}</td> 
</tr> 
{/section} 
     ================================= 

Posted:2004/09/30 18:40 
--------------------------------------------------------------------------------

2.---程序设计部分 


在smarty的模板设计部分我简单的把smarty在模板中的一些常用设置做了简单的介绍,这一节主要来介绍一下如何在smarty中开始我们程序设计。


首先来介绍一下在上一节中我们使用的过的.php文件中的一些元素。同样,我们拿上一节中最开始的那个index.php文件来说明一下:

================================================
index.php
================================================


php代码: 

<?php 
/********************************************* 
* 
* 文件名: index.php 
* 作 用: 显示实例程序 
* 
* 作 者: 大师兄 
* Email: teacherli@163.com 
* 
*********************************************/ 
include_once("./comm/Smarty.class.php"); //包含smarty类文件 

$smarty = new Smarty(); //建立smarty实例对象$smarty 
$smarty->template_dir = "./templates";//设置模板目录 
$smarty->compile_dir = "./templates_c"; //设置编译目录 


//****大家注意, 
这里我是我新加入的****// 

$tpl->cache_dir = "./cache"; //设置缓存目录 
$smarty->cache_lifetime = 60 * 60 * 24; //设置缓存时间 
$smarty->caching = true; //设置缓存方式 

//---------------------------------------------------- 
//左右边界符,默认为{},但实际应用当中容易与JavaScript 
//相冲突,所以建议设成<{}>或其它。 
//---------------------------------------------------- 
$smarty->left_delimiter = "<{";  
$smarty->right_delimiter = "}>"; 

$smarty->assign("name", "李晓军"); //进行模板变量替换 

//编译并显示位于./templates下的index.tpl模板 
$smarty->display("index.tpl");  
?> 


<?php 
/********************************************* 
* 
* 文件名: example5.php 
* 作 用: 显示实例程序5 
* 
* 作 者: 大师兄 
* Email: teacherli@163.com 
* 
*********************************************/ 

require_once ("./comm/Smarty.class.php"); 

$smarty = new Smarty(); 
$smarty->template_dir = './templates/'; 
$smarty->compile_dir = './templates_c/'; 
$smarty->config_dir = './configs/'; 
$smarty->cache_dir = './cache/'; 
$smarty->caching = false; 

$array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻");  
$array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻"); 
$array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻"); 
$array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻"); 
$array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻"); 
$array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻"); 
$array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻"); 
$array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻"); 


$smarty->assign("News", $array); 

$smarty->display("example5.tpl"); 
?> 



<?php 
/********************************************* 
* 
* 文件名: example4.php 
* 作 用: 显示实例程序4 
* 
* 作 者: 大师兄 
* Email: teacherli@163.com 
* 
*********************************************/ 

require_once ("./comm/Smarty.class.php"); 

$smarty = new Smarty(); 
$smarty->template_dir = './templates/'; 
$smarty->compile_dir = './templates_c/'; 
$smarty->config_dir = './configs/'; 
$smarty->cache_dir = './cache/'; 
$smarty->caching = false; 

$array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻");  
$array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻"); 
$array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻"); 
$array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻"); 
$array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻"); 
$array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻"); 
$array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻"); 
$array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻"); 


$smarty->assign("News", $array); 

$smarty->display("example4.tpl"); 
?> 

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/531.html