Smarty模板使用
//通過傳遞進(jìn)來的參數(shù)顯示文章
public function art_list($find, $limit, $where = null, $order=null){
? $order = isset($order) ? $order : "id desc";
? return $this->field($find)->where($where)->limit($limit)->order($order)->all();
}
在這段代碼中,控制器是如何把參數(shù)傳遞給模板的?
2017-04-20
一.?安裝?
????首先打開網(wǎng)頁http://smarty.php.net/download.php,下載最新版本的Smarty。解壓下載的文件(目錄結(jié)構(gòu)還蠻復(fù)雜的)。接下來我演示給大家一個(gè)安裝實(shí)例,看過應(yīng)該會(huì)舉一反三的。?
????(1)?我在根目錄下建立了新的目錄learn/,再在learn/里建立一個(gè)目錄smarty/。將剛才解壓縮出來的目錄的libs/拷貝到smarty/里,再在smarty/里新建templates目錄,templates里新建cache/,templates/,templates_c/,?config/.?
????(2)?新建一個(gè)模板文件:index.tpl,將此文件放在learn/smarty/templates/templates目錄下,代碼如下:?
復(fù)制代碼代碼如下:
<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">???
<html>???
<head>???
<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">???
<title>Smarty</title>???
</head>???
<body>???
{$hello}???
</body>???
</html>?
新建index.php,將此文件放在learn/下:?
復(fù)制代碼代碼如下:
<?php???
//引用類文件???
require?'smarty/libs/Smarty.class.php';???
$smarty?=?new?Smarty;???
//設(shè)置各個(gè)目錄的路徑,這里是安裝的重點(diǎn)???
$smarty->template_dir?=?"smarty/templates/templates";???
$smarty->compile_dir?=?"smarty/templates/templates_c";???
$smarty->config_dir?=?"smarty/templates/config";???
$smarty->cache_dir?=?"smarty/templates/cache";????
????
//smarty模板有高速緩存的功能,如果這里是true的話即打開caching,但是會(huì)造成網(wǎng)頁不立即更新的問題,當(dāng)然也可以通過其他的辦法解決???
$smarty->caching?=?false;???
$hello?=?"Hello?World!";???
//賦值???
$smarty->assign("hello",$hello);???
//引用模板文件???
$smarty->display('index.tpl');???
?>
??
(3)?執(zhí)行index.php就能看到Hello?World!了。?
二.?賦值?
???????在模板文件中需要替換的值用大括號{}括起來,值的前面還要加$號。例如{$hello}。這里可以是數(shù)組,比如{$hello.item1},{$hello.item2}…?
???????而PHP源文件中只需要一個(gè)簡單的函數(shù)assign(var?,?value)。?
???????簡單的例子:?
???????*.tpl:?
???????Hello,{$exp.name}!?Good?{$exp.time}?
???????*.php:?
???????$hello[name]?=?“Mr.?Green”;?
???????$hello[time]=”morning”;?
???????$smarty->assign(“exp”,$hello);?
???????output:?
???????Hello,Mr.Green!?Good?morning?
三.?引用?
???????網(wǎng)站中的網(wǎng)頁一般header和footer是可以共用的,所以只要在每個(gè)tpl中引用它們就可以了。?
???????示例:*.tpl:?
????{include?file="header.tpl"}?
???????{*?body?of?template?goes?here?*}?
???????{include?file="footer.tpl"}?
四.?判斷?
???????模板文件中可以使用if?else等判斷語句,即可以將一些邏輯程序放在模板里。"eq",?"ne",?"neq",?"gt",?"lt",?"lte",?"le",??"gte"??"ge",?"is?even",?"is?odd",?"is?not?even",?"is?not?odd",?"not",?"mod",?"div?by",?"even?by",?"odd?by","==","!=",">",?"<","<=",">="這些是if中可以用到的比較。看看就能知道什么意思吧。?
??????示例:?
??????{if?$name?eq?"Fred"}?
?????????????????????Welcome?Sir.?
????{elseif?$name?eq?"Wilma"}?
?????????????????????Welcome?Ma'am.????
????{else}?
?????????????????????Welcome,?whatever?you?are.?
????{/if}?
五.?循環(huán)?
???????在Smarty里使用循環(huán)遍歷數(shù)組的方法是section,如何賦值遍歷都是在模板中解決,php源文件中只要一個(gè)assign就能解決問題。?
???????示例:?
{*?this?example?will?print?out?all?the?values?of?the?$custid?array?*}?
{section?name=customer?loop=$custid}?
??????????????id:?{$custid[customer]}<br>?
{/section}?
OUTPUT:?
id:?1000<br>?
id:?1001<br>?
id:?1002<br>