- 论坛徽章:
- 0
|
smarty应用实例
例4.模板控制(if / elseif / else/ endif )
=======================================================
example4.tpl
=======================================================
<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
* 作 用: 显示实例程序4
*
* 作 者: 大师兄
* Email: teacherli@163.com
*
*********************************************/
require_once ("./public/inc/F117_Smarty.php" ;
$smarty = new F117_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" ;
?>;
==================================================
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">;
<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中曾经有位朋友问过的,我将它作为
实例放在这里供大家学习.
例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
* 作 用: 显示实例程序5
*
* 作 者: 大师兄
* Email: teacherli@163.com
*
*********************************************/
require_once ("./public/inc/F117_Smarty.php");
$smarty = new F117_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");
?>;
==================================================
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>;,否则执行下面的部分,
很简单的就解决了一个在程序上实现起来很麻烦的事情. |
|