Smarty安裝


安裝Smarty發行版在/libs/目錄裡的庫檔案(就是解壓了). 這些php檔案你可不能亂畫哦.這些檔案被所有應用程式共用,也只能在你升級到新版的smarty的時候得到更新。

Smarty手冊範例 2-1.Smarty庫檔案

Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/core/*.php (all of them)
/plugins/*.php (all of them)

Smarty使用一個叫做'SMARTY_DIR'的php常數作為它的系統庫目錄。基本上,如果你的應用程式可以找到 Smarty.class.php檔案,你不需要設定SMARTY_DIR,Smarty將會自己運作。但是,如果 Smarty.class.php沒有在你的include_path(php.ini裡的一項設定)裡,或者沒有在你的應用程式裡設定它的絕對路徑的時候,你就必須手動組態SMARTY_DIR 了(大多數程式都如此)SMARTY_DIR必須包含結尾斜槓。

這裡是你在你的php指令碼裡建立一個smarty的應用範例的例子:

require('Smarty.class.php');
$smarty = new Smarty;

試著執行一下以上指令碼,如果你發現"未找到Smarty.class.php 檔案"的錯誤時,你應該這樣做:

Smarty手冊範例 2-3.加入庫檔案目錄的絕對路徑

require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;

Smarty手冊範例 2-4.在include_path加入庫檔案目錄

// Edit your php.ini file, add the Smarty library
// directory to the include_path and restart web server.
// Then the following should work:
require('Smarty.class.php');
$smarty = new Smarty;

Smarty手冊範例 2-5.手工設定SMARTY_DIR常數

define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;


現在庫檔案已經搞定,該是設定為你的應用程式組態其他有關Smarty的目錄的時候了。Smarty要求4個目錄,預設下命名為:tempalatestemplates_cconfigs and cache。每個都是可以自定義的,可以修改Smarty類屬性: $template_dir$compile_dir$config_dir, and $cache_dir respectively。強烈推薦你為每個用到smarty的應用程式設定單一的目錄!

確定你已經知道了你的web伺服器檔案根目錄。在我們的例子裡,檔案根目錄是:"/web/www.mydomain.com/docs/"Smarty的4個目錄 只可以被那些庫檔案存取,不可以被網路上的瀏覽器存取的目錄。因此為避免任何安全問題,要求將那4個目錄和網頁檔案目錄(就是瀏覽器看的)分開來。


在我們的安裝例子裡,我們將為一個留言板程式組態smarty環境。我們挑選應用程式只為了實現目錄命名約定。你可以對任何程式使用相同的環境,只要將"guestbook"改成你要的名字就可以了。我們將把Smarty目錄放在 "/web/www.mydomain.com/smarty/guestbook/"下。

在你的文件目錄下至少得有一個檔案,這個檔案可以被瀏覽器存取.我們叫它 "index.php"好了.把它放到"/guestbook/"目錄下.

技術提示:建立web伺服器很方便,這個檔案可以被web伺服器自動識別。如果你存取"http://www.mydomain.com/guestbook/",你不需要在URL上輸入"index.php",index.php指令碼就可以被執行。在Apache伺服器中,可以通過在DirectoryIndex的後面新增"index.php" 檔案(用反斜槓分開每個入口)來完成設定。


現在我們看看這些檔案結構:

Smarty手冊範例 2-6.例子的檔案結構

/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/core/*.php
/usr/local/lib/php/Smarty/plugins/*.php

/web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/

/web/www.mydomain.com/docs/guestbook/index.php

Smarty的 $compile_dir 和$cache_dir必須可寫。通常是user "nobody" 和 group "nobody"。如果是 OSX使用者,預設為user "web" 和 group "web"。如果你在使用Apache,你可以看看httpd.conf 檔案 (通常在"/usr/local/apache/conf/"目錄下)哪些user和group正在被使用。

Smarty手冊範例 2-7 檔案許可權設定

chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/

chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/

技術提示: 
chmod 770相當安全了,它只讓user "nobody" 和 group "nobody" 讀/寫 存取。如果你要對任何人開放讀取存取許可權(大多是為了你自己檢視檔案),你可以使用 775。

我們需要建立index.tpl檔案讓smarty載入.這個檔案放在 $template_dir目錄裡。

Smarty手冊範例 2-8 編輯/web/www.mydomain.com/smarty/templates/index.tpl

{* Smarty *}

Hello, {$name}!

技術提示:
{* Smarty *} 是一個模板注釋。雖然並不是必須的,但是這可以很好的鍛鍊你在模板檔案裡加入註釋的習慣。它可以使檔案便於識別。例如,一些文字編輯器可以識別這個檔案,並加以語法高亮顯示。

現在來編輯index.php。我們將建立一個Smarty的範例,指派模板變數,顯示 index.tpl檔案。在我們的例子的環境裡, "/usr/local/lib/php/Smarty"已經包括在了 include_path裡了。

Smarty手冊範例 2-9.編輯/web/www.mydomain.com/docs/guestbook/index.php

// load Smarty library
require('Smarty.class.php');

$smarty = new Smarty;

$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';

$smarty->assign('name','Ned');

$smarty->display('index.tpl');

技術提示:
在我們的例子裡,已經設定了所有Smarty目錄的絕對目錄。如果 '/web/www.mydomain.com/smarty/guestbook/' 已經包括在 include_path裡了,那麼這些設定則沒有必要。但是,從經驗和通用性看來,為避免發生錯誤,還是組態一下為好。

現在在瀏覽器開啟 index.php,你應該看到"Hello, Porky!"

你現在已經完成了Smarty的基本設定,恭喜!!