2023-05-12 开启多语言插件支持……

smarty基础知识

smarty 苏 demo 3347℃ 0评论

1、

<{*这边为smarty模板的注释部分*}>

<{include file=”header.tpl”}>  |  这边为smarty引入文件的语句

<{$name}> 这边为模板变量,| smarty的核心组成

$smarty->assign(“name”, “crazybaby”);  | 将name的值替换成crazybab

2、

模板文件 index.html

<html>
<head><title>模板</title></head>
<body>
<{assign var=”User” value=”Crazybaby”}>  <{*定义一个变量为User 变量值为Crazybaby*}>
<{$User}><br/>    <{*显示变量的值*}>
<{html_checkboxes name=”CheckBox” values=$CheckName selected=$isChecked output=$CheckName separator=”<br/>”}>
<br>
<{html_radios name=”RadioBox” values=$RadioName checked=$isChecked output=$RadioName separator=”<br/>”}><{*显示3个radio*}>
<{html_select_date}>  <{*显示日期*}>
<hr><br>CopyRight(C) By Crazybaby <b><{mailto address=”crazybaby@yeah.net” text=”联系我!”}>
</body>
</html>

php文件:

<?php
include_once (“config.php”);
$smarty->assign(‘CheckName’,array(1001=>’语文’,1002=>’数学’,1003=>’外语’));
$smarty->assign(‘isChecked’,1001);
$smarty->assign(‘RadioName’,array(1001=>’语文’,1002=>’数学’,1003=>’外语’));
$smarty->assign(‘isChecked’,100);
$smarty->display(“index.html”);

?>

…………………………………………………….
如果用普通的话是这样写(试着比较一下):

<html>
<head><title>模板中内定的一些函数</title></head>
<body>
下面的这一行将显示3个checkBox:<br>
<input type=”checkbox” name=”CheckBox[]” value=”1000″>语文<br />
<input type=”checkbox” name=”CheckBox[]” value=”1001″ checked=”checked”>数学<br />
<input type=”checkbox” name=”CheckBox[]” value=”1002″>外语<br />
下面在这一行将显示3个radio:<br>
<input type=”radio” name=”RadioBox[]” value=”1000″>语文<br />
<input type=”radio” name=”RadioBox[]” value=”1001″ checked=”checked”>数学<br />
<input type=”radio” name=”RadioBox[]” value=”1002″>外语<br />
下面显示一个月,日, 年选择框:<br>
<select name=”Date_Month”>
<option label=”January” value=”01″>January</option>
<option label=”February” value=”02″>February</option>
<option label=”March” value=”03″>March</option>
<option label=”April” value=”04″>April</option>
<option label=”May” value=”05″>May</option>
<option label=”June” value=”06″>June</option>
<option label=”July” value=”07″>July</option>
<option label=”August” value=”08″ selected=”selected”>August</option>
<option label=”September” value=”09″>September</option>
<option label=”October” value=”10″>October</option>
<option label=”November” value=”11″>November</option>
<option label=”December” value=”12″>December</option>
</select>
<select name=”Date_Day”>
<option label=”01″ value=”1″>01</option>
<option label=”02″ value=”2″>02</option>
<option label=”03″ value=”3″>03</option>
<option label=”04″ value=”4″>04</option>
<option label=”05″ value=”5″>05</option>
<option label=”06″ value=”6″>06</option>
<option label=”07″ value=”7″>07</option>
<option label=”08″ value=”8″>08</option>
<option label=”09″ value=”9″>09</option>
<option label=”10″ value=”10″>10</option>
<option label=”11″ value=”11″>11</option>
<option label=”12″ value=”12″>12</option>
<option label=”13″ value=”13″>13</option>
<option label=”14″ value=”14″>14</option>
<option label=”15″ value=”15″>15</option>
<option label=”16″ value=”16″>16</option>
<option label=”17″ value=”17″>17</option>
<option label=”18″ value=”18″>18</option>
<option label=”19″ value=”19″>19</option>
<option label=”20″ value=”20″>20</option>
<option label=”21″ value=”21″ selected=”selected”>21</option>
<option label=”22″ value=”22″>22</option>
<option label=”23″ value=”23″>23</option>
<option label=”24″ value=”24″>24</option>
<option label=”25″ value=”25″>25</option>
<option label=”26″ value=”26″>26</option>
<option label=”27″ value=”27″>27</option>
<option label=”28″ value=”28″>28</option>
<option label=”29″ value=”29″>29</option>
<option label=”30″ value=”30″>30</option>
<option label=”31″ value=”31″>31</option>
</select>
<select name=”Date_Year”>
<option label=”2004″ value=”2004″ selected=”selected”>2004</option>
</select>
<hr><b>CopyRight(C) By Crazybaby <b><a href=mailto:crazybaby@yeah.net>联系我</a>
</body>
</html>
3、

模板 index.html
<html>
<head><title>模板</title><head>
<body>
<table border=”1″ align=”center”>
<{assign var=”tbColor” value=”green”}> <{*定义一个变量值为green*}>
色彩:<{$tbColor}><br>
<{section name=loop loop=$News}><{*定义一个循环*}>
<{if $tbColor == “green”}>
<tr bgcolor=”<{$tbColor}>”>
<{assign var=”tbColor” value=”orange”}><{*定义一个变量值为orange*}>
<{else $tbColor == “orange”}>
<tr bgcolor = “<{$tbColor}>”>
<{assign var=”tbColor” value=”green”}>
<{/if}>
<td><{$News[loop].newsID}></td>
<td><{$News[loop].newsTitle}></td>
<tr>
<{/section}>
</table>
</body>
</html>
index.php

<?php
require_once (“config.php”);
$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(“index.html”);
?>

不使用模板的话:
<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>

 

4、

 

index.html

<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>

 

index.php

 

<?php

require_once (“config.php”);

$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(“index.html”);

?>
…………….

$smarty.section.loop指出$smarty的实例中的section段有一个叫loop的部分, 它有一个属性叫index, 它的表示当前循环的索引值,从0开始递增,我们把它%4后与0相比较,也就是说,如果当前的索引值是4的倍数,它就输出一个</tr><tr>,否则执行下面的部分

5、

<foreach>循环用于循环简单数组,它是一个选择性的section的循环
一般定义为:
<{foreach from=$array item=array_id}>
<{foreachelse}>
<{/foreach}>
其中,from 指出要循环的数组变量,item为要循环的变量名称,循环次数由from所指定的数组变量的个数所决定。{foreachelse}用来当程序中传递过来的数组为空时的处理
简单例子:
<html>
<head><title>这是一个foreach使用的例子</title></head>
<body>
这里将输出一个数组:<br>
<{foreach from=$newsArray item=newsID}>
新闻编号:<{$newsID.newsID}><br>
新闻内容:<{$newsID.newsTitle}><br><hr>
<{foreachelse}>
对不起,数据库中没有新闻输出!
<{/foreach}>
</body>
</html>

php代码

<?php
include_once (‘config.php’);

$array[] = array(“newsID”=>1, “newsTitle”=>”第1条新闻”);
$array[] = array(“newsID”=>2, “newsTitle”=>”第2条新闻”);
$array[] = array(“newsID”=>3, “newsTitle”=>”第3条新闻”);
$array[] = array(“newsID”=>4, “newsTitle”=>”第4条新闻”);
$array[] = array(“newsID”=>5, “newsTitle”=>”第5条新闻”);
$array[] = array(“newsID”=>6, “newsTitle”=>”第6条新闻”);

$smarty->assign(“newsArray”, $array);

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

………………………
section循环
section的产生是为解决foreach的不足的,与foreach一样,它用于设计模板内的循环块,它较为复杂,可极大程序上满足程序需要,所以在程序中我习惯使用它而不使用foreach,基本原形为:

{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}

name: section的名称,不用加$
$loop: 要循环的变量,在程序中要使用assign对这个变量进行操作。
$start: 开始循环的下标,循环下标默认由0开始
$step: 每次循环时下标的增数
$max: 最大循环下标
$show: boolean类型,决定是否对这个块进行显示,默认为true

这里有个名词需要说明:
循环下标:实际它的英文名称为index,是索引的意思,这里我将它译成”下标”,主要是为了好理解。它表示在显示这个循环块时当前的循环索引,默认从0开始,受$start的影响,如果将$start设为5,它也将从5开始计数,在模板设计部分我们使用过它,这是当前{section}的一个属性,调用方式为Smarty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。
{section}块具有的属性值,分别为:
1. index: 上边我们介绍的”循环下标”,默认为0
2. index_prev: 当前下标的前一个值,默认为-1
3. index_next: 当前下标的下一个值,默认为1
4. first: 是否为第一下循环
5. last: 是否为最后一个循环
6. iteration: 循环次数
7. rownum: 当前的行号,iteration的另一个别名
8. loop: 最后一个循环号,可用在section块后统计section的循环次数
9. total: 循环次数,可用在section块后统计循环次数
10. show: 在函数的声明中有它,用于判断section是否显示

它们的具体属性大家可以参考手册,在程序中可灵活使用它的这些属性,模板部分我就使用过index属性,大家可以回过头去看看。

同样,{section}也可以配合使用{sectionelse},用来表示传入的数组变量为空时对模板进行的处理。

我们把上边的那个例子使用{section}来替代{foreach}来实现现样的功能,注意,在这个例子中我只将tpl模板中的{foreach}用

{section}来实现,php程序文件中没有任何改动,同时加了{sectionelse}处理块:
CODE:<html>
<head><title>这是一个foreach使用的例子</title></head>
<body>
这里将输出一个数组:<br>
<{section name=loop loop=$News}>
新闻编号:<{$News[loop].newsID}><br>
新闻标题:<{$News[loop].newsTitle}><br><hr>
<{sectionelse}>
对不起,没有任何新闻输入!
<{/section}>
</body>
</html>
……………
两者进行比较:
<html>
<head><title>这是一个foreach使用的例子</title></head>
<body>
这里将输出一个数组:<br>
<{section name=loop loop=$News}>
新闻编号:<{$News[loop].newsID}><br>
新闻标题:<{$News[loop].newsTitle}><br><hr>
<{sectionelse}>
对不起,没有任何新闻输入!
<{/section}>
</body>
</html>

<html>
<head><title>这是一个foreach使用的例子</title></head>
<body>
这里将输出一个数组:<br>
<{foreach from=$newsArray item=newsID}>
新闻编号:<{$newsID.newsID}><br>
新闻内容:<{$newsID.newsTitle}><br><hr>
<{foreachelse}>
对不起,数据库中没有新闻输出!
<{/foreach}>
</body>
</html>

ps:如果您感觉本文对您有用,请帮忙点击右侧的广告,支持一下博主,谢谢!

打赏

转载请注明:苏demo的别样人生 » smarty基础知识

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)