在《【Smarty】Smarty的下载、配置与Helloworld》(点击打开链接)说明了Smarty的基本运行方式,这里再进一步说明,Smarty的条件结构、循环结构怎么使用、Session怎么取还有一些常用的小问题之类的。
用一个例子来说明问题,比如Smarty中有一个c.php,其代码如下:
<?php include "Smarty.inc.php";//使用Smarty特性 $_SESSION["username"]="呵呵!"; $smarty->assign("arr",array(array("id"=>1000, "name"=>"a"),array("id"=>1001, "name"=>"b"),array("id"=>1002, "name"=>"c"))); $smarty->display("v.html"); ?>
之后,再为arr这个变量指派一个二维数组,基本上,在实际的开放中,用sql查询出来的结果就是如此这样的二维数组来的。
最后指明这个c.php的模板页面是v.html,当然最终用户还是要访问这个c.php,v.html的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Smarty引用、常用内置变量、判断、循环、JavaScript脚本</title> </head> <body> {include file="header.html"} <p>当前session为username的东西为:{$smarty.session.username}</p> <p>循环输出一个二维数组:</p> <table border="1"> <tr> <td>Id</td><td>name</td> </tr> {foreach from=$arr item=a name=stat} {if $smarty.foreach.stat.index % 2 == 0} <tr style="background-color:#CCC"> {else} <tr> {/if} <td>{$a.id}</td><td>{$a.name}</td> </tr> {/foreach} </table> </body> </html> {literal} <script> function f(){ alert("Smarty模版中的javascript函数~"); } f(); </script> {/literal}
从上述的v.html可以看出Smarty中的引用、常用内置变量、判断、循环、JavaScript脚本是怎么使用的。
(1)首先关于“引用”,
这个v.html通过{include file="header.html"},引入同目录下的header.html,这个header.html的代码很简单,就一句话:
<h1 style="color:#F00">我是header.html中的内容</h1>
(2)所谓的“常用内置变量”就是怎么取session。
上述的v.html通过{$smarty.session.username}获取session中key为username的值。
同时Smarty还有其它的常用内置变量,如:
1、获取URL中的GET数据 ($_GET) http://127.0.0.1/test/index.php?page=foo,可以通过{$smarty.get.page}拿到page的值,运行结果为foo
2、获取POST数据 ($_POST['page']):{$smarty.post.page}
3、获取cookies"username" ($_COOKIE['username']):{$smarty.cookies.username}
4、获取"SERVER_NAME"属性 ($_SERVER['SERVER_NAME']):{$smarty.server.SERVER_NAME}
5、通过request获取"username":{$smarty.request.username}
等等,同时还可以通过{*Smarty 注释*}写一些不会渲染到网页源代码的PHP注释
(3)所谓的“常用内置变量、判断、循环”就是if与foreach结构的使用。
上述v.html使用一个foreach取出在c.php指派给$arr变量的二维数组,同时利用if结构配合foreach结构产生一个灰白相间的表格。
模板文件中可以使用if else等判断语句,即可以将一些逻辑程序放在模板里。"eq","ne", "neq", "gt", "lt","lte", "le", "gte" "ge","is even", "is odd", "is not even", "is notodd", "not", "mod", "div by", "evenby", "odd by","==","!=",">","<","<=",">="这些是if中可以用到的比较。看看就能知道什么意思吧。
(4)最后是Smarty中的JavaScript脚本问题。
Smarty将所有大括号{}里的东西都视为自己的逻辑程序,于是我们在网页中想插入javascrīpt函数就需要literal的帮忙了,literal的功能就是忽略大括号{}。
也就是说,在Smarty中的JavaScript,应该被literal标签括起来。