<ul> {section name=item loop=$article} <li> {$article[item].title} <p>作者:{$article[item].name}</p> <p>内容:{$article[item].content}</p> </li> {sectionelse} 没有文章 {/section} </ul>
foreach循环
foreach循环比section循环要简单,foreach的语法与php中foreach的语法很像,foreach可以做到任何section做到的功能,并且foreach更简单
{foreach $arrayvar as $itemvar} {foreach $arrayvar as $keyvar=>$itemvar}
例子如下:
在test文件夹中创建foreach.php文件,文件内容如下:
<?php require ('config.php'); $articles = array( array( 'title'=>'第一章', 'name'=>'QxQstar', 'content'=>'Smarty foreach循环第一章' ), array( 'title'=>'第二章', 'name'=>'QxQstar', 'content'=>'Smarty foreach循环第二章' ) ); $smarty->assign('articles',$articles); $smarty->display('foreach.tpl'); ?>
在tpl文件夹中创建foreach.tpl文件,内容如下:
<ul> {foreach $articles as $article} <li> {$article.title} <p>{$article.name}</p> <p>{$article.content}</p> </li> {foreachelse} <p>没有文章</p> {/foreach} </ul>
for循环
for循环用于创建一个简单的循环,语法如下:
{for $variable = $startValue to $entValue step $step}
{for $i = 0 to 10 step 2} {$i} {foreach} 不能进行循环 {/for}
step可以不指定,默认循环的步长是1。for还可以指定一个max属性,max属性用于指定循环的次数
与foreach循环类似,for循环也有一个forelse。{forelse}在循环不能遍历的时候执行
while循环
Smarty的while循环与php中的while循环类似,语法如下:
{while $variable > 0} //some {/while}
在循环中使用{break}可以停止循环,{continue}退出当前循环进入下一次循环
插件
Smarty插件的实质是函数,插件的类型有三种,分别是function插件,modifier插件(变量调节插件),block插件
使用插件
function插件的使用:{funcName param1 = value...}
modifier插件的使用:{$variable | modifierName:param1...}
block插件的使用:
{blockName param1 = value...} {$content} {/blockName}
如:
//function插件的使用 {include file='header.tpl'} //modifier插件的使用 {'abc'|cat:'d'} //block插件的使用 {textformat wrap = 10} abc def ghikj lmn {/textformat}
制作插件
制作插件的方式有三种
1.使用registerPlugin函数注册写好的自定义函数
2.将写好的插件放在smarty目录中的Plugins目录里
3.PHP内置函数可以自动的以修饰插件(变量调节插件)的形式在模板中使用
使用registerPlugin函数注册自定义插件,例子如下
在test文件夹下创建defineFunc.php文件,内容如下:
<?php require ('config.php'); function test($params){ $p1 = $params['p1']; $p2 = $params['p2']; return $p1.$p2; } $smarty->registerPlugin('function','f_test','test'); $smarty->display('definedFunc.tpl'); ?>
在tpl文件夹下创建一个defineFunc.tpl文件,内容如下:
{f_test p1='learn' p2=' Smarty'}
registerPlugin函数的第一个参数说明注册的这段程序的类型,在这里是function说明注册的是一个function插件,还可以取得值有block和modifier,第二个参数指注册的Smarty function插件名,第三个参数指自定义函数名,第二个参数和第三个参数可以相同。
在Smarty中当执行到{f_test p1='learn' p2=' Smarty'}时,p1和p2会被打包成一个数组传递到我们定义的test函数中去。
通过网Plugins文件夹中添加文件的方式制作插件
1.制作function插件
在Plugins文件夹下创建一个function.test.php文件(function表示这个一个function插件,test表示插件名),内容如下:
function smarty_function_test($params){ //$params是一个关联数组 $w = $params['w']; $h = $params['h']; return $w * $h; } ?>
在模板中直接使用test function插件
{test h = 3 w = 5}
这两个参数会被打包成一个数组传递到smarty_function_test函数中
2.制作modifier插件
在Plugins文件夹下创建一个modifier.test2.php文件(modifier表示这个一个modifier插件,test2表示插件名),内容如下:
function smarty_modifier_test2($utime,$formate){ return date($formate,$utime); }
在模板中使用test2 modifier插件
{$time|test2:'Y-m-d H-i-s'}
定义modifier插件和function插件有所不同,function插件的自定义函数只接收一个数组参数,modifier插件的自定义函数
将接收到的参数一一列举出来
3.制作block插件
在Plugins文件夹下创建一个block.test3.php文件(block表示这个一个block插件,test3表示插件名),内容如下: