在這個課程開始,我們將學習如何使用 Smarty 樣版引擎。透過使用樣版引擎,可以讓我們將程式碼與使用者介面層完全分離,讓程式設計與網頁美工設計能夠分工合作,不至於干擾彼此的工作。在這個課程中,我們先介紹 Smarty 樣版引擎的取得、安裝、應用。在之後的課程,再介紹 Smarty 引擎的用法。
--------------------------------------------------------------------
Smarty 樣版引擎的取得
--------------------------------------------------------------------
Smarty 目前最新版本為 2.4.1,可以在以下的網址下載:
http://smarty.php.net/download.php
下載完成後,Windows 平台可以使用 WinZip來解壓縮,Un*x 平台可以用以下的指令來解壓縮:
tar -zxvf Smarty-2.4.1.tar.gz
--------------------------------------------------------------------
Smarty 樣版引擎的安裝
---------------------------------------------------------------------
說明:
如果你本身是主機的管理者,或是擁有 Super User的使用權限。你可以將 Smarty 安裝在一個特定的目錄,讓這台主機所有的使用者,共用Smarty的檔案。然後,在 php.ini 檔案的 include_path中設定 含括 Smarty的路徑,這樣其他的程式開發者,就不用定義 Smarty 的路徑,直接含括 Smarty 的檔案,即可使用 Smarty 引擎。
php.ini 的 include_path 設定如下,假設在 Windows 平台 Smarty的路徑為 C:\Smarty-2.4.1,Un*x平台為/usr/local/Smarty-2.4.1:
; UNIX: 平台
include_path = ".:/php/includes/usr/local/Smarty-2.4.1"
;
; Windows: 平台
include_path = ".;c:\php\includes;C:\Smarty-2.4.1"
但是,通常我們在開發專案時,並沒有權限去更改伺服主機的設定,所以我們必須在每個專案的網站,都要包含 Smarty引擎的檔案,同時也要為每個網站個別去定義 Smarty引擎的路徑。以下,我們就以個別專案的做法,來安裝 Smarty 檔案。
安裝 Smarty 引擎
說明:
Smarty 引擎的核心檔案,無須給外界的使用者看到,所以,不必把它放到 public_html 資料夾之內。因此,我們把它上傳後,解壓縮,放在家目錄之下。
使用 EditPlus 的FTP功能或其他FTP程式,將 Smarty-2.4.1.tar.gz 上傳到家目錄底下。
使用putty連線到伺服主機。
輸入以下的命令,解壓縮:
tar -zxvf Smarty-2.4.1.tar.gz
使用 ls 命令,檢查在家目錄底下,是否有個 Smarty-2.4.1資料夾。
--------------------------------------------------------------------
Smarty 的設定
--------------------------------------------------------------------
說明:
Smarty 對於個別的網站,都要有四個主要的目錄,分別是:
templates :用來存放網頁樣版的目錄。
complie:用來存放樣版編譯過後的PHP檔案的目錄。
configs:用來存放設定檔案的目錄。
cache:用來存放快取檔案的目錄。
其中,compile 目錄中的檔案是為了提高網頁樣版的呈現效率,而將 PHP程式與樣版網頁結合後,編譯成 PHP 檔案。以減少每次都需解析樣版網頁的時間。而 cache目錄中所存放的檔案,則是將 PHP 程式執行的結果,編譯成 HTML碼,這樣一來,又更進一步提昇網頁呈現的效率。網站伺服器,可以直接呈現編譯過後的網頁。無須再由 PHP 來運算處理網頁,直接回應快取目錄中的檔案。
這兩個目錄中的檔案是由 Smarty 核心引擎,所產生的。而 Smarty 引擎的母程序,是網站伺服器。所以,這兩個目錄,必須要讓網站伺服器程式有足夠的權限,可以存取目錄中的檔案。因此,建立好這四個目錄後,必須更改 compile 以及 cache的存取權限,讓網站伺服器程式可以存取這兩個目錄的檔案。
另外,為了方便網頁的樣版設計者,使用網頁編輯工具設計網頁,在使用各種連結以及圖片定義網址時,我通常會將 templates 的目錄,定義在網站的根目錄之內。這樣,只要各種連結,只要使用網站絕對網址,瀏覽器就可以正確的解析,這些網址的位置。
實作:
使用putty連線到伺服主機。
輸入以下的命令,建立以下三個目錄:
mkdir compile configs cache
輸入以下命令,更改權限,讓 Apache可以存取這個目錄的檔案:
chmod 777 compile cache
輸入以下命令,建立網頁樣版的目錄:
mkdir public_html/tpl
---------------------------------------------------------------------
Smarty 的應用
---------------------------------------------------------------------
說明:
既然使用樣版引擎,最主要的目的,就是希望把程式設計的工作與網頁美工設計的工作分開,讓程式設計師與網頁設計師能在不干擾彼此工作的情況下,分工合作。問題是如何把工作拆開?簡單的方式,就是把每個網頁至少拆開成兩個檔案,一個檔案只放 php 程式碼,另一個檔案則放 HTML碼。這樣,程式設計師,就可以專注在於 php 檔案程式碼的撰寫。而網頁設計師,就可以專心設計網頁樣版。
所以,要應用 Smarty 樣版引擎,我們就必須分別就 PHP 程式設計及網頁樣版的設計分別討論 Smarty 的用法。
一、PHP 程式中 Smarty 的用法
說明:
要在 PHP 程式中,使用 Smarty,有以下幾個步驟:
定義 Smarty 的路徑。
含括 Smarty.class.php 檔案。
產生 Smarty 物件。
定義 Smarty 物件中四個路徑的屬性。
設定樣版中的變數。
呈現樣版。
實作: 113_01.php
程式碼:
<?php
/*** 定義 Smarty 的路徑。 ***/
// 使用 Smarty 時,切記所有的路徑後面一定都要有/
define(SMARTY_DIR, '/home/lib13/Smarty-2.4.1/');
/*** 含括 Smarty.class.php 檔案。 ***/
include_once(SMARTY_DIR.'Smarty.class.php');
/*** 產生 Smarty 物件。 ***/
$smarty = new Smarty;
/*** 定義 Smarty 物件中四個路徑的屬性。 ***/
$smarty->template_dir = '/home/lib13/public_html/tpl/';
$smarty->compile_dir = '/home/lib13/compile/';
$smarty->config_dir = '/home/lib13/config/';
$smarty->cache_dir = '/home/lib13/cache/';
/*** 設定樣版中的變數。 ***/
$smarty->assign('pageTitle', '我的第一個 Smarty 網頁');
$smarty->assign('author', '嘉義大學');
/*** 呈現樣版。 ***/
$smarty->display('113_01.htm');
?>
(非常全面的一个php技术网站, 有相当丰富的文章和源代码.) 二、網頁樣版中 Smarty 的用法
說明:
在上面的 php 程式中,我們定義了網頁樣版的目錄:/home/lib13/public_html/tpl/。所以,網頁樣版檔案必須存在這個目錄底下。
在程式中指定了兩個網頁樣版中變數的值:pageTitle 和 author 。在樣版中要設定變數讓 PHP 程式碼來取代,必須使用以下的格式: {$變數名稱}。
實作: /home/lib13/public_html/tpl/113_01.htm
原始碼:
<html>
<head>
<title>{$pageTitle}</title>
</head>
<body>
<center><h1>本頁作者:{$author}</h1></center>
</body>
</html>
執行程式
--------------------------------------------------------------------------------
使用物件導向的方式來簡化 PHP Smarty網頁的撰寫
--------------------------------------------------------------------------------
說明:
上面的方式,每個 PHP 程式都必須重複至少六個步驟,才能完成程式的撰寫,這樣一來,使用樣版引擎反而增加我們工作上的負擔。還好,Smarty 本身是用物件導向的方式撰寫,其主要核心 Smarty類別,可以讓我們用繼承的方式,產生新的類別,在這個新類別中,設定好各屬性。然後,用這個新的類別,作為我們所有PHP程式的父類別,之後的 PHP 程式,只要繼承這個新類別,就無須在每個 PHP 程式中,重複繁瑣的屬性設定。以下,我們就用物件導向的方式,來重寫上面的程式。
實作:/home/lib13/public_html/Page.class.php
程式碼:
<?php
/*** 定義 Smarty 的路徑。 ***/
// 使用 Smarty 時,切記所有的路徑後面一定都要有/
define(SMARTY_DIR, '/home/lib13/Smarty-2.4.1/');
/*** 含括 Smarty.class.php 檔案。 ***/
include_once(SMARTY_DIR.'Smarty.class.php');
class Page extends Smarty{
function Page(){
/*** 定義 Smarty 物件中四個路徑的屬性。 ***/
$this->template_dir = '/home/lib13/public_html/tpl/';
$this->compile_dir = '/home/lib13/compile/';
$this->config_dir = '/home/lib13/config/';
$this->cache_dir = '/home/lib13/cache/';
}
}
?>
(非常全面的一个php技术网站, 有相当丰富的文章和源代码.) 實作: 113_02.php
程式碼:
<?php
/*** 含括 Page 父類別 Page.class.php 檔案。 ***/
include_once('/home/lib13/public_html/Page.class.php');
/*** 產生 Smarty 物件。 ***/
$page = new Page;
/*** 設定樣版中的變數。 ***/
$page->assign('pageTitle', '我的第二個 Smarty 網頁');
$page->assign('author', '嘉義大學');
/*** 呈現樣版。 ***/
$page->display('113_01.htm');
?>
(非常全面的一个php技术网站, 有相当丰富的文章和源代码.)
|