負責範圍程式/檔案

Report
讓您的 PHP 程式開發團隊分工更輕鬆,系統更好維護
您一定碰過這樣的程式

























<br><H1>目前就業資料</H1>
<FORM name="updateJobListForm" method="post" action="updateJob2.php">
<?PHP
if( $pinfo["id"] == "" ) {
?>
您此次的登入已經過期, 請重新登入系統!
<PHP
exit();
}
if(!$job_status) {
?>
<H1>尚無資料!</H1>
<input type="submit" value="填寫就業資料">
<?PHP
} else {
?>
<TABLE>
<TR>
<TD colspan=3><hr></TD>
</TR>
<TR>
<TH>就業資料:</TH>
<TD></TD>
<TD><?PHP echo QUERY_STATUS($can_query["job_status"]);?></TD>
</TR>
PHP 與 HTML兩種程式碼夾
雜不清,造成閱讀困難。若
再加上不當的縮排,程式除
錯將成為災難。
如果可以改成這樣
<! test1.tpl 負責資料呈現 !>
<?PHP
// test1.php負責抓取資料庫資料、邏輯、運算
<br><H1>目前就業資料</H1>
<FORM name="updateJobListForm" method="post"
action="updateJob2.php">
{{if $pinfo.id == “” }}
您此次的登入已經過期, 請重新登入系統!
{{else}}
{{if $job_status}}
<H1>尚無資料!</H1>
<input type="submit" value="填寫就業資料">
{{else}}
<TABLE>
<TR>
<TD colspan=3><hr></TD>
</TR>
<TR>
<TH>就業資料:</TH>
<TD></TD>
<TD>{{$QUERY_STATUS[$can_query.job_status] }}</TD>
</TR>
{{/if}}
{{/if}}
TPL(HTML) 負責呈現邏
輯(presentation logic)
$pinfo = sybase_fetch_assoc(……)
………..
$QUERY_STATUS =
QUERY_STATUS($can_query["job_status"]);
smarty->assign(“pinfo”, $pinfo);
smarty->assign(“job_status”, $job_status);
smarty->assign(“can_query”, $can_query);
smarty->assign(“QUERY_STATUS”, $QUERY_STATUS);
smarty->display(“test1.tpl”);
?>
PHP程式負責商業邏輯
(business logic)與內容
程式邏輯與介面不分離的壞處

開發階段:
 程式設計師:我不會美工,別叫我寫漂亮網頁!
 網頁美工:我看不懂程式,別叫我寫PHP!
 每個人:這是啥程式碼啊?我眼花了 @@

維護階段:
 程式設計師:我只想改程式,很怕把網頁畫面搞
砸了!!
 網頁美工:我只想改介面,程式執行出來如果是
白頁我會很恐慌!!
試試看樣板引擎

樣板引擎是?
 「像是真人大小的超級名模人形立牌,頭部挖空讓您
可以把頭從洞中穿出去照相」
 將程式的邏輯與介面分離,減少程式碼的混亂。
 讓程式設計師專心寫程式,介面設計者專心設計介
面,減少不必要的干涉。

什麼時候會需要用?
 系統有點規模,想避免 PHP 與 HTML 夾雜,難以閱
讀與維護的程式碼。
 有專職的程式設計師和網頁美工人員。
 給不同使用者不同的介面。
Smarty 樣板引擎簡介
是一個 PHP 專屬的樣板引擎
 以 { 和 } 作為預設的界定符號,以 $ 作為
變數符號
 支援 foreach、while 等流程控制語法
 支援 if、elsif、else等判斷式
 支援變數修飾元,如 {$price:”%.2f”}、
{$note|nl2br}
 正規表示法
 ……

先修課程

PHP Smarty 是架構於 PHP 程式語言下的
網頁樣板引擎…
 「網頁」程式,當然,得要先會 HTML
 網頁「程式」,當然,得要先會 PHP

當然不是學到 100 分才能開始,邊做邊學
吧!
開始使用 Smarty
$smarty = new Smarty;
 $smarty->template_dir = “templates";
 $smarty->compile_dir = “templates_c";
 $smarty->cache_dir
= “cache";
 $smarty->config_dir
= “configs";
 (記得將 templates_c 的寫入權限打開)



$smarty->assign(“var”, “value”);
$smarty->display(“template.tpl”);
Smarty 樣板引擎範例










範例一:顯示變數以及透過 foreach 處理一般陣列
範例二:用 foreach 處理關聯陣列或更複雜的資料結構
範例二b:套用另一個樣板
範例二c:處理與 javascript 衝突的方法
範例三:透過 section 處理陣列
範例三a:section + cycle 示範,section 的 iteration變
數
範例三b:{if} 用法,section 的 first、last 等變數
範例三c:更多 {if} 用法,$smarty.get 保留變數介紹
範例四:include 的使用,修飾器的使用
範例五:html_options、html_checkboxes等函式
PHP 網頁程式一般開發原則
程式/檔案
PHP程式
負責範圍
資料存取、商業邏輯
HTML(TPL)樣板 呈現邏輯(資料內容)
CSS
呈現邏輯(樣式,資料呈現的外觀)
Javascript
前端邏輯處理,常是簡單的防呆或是
提供快速的即時互動(不盡然可信)
思考:要怎麼做出像這樣的網頁程式?
http://coursemap.ccu.edu.tw/dept_info.php?deptcd=1104
一些網站資源

官方網站
http://www.smarty.net/

Smarty入門
http://www.jaceju.net/blog/?p=23

Smarty 手冊(非官方逐段中文翻譯)
http://twpug.net/docs/smarty_2.6.9_elie/index.html

Smarty Cheat-sheet
http://hasin.wordpress.com/2006/06/10/smarty-cheat-sheetversion-20/
簡報結束
請多指教~~~
 請提問題~~~


有事啟奏,無事退朝

similar documents