woff 發表於 2010-1-21 17:57:27

Smarty 樣版

Smarty 樣版
一、為何要使用樣版PHP程式碼與HTML交雜在一起,產生
1.程式複雜化(有邏輯運算又有視覺展現)
2.程式設計師無法和美工設計者協同合作,在大的專案 更顯窘態
使用樣版可將程式邏輯與網頁展現分離,讓程式人員與美工人員各司其值。目前PHP的樣版有PHPLib、FastTemplat e、Smarty等二、下載Smarty樣版
(一)下載: 官方網站 http://smarty.php.net         
(二)安裝:   1.將Smarty-2.6.6.tar.gz解開,會建立一個新目錄Smarty-2.6.6
2.在專案底下建立以下目錄
templates //存放網頁樣版
templates_c //存放編譯後的PHP檔(權限設成777)
configs //存放設定檔
cache //存放快取檔案(權限設成777)
class //*將Smarty-2.6.6中libs內所有檔案複製至此
modules //*各模組程式至於此
includes //*共同引入檔三、使用步驟與簡單範例


(一)使用步驟   1.引入 Smarty.class.php 檔案 2.產生 Smarty 物件 3.設定 Smarty 物件的參數 4.設定樣版中的變數 5.顯示樣版          (二)簡單範例 test.phpinclude ("class/Smarty.class.php");            //引入Smarty物件
   define('__SITE_ROOT','c:/appserv/www/store/'); //定義網站根目錄
   $smarty = new Smarty();//產生樣版物件               
//樣版預設值
   $smarty->template_dir = __SITE_ROOT . "/templates/";
   $smarty->compile_dir = __SITE_ROOT . "/templates_c/";
   $smarty->config_dir = __SITE_ROOT . "/configs/";
   $smarty->cache_dir = __SITE_ROOT . "/cache/";
   $smarty->left_delimiter = '<{';
   $smarty->right_delimiter = '}>'; //指定變數
$tpl->assign('title','第一個Smarty程式');
$tpl->assign('msg','台東縣多媒體教材平台');//顯示樣版
$smarty->display('test.htm');test.htm<html> <head>
<title><{title}></title>
</head>
<body> <{msg}> </body>
</html>四、Smarty 樣版語法
(一)、基本語法(Basic Syntax)
(二)、變數(Variables)
(三)、修飾變數(Variable Modifiers )
(四)、內建函數(Built-in Functions )
(五)、樣版應用函數(Custom Functions)
詳細說明..... http://dyna.hcc.edu.tw/php5/advance/images/link2.gif官方文件五、基本語法(Basic Syntax)


(1)、註解       <{* 這是一個註解 *}>      
(2)、函數<{config_load file="colors.conf"}>
<{include file="header.tpl"}>
<{if $highlight_name}> Welcome, <font color=“<{#fontColor#}>"><{$name}>!</font>
<{else}> Welcome, <{$name}>!
<{/if}>
<{include file="footer.tpl"} >
(3)、函數的參數
<{include file="header.tpl"}>
<{include file=$includeFile}>
<{include file=#includeFile#}>
<{html_select_date display_days=yes}>
<select name="company">
<{html_options values=$vals selected=$selected output=$output} >
</select>

Smarty函數的參數類似 HTML 的寫法,參數如有預設值,可以不設定,另外參數值若為布林值時,
可設成 true, on,yes, 或 false, off, no
(4)、將雙引號內 "" 代入變數語法範例
<{func var="test $foo test"}>
<-- sees $foo <{func var="test $foo_bar test"} >
<-- sees $foo_bar <{func var="test $foo test"} >
<-- sees $foo <{func var="test $foo test"} >
<-- sees $foo <{func var="test $foo.bar test"} >
<-- sees $foo (not $foo.bar) <{func var="test `$foo.bar` test"} >
<-- sees $foo.bar> 實際範例
<{include file="subdir/$tpl_name.tpl"} >
<-- will replace $tpl_name with value>   
<{cycle values="one,two,`$smarty.config.myval`"}>
<-- must have backticks>(5)、運算<{$foo+1}>
<{$foo*$bar}>
<{* some more complicated examples *}>
<{$foo->bar-$bar*$baz->foo->bar()-3*7}>
<{if ($foo+$bar.test%$baz*134232+10+$b+10)}>
<{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"} >
<{assign var="foo" value="`$foo+$bar`"} > (6)、跳脫符號<?php $smarty = new Smarty;
$smarty->left_delimiter = '<{'; $smarty->right_delimiter = '}>';
$smarty->assign('foo', 'bar'); $smarty->display('example.tpl'); ?>
六、變數(Variables)


(1)、由PHP指派變數給樣版(變數、陣列、物件)         
在PHP指派變數<?php $smarty->assign('firstname','Grace'); //單一變數
$smarty->assign('Contacts',array('fax' =>'555-222-9876', 'email'=>'zaphod@slartibartfast.com', 'phone'=> array('home'=>'555-444-3333', 'cell' =>'555-111-1234'))); //陣列
$smarty->assign('myobj',$conn); //物件 ?>樣版中取得方式<{$firstname}> <{* 單一變數 *}> <{$Contacts.fax}>
<{$Contacts.phone.home}> <{* 取得陣列以. *}> <{$Contacts}>
<{$Contacts}> <{* 取得陣列以[] *}>
<{$myobj->setcolor()}> <{* 取得物件以-> *}> (2)、從樣版中載入config 檔
foo.confpageTitle = "This is mine" bodyBgColor = "#eeeeee"
tableBorderSize = "3" tableBgColor = "#bbbbbb" rowBgColor = "#cccccc" index.tpl: <{config_load file="foo.conf"}> <html>
<title> <{#pageTitle#} ></title>
<body bgcolor="<{#bodyBgColor#}>">
<table border="<{#tableBorderSize#}>" bgcolor="<{#tableBgColor#}>">
<tr bgcolor="<{#rowBgColor#}>">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>(3)、保留變數<{* display value of page from URL (GET) *}>
<{$smarty.get.page}>
<{* display the variable "page" from a form (POST) *}>
<{$smarty.post.page}>
<{* display the value of the cookie "username" *}>
<{$smarty.cookies.username}>
<{* display the server variable "SERVER_NAME" *}>
<{$smarty.server.SERVER_NAME}>
<{* display the php session variable "id" *}>
<{$smarty.session.id} >
<{* display the variable "username" from merged get/post/cookies/server/env *}>
<{$smarty.request.username}>
<{$smarty.now}> <{$smarty.const}>
<{$smarty.capture}> <{$smarty.config}>
<{$smarty.section}> <{$smarty.foreach}>
<{$smarty.template}> <{$smarty.version}>
<{$smarty.ldelim}> <{$smarty.rdelim}> (4)、修飾變數
1.換行(遇\n換成<br>)<{$articleTitle|nl2br}>2.計算字元<{$articleTitle|count_characters}>3.時間格式<{$yesterday|date_format:"%H:%M:%S"}>4.換行(幾個字元就換行)<{$articleTitle|wordwrap:30:"<br />\n"}>七、內建函數(Built-in Functions )


(1)if,elseif,else 使用範例:<{if $name eq "Fred"}> Welcome Sir.
<{elseif $name eq "Wilma"} > Welcome Ma'am.
<{else} > Welcome, whatever you are. <{/if}>(2)section,sectionelse 使用範例:<{section name=customer loop=$custid}> id:
<{ $custid }><br>
<{/section}>其中loop後面接的是陣列,name後面接的是指標<{section name=customer loop=$custid}>
      id: <{ $custid}><br>
      name:< {$name}><br>
      address: <{$address}><br>
      <{section name=contact loop=$contact_type}>
         <{$contact_type}><br>
      <{/section}>
       <p>
    <{/section}>
         
   <{section name=customer loop=$contacts}>
       name: <{$contacts.name}><br>
       home: <{$contacts.home}><br>
       cell: <{$contacts.cell}><br>
       e-mail: <{$contacts.email}><p>
    <{/section} >   <{section name=customer loop=$custid}>
         id: <{$custid}><br>
   <{sectionelse}>
         there are no values in $custid.
<{/section} >      
八、樣版應用函數(Custom Functions


一、 html_checkboxes$smarty->assign('cust_checkboxes', array( 1000 => 'Joe Schmoe', 1001 => 'Jack Smith', 1002 => 'Jane Johnson', 1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
樣版<{html_checkboxes name="id" options=$cust_checkboxes selected=$customer_id separator=“<br />"} > 輸出<label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br /> <label>
<input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label><br /> <label>
<input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br />
<label> <input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br>二、 html_image<{html_image file="pumpkin.jpg"}>
<img src="pumpkin.jpg" alt="" border="0" width="44" height="68" /> 三、 html_radiossmarty->assign('cust_radios', array( 1000 => 'Joe Schmoe', 1001 => 'Jack Smith', 1002 => 'Jane Johnson', 1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001); 樣版<{html_radios name="id" options=$cust_radios selected=$customer_id separator="<br />"}
<input type="radio" name="id" value="1000">Joe Schmoe<br />
<input type="radio" name="id" value="1001" checked="checked">Jack Smith<br />
<input type="radio" name="id" value="1002">Jane Johnson<br />
<input type="radio" name="id" value="1003">Charlie Brown<br />四、 html_options$smarty->assign('cust_options', array( 1001 => 'Joe Schmoe', 1002 => ‘Jack Smith', 1003 => 'Jane Johnson', 1004 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001); 樣版<select name=customer_id>
         <{html_options options=$cust_options selected=$customer_id} >
      </select>      <select name=customer_id>
         <option value="1000">Joe Schmoe</option>
         <option value="1001" selected="selected">Jack Smith</option>
         <option value="1002">Jane Johnson</option>
         <option value="1003">Charlie Brown</option>
      </select>
五、 html_select_date 、html_select_time<{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false} >
<{html_select_time use_24_hours=true} >六、 html_table<?php require('Smarty.class.php');
$smarty = new Smarty; $smarty->assign('data',array(1,2,3,4,5,6,7,8,9));
$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
$smarty->display('index.tpl'); ?> <{html_table loop=$data}>
<{html_table loop=$data cols=4 table_attr='border="0"'}>
<{html_table loop=$data cols=4 tr_attr=$tr}>
頁: [1]
查看完整版本: Smarty 樣版