黃玲娜
摘 要: 在PHP開(kāi)發(fā)環(huán)境中,Smarty模板是一種處于領(lǐng)先地位的主流模板,能高效的實(shí)現(xiàn)網(wǎng)站前臺(tái)和數(shù)據(jù)庫(kù)后臺(tái)之間的交互,將后臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息呈現(xiàn)在前臺(tái)網(wǎng)頁(yè)上。Smarty模板將與數(shù)據(jù)庫(kù)的連接等操作封裝在類(lèi)中,在以后的開(kāi)發(fā)中只需要調(diào)用即可;利用PHP文件實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的代碼控制,將對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)結(jié)果通過(guò)tpl模板文件顯示,這種做法使得代碼控制和頁(yè)面美工分離開(kāi)來(lái),開(kāi)發(fā)過(guò)程更加清晰明了。
關(guān)鍵詞: PHP; Smarty; 網(wǎng)站開(kāi)發(fā); 數(shù)據(jù)庫(kù)訪問(wèn)
中圖分類(lèi)號(hào):TP311.1 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2015)12-65-03
Connection and access database in the PHP+Smarty environment
Huang Lingna
(Wuxi City College of Vocational Technology, Jiangsu, Wuxi 214000, China)
Abstract: In PHP development environment, the Smarty template is a mainstream template which can realize the interaction between the front desk and the database. The data information in the background database is presented in the front page. Smarty template encapsulates the operations of connection with database and so on in the class, in the future development only need to call. The PHP file is used to achieve the code control of the database, the database access results are displayed through the TPL template file, this approach separates the code control and the page art, makes the development process more clear.
Key words: PHP; Smarty; Web site development; database access
0 引言
隨著電子商務(wù)的發(fā)展,越來(lái)越多的電商網(wǎng)站如雨后春筍般涌現(xiàn),用戶在網(wǎng)站上瀏覽商品信息,購(gòu)買(mǎi)中意的商品,這種行為已經(jīng)越來(lái)越流行。當(dāng)用戶在網(wǎng)站前臺(tái)瀏覽商品信息的時(shí)候,往往希望網(wǎng)站能以簡(jiǎn)潔明了、方便直觀的形式展示各種商品,這就需要網(wǎng)站開(kāi)發(fā)者在開(kāi)發(fā)網(wǎng)站的過(guò)程中充分考慮到用戶的需求。
PHP語(yǔ)言是一種在服務(wù)器上運(yùn)行的開(kāi)發(fā)語(yǔ)言,是一種類(lèi)似ASP的服務(wù)器端腳本語(yǔ)言[1],往往和超文本嵌入式標(biāo)記語(yǔ)言共同使用來(lái)實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)站。PHP技術(shù)在存取數(shù)據(jù)和兼容性方面更具有競(jìng)爭(zhēng)力,提供了一套比較完善的標(biāo)準(zhǔn)化數(shù)據(jù)庫(kù)接口[2]。
在網(wǎng)站開(kāi)發(fā)過(guò)程中,PHP具有以下優(yōu)勢(shì)[3]。
⑴ 安全性高:PHP是開(kāi)源軟件,具有公認(rèn)的安全性能。
⑵ 跨平臺(tái):支持幾乎所有的操作系統(tǒng)平臺(tái)以及多種Web服務(wù)器。
⑶ 支持廣泛的數(shù)據(jù)庫(kù):支持多種主流與非主流的數(shù)據(jù)庫(kù)。
⑷ 執(zhí)行速度快:占用的系統(tǒng)資源少,因此執(zhí)行效率高。
⑸ 免費(fèi):可以為網(wǎng)站經(jīng)營(yíng)者節(jié)省很大一部分開(kāi)支。
⑹ 支持面向?qū)ο笈c過(guò)程:可向下兼容。
⑺ 內(nèi)嵌Zend加速引擎:性能穩(wěn)定快速。
Smarty模板由于具有強(qiáng)大的功能和快速的運(yùn)行速度,在PHP眾多模板中一直處于領(lǐng)先地位。Smarty其實(shí)就是一種使用PHP編寫(xiě)的PHP模板引擎,它將整個(gè)程序分為視圖(用戶界面)和邏輯控制(PHP代碼)。這樣使得修改程序和頁(yè)面美工分離開(kāi)來(lái),互不影響。Smarty運(yùn)行速度極快;效率高;模板只需被解析一次,無(wú)需重復(fù);只需重新編譯一次修改過(guò)的模板文件[4]。Smarty可以整合ADODB技術(shù),在對(duì)數(shù)據(jù)庫(kù)的操作方面具有結(jié)構(gòu)清晰、簡(jiǎn)單明了,使用方便的特點(diǎn)。在網(wǎng)站開(kāi)發(fā)過(guò)程中, 使用PHP+Smarty+ADODB技術(shù)能高效的在網(wǎng)頁(yè)前臺(tái)與后臺(tái)數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)的交互。
1 將Smarty模板的配置方法封裝到類(lèi)
在實(shí)際開(kāi)發(fā)過(guò)程中,為了更有效的利用程序,往往將Smarty模板的配置方法封裝在一個(gè)類(lèi)中,在后期使用中只需要實(shí)例化該類(lèi),就可以調(diào)用定義好的方法。同時(shí)這種做法更有利于應(yīng)用程序的可移植性,即使更換了服務(wù)器,也不需要更改絕對(duì)路徑。Smarty的配置文件往往包括以下三個(gè)文件。
⑴ System.class.inc.php:定義數(shù)據(jù)庫(kù)的連接、操作和分頁(yè)等類(lèi)。
⑵ System.inc.php:完成對(duì)System.class.inc.php中定義的類(lèi)的實(shí)例化操作。
⑶ System.smarty.inc.php:定義Smarty的環(huán)境配置類(lèi),主要是對(duì)四個(gè)路徑的定義。
2 通過(guò)PHP文件實(shí)現(xiàn)PHP代碼控制
PHP文件往往被用作對(duì)應(yīng)用程序的邏輯控制,可以在PHP文件中加載System.inc.php文件以方便在后續(xù)使用預(yù)先定義好的類(lèi),同時(shí)在PHP文件中實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢,得到查詢結(jié)果集,并將結(jié)果存入模板變量,指定輸出tpl模板。
例如想從數(shù)據(jù)庫(kù)中分頁(yè)查詢商品信息,要求每頁(yè)顯示6條記錄,其代碼設(shè)置如下:
<?php
header("Content-type:text/html;charset=UTF-8");
include_once("system/system.inc.php");
$zx2=$seppage->ShowDate("select * from
tb_shangpin A,tb_type B where
A.typeid=B.typeid ORDER BY addtime desc",
$conn,6,$page);
//調(diào)用分頁(yè)類(lèi)中的分頁(yè)函數(shù)實(shí)現(xiàn)分頁(yè)查詢
$smarty->assign('zx2',$zx2);
//定義模板變量用來(lái)記錄每頁(yè)顯示的具體信息
$smarty->assign('zx2_page',$seppage->ShowPage
("產(chǎn)品","個(gè)",$_GET['page_type']));
?>
3 通過(guò)tpl文件遍歷輸出數(shù)據(jù)庫(kù)數(shù)據(jù)
Tpl模板文件中包含了頁(yè)面的所有靜態(tài)元素,如想在文件中加入注釋、變量、函數(shù)都需要使用定界符。換句話說(shuō),模板文件中不允許直接出現(xiàn)PHP代碼。
在模板中可以使用{section}循環(huán)控制遍歷輸出查詢結(jié)果,每行輸出一條記錄,每頁(yè)顯示6條記錄。效果圖片如圖1所示。
{section name=new_id loop=$zr2}
{/section}