簡介
Smarty是一個php模板引擎。
更準確的說,它分開了邏輯程序和外在的內容,提供了一種易于管理的方法构哺。可以描述為應用程序員和美工扮演了不同的角色,因為在大多數情況下 ,他們不可能是同一個人。
例如,你正在創(chuàng)建一個用于瀏覽新聞的網頁,新聞標題,標簽欄,作者和內容等都是內容要素,他們并不包含應該怎樣去呈現禾唁。在Smarty的程序里,這些被忽略了。
smarty不嘗試將邏輯完全和模板分開无切。如果邏輯程序嚴格的用于頁面表現,那么它在模板里不會出現問題荡短。有個建議:讓應用程序邏輯遠離模板, 頁面表現邏輯遠離應用程序邏輯。這將在以后使內容更容易管理,程序更容易升級哆键。
業(yè)務邏輯和顯示邏輯分離掘托,是Smarty的一個設計理念。
Smarty的特點之一是模板編譯
籍嘹。
意思是Smarty讀取模板文件然后用他們創(chuàng)建php腳本闪盔。這些腳本創(chuàng)建以后將被執(zhí)行。因此并沒有花費模板文件的語法解析,同時每個模板可以享受到諸如Zend加速器
(http://www.zend.com) 或者PHP加速器
(http://www.php-accelerator.co.uk)辱士。這樣的php編譯器高速緩存解決方案泪掀。
Smarty特點
1.非常的快!
2.用php分析器干這個苦差事是有效的
3.不需要多余的模板語法解析,僅僅是編譯一次
4.僅對修改過的模板文件進行重新編譯
5.可以編輯'自定義函數'和自定義'變量',因此這種模板語言完全可以擴展
6.可以自行設置模板定界符,所以你可以使用{}, {{}}, , 等等
7.諸如 if/elseif/else/endif 語句可以被傳遞到php語法解析器,所以 {if ...} 表達式是簡單的或者是復合的
8.section之間可以無限嵌套
9.引擎是可以定制的.可以內嵌php代碼到你的模板文件中
10.內建緩存支持
11.獨立模板文件
12.可自定義緩存處理函數
13.插件體系結構
Smarty安裝
安裝Smarty發(fā)行版在/libs/目錄里的庫文件(就是解壓了).
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常量作為它的系統(tǒng)庫目錄
基本上,如果你的應用程序可以找到 Smarty.class.php文件,你不需要設置SMARTY_DIR,Smarty將會自己運作。
但是,如果 Smarty.class.php
沒有在你的include_path
(php.ini
里的一項設置)里,或者沒有在你的應用程序里設置它的絕對路徑的時候,你就必須手動配置SMARTY_DIR
了(大多數程序都如此)SMARTY_DIR
必須包含結尾斜杠颂碘。
這里是你在你的php腳本里創(chuàng)建一個smarty的應用實例的例子:
require('Smarty.class.php');
$smarty = new Smarty;
試著運行一下以上腳本,如果你發(fā)現"未找到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個目錄,默認下命名為:tempalates
, templates_c
, configs
and cache
。
每個都是可以自定義的,可以修改Smarty類屬性: $template_dir, $compile_dir, $config_dir, and $cache_dir
respectively头岔。強烈推薦你為每個用到smarty的應用程序設置單一的目錄!
確定你已經知道了你的web服務器文件根目錄塔拳。
在我們的例子里,文件根目錄是:"/web/www.mydomain.com/docs/"Smarty的4個目錄 只可以被那些庫文件訪問,不可以被網絡上的瀏覽器訪問的目錄。因此為避免任何安全問題,要求將那4個目錄和網頁文件目錄(就是瀏覽器看的)分開來峡竣。
在我們的安裝例子里,我們將為一個留言板程序配置smarty環(huán)境靠抑。我們挑選應用程序只為了實現目錄命名約定。你可以對任何程序使用相同的環(huán)境,只要將"guestbook"改成你要的名字就可以了澎胡。我們將把Smarty目錄放在 "/web/www.mydomain.com/smarty/guestbook/"
下孕荠。
在你的文檔目錄下至少得有一個文件,這個文件可以被瀏覽器訪問.我們叫它 "index.php"好了.把它放到"/guestbook/"目錄下娩鹉。
現在我們看看這些文件結構:
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锈嫩。
我們需要創(chuàng)建index.tpl文件讓smarty載入.這個文件放在 $template_dir目錄里。
基礎安裝
在Smarty發(fā)行包中垦搬,目錄/libs/ 里面的文件就是Smarty的庫文件呼寸。 庫文件都是.php
文件,開發(fā)者不應該編輯它們猴贰。
庫文件可以多個應用程序共用对雪,而且只在升級新版本的Smarty時進行覆蓋。
我們下載smarty包米绕,然后解壓到/usr/local/lib
形成/usr/local/lib/smarty-3.1.32
瑟捣,就算安裝好了。
在上面的例子中栅干, 文檔根目錄是/web/www.example.com/guestbook/htdocs/迈套。 Smarty目錄僅可以通過Smarty庫文件訪問,而不能直接被瀏覽器訪問碱鳞。 這樣可以避免一些安全問題桑李,強烈建議(但不強制)把這些目錄 放到WEB服務器文檔根目錄之外。
將會有至少一個文件是放到文檔根目錄的窿给,這個文件也會被瀏覽器訪問到贵白。 我們將這文件命名為index.php, 放置到文檔根目錄/htdocs/
中。
基本配置
Smarty需要一些對目錄的 讀寫權限 (windows用戶請忽略)填大,包括 $compile_dir
和$cache_dir
目錄 (templates_c/
和 cache/
), 所以戒洼,要確保web服務器用戶有權限讀寫它們。
通常是用戶“nobody” 和組“nobody”. OS X用戶允华,默認用戶是“www”和組“www”. 如果你使用Apache圈浇,你可以看看你的httpd.conf 來確定是使用什么用戶和組的。
Example 2.7. 設置目錄的讀寫權限:
chown nobody:nobody /web/www.example.com/guestbook/templates_c/
chmod 770 /web/www.example.com/guestbook/templates_c/
chown nobody:nobody /web/www.example.com/guestbook/cache/
chmod 770 /web/www.example.com/guestbook/cache/