




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)站開發(fā)技術(shù)高級(jí)篇日照職業(yè)技術(shù)學(xué)院毛書朋2008.4第七部分模版技術(shù)(smarty)提綱模版smarty的產(chǎn)生什么是smartySmarty的特點(diǎn)Smarty的應(yīng)用安裝第一個(gè)程序詳解模版smarty的產(chǎn)生一個(gè)應(yīng)用程序的開發(fā)流程如下:提交計(jì)劃文檔界面設(shè)計(jì)者[美工]制作了網(wǎng)站的外觀模型,然后把它交給后臺(tái)程序員。程序員使用PHP實(shí)現(xiàn)商業(yè)邏輯,同時(shí)使用外觀模型做成基本架構(gòu)。然后工程被返回到html頁面設(shè)計(jì)者繼續(xù)完善。就這樣工程可能在后臺(tái)程序員和頁面設(shè)計(jì)者之間來來回回好幾次。由于后臺(tái)程序員不喜歡干預(yù)任何有關(guān)html標(biāo)簽,同時(shí)也不需要美工們和php鬼混在一起;美工設(shè)計(jì)者只需要配置文件,動(dòng)態(tài)區(qū)塊和其他的界面部分,不必要去接觸那些錯(cuò)綜復(fù)雜的php代碼。因此,這時(shí)候有一個(gè)很好的模板支持就顯得很重要了。模版smarty的產(chǎn)生早在1999年后期,我們就已經(jīng)開始為模板引擎寫說明文檔。在完成這個(gè)文檔之后,我們開始用c寫一個(gè)模板引擎,并有希望被包含到php里去。在撞上了許多的技術(shù)難題的同時(shí),“什么是模板應(yīng)該做的,什么不該做”這個(gè)問題,也被熱烈的討論著。從這些經(jīng)驗(yàn),我們決定應(yīng)該用Php將模板引擎寫成一個(gè)類,讓任何覺得合適的人使用它。模版smarty的產(chǎn)生所以我們寫了一個(gè)引擎,從此就有了smarty.(注:這個(gè)類以前從來沒有公開發(fā)表過)。這個(gè)類幾乎達(dá)到了我們所有的要求:常規(guī)變量替換,支持包括其他模板,使用配置文件集成設(shè)置,嵌入Php代碼,限制‘if’語句的作用,還有更多的可以多層嵌套的健壯的動(dòng)態(tài)區(qū)塊。它用常規(guī)表達(dá)式做到這一切,于是代碼變得相當(dāng)簡(jiǎn)潔,我們可以說:令人費(fèi)解的。在每次調(diào)用的時(shí)候,都要去解析那些語法和常規(guī)表達(dá)式,于是在大型應(yīng)用的時(shí)候,它顯然慢了下來。在程序員的眼光看來,最大的問題還是使用php腳本建立和處理模板和動(dòng)態(tài)區(qū)塊的所有必要工作。我們應(yīng)該如何使他變得更簡(jiǎn)單?模版smarty的產(chǎn)生我們可以想象smarty應(yīng)該有怎樣的最后表現(xiàn)。我們知道php代碼如果沒有了模板解析的開銷將有多快,我們也知道從一般的美工看來php語言是多么的“恐怖”,然而這一切可以被一種更簡(jiǎn)單的模板語法掩飾掉。我們應(yīng)該怎樣把這兩種方法的長處結(jié)合起來?
于是,Smarty誕生了......什么是smartySmarty是一個(gè)php模板引擎。更準(zhǔn)確的說,它分開了邏輯程序和外在的內(nèi)容,提供了一種易于管理的方法??梢悦枋鰹閼?yīng)用程序員和美工扮演了不同的角色,因?yàn)樵诖蠖鄶?shù)情況下,他們不可能是同一個(gè)人。例如,你正在創(chuàng)建一個(gè)用于瀏覽新聞的網(wǎng)頁,新聞標(biāo)題,標(biāo)簽欄,作者和內(nèi)容等都是內(nèi)容要素,他們并不包含應(yīng)該怎樣去呈現(xiàn)。在Smarty的程序里,這些被忽略了。模板設(shè)計(jì)者們編輯模板,組合使用html標(biāo)簽和模板標(biāo)簽去格式化這些要素的輸出(html表格,背景色,字體大小,樣式表,等等)。有一天程序員想要改變文章檢索的方式(也就是程序邏輯的改變)。這個(gè)改變不影響模板設(shè)計(jì)者,內(nèi)容仍將準(zhǔn)確的輸出到模板。同樣的,哪天美工吃多了想要完全重做界面,也不會(huì)影響到程序邏輯。因此,程序員可以改變邏輯而不需要重新構(gòu)建模板,模板設(shè)計(jì)者可以改變模板而不影響到邏輯。Smarty的特點(diǎn)-優(yōu)點(diǎn)速度:采用smarty編寫的程序可以獲得最大速度的提高,這一點(diǎn)是相對(duì)于其它的模板引擎技術(shù)而言的。2.編譯型:采用smarty編寫的程序在運(yùn)行時(shí)要編譯成一個(gè)非模板技術(shù)的PHP文件,這個(gè)文件采用了PHP與HTML混合的方式,在下一次訪問模板時(shí)將WEB請(qǐng)求直接轉(zhuǎn)換到這個(gè)文件中,而不再進(jìn)行模板重新編譯(在源程序沒有改動(dòng)的情況下)Smarty的特點(diǎn)-優(yōu)點(diǎn)3.緩存技術(shù):smarty選用的一種緩存技術(shù),它可以將用戶最終看到的HTML文件緩存成一個(gè)靜態(tài)的HTML頁,當(dāng)設(shè)定smarty的cache屬性為true時(shí),在smarty設(shè)定的cachetime期內(nèi)將用戶的WEB請(qǐng)求直接轉(zhuǎn)換到這個(gè)靜態(tài)的HTML文件中來,這相當(dāng)于調(diào)用一個(gè)靜態(tài)的HTML文件。4.插件技術(shù):smarty可以自定義插件。插件實(shí)際就是一些自定義的函數(shù)。5.模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對(duì)模板進(jìn)行格式重排。Smarty的特點(diǎn)-缺點(diǎn)1.需要實(shí)時(shí)更新的內(nèi)容。例如像股票顯示,它需要經(jīng)常對(duì)數(shù)據(jù)進(jìn)行更新,這類型的程序使用smarty會(huì)使模板處理速度變慢。2.小項(xiàng)目。小項(xiàng)目因?yàn)轫?xiàng)目簡(jiǎn)單而美工與程序員兼于一人的項(xiàng)目,使用smarty會(huì)喪失php開發(fā)迅速的優(yōu)點(diǎn)。Smarty的應(yīng)用-安裝安裝裝smarty的環(huán)環(huán)境境::php版本本4.06以上上版版本本。。安裝裝smarty方法法非非常常簡(jiǎn)簡(jiǎn)單單,,從從/do_download.php中所所有有文文件件拷拷入入comm目錄錄,完成成基基本本安安裝裝.其它它高高級(jí)級(jí)安安裝裝使使用用方方法法請(qǐng)請(qǐng)看看手手冊(cè)冊(cè).安裝裝Smarty發(fā)行行版版在在/libs/目錄錄里里的的庫庫文文件件(就是是解解壓壓了了).這些些php文件件你你可可不不能能亂亂畫畫哦哦.這些些文文件件被被所所有有應(yīng)應(yīng)用用程程序序共共享享,也只只能能在在你你升升級(jí)級(jí)到到新新版版的的smarty的時(shí)時(shí)候候得得到到更更新新。。Smarty的應(yīng)應(yīng)用用-第一一個(gè)個(gè)程程序序編寫寫一一個(gè)個(gè)模模版版文文件件::index.tpl{*顯示示是是smarty變量量識(shí)識(shí)符符里里的的用用*包包含含的的文文字字為為注注釋釋內(nèi)內(nèi)容容*}<html><head><title>我的的第第一一個(gè)個(gè)smarty應(yīng)用用實(shí)實(shí)例例</title></head><body>大家家好好,,我我是是{$name},歡迎迎大大家家訪訪問問我我的的第第一一個(gè)個(gè)smarty應(yīng)用用實(shí)實(shí)例例??!~~~~。<hr><center>CopyRight©ET工作作室室2008年4月Email:etpt@163.com</center><hr></body></html>Smarty的應(yīng)應(yīng)用用-第一一個(gè)個(gè)程程序序編寫寫php文件件::index.php<?phpinclude_once("./comm/Smarty.class.php");//包含含smarty類文文件件$smarty=newSmarty();//建立立smarty實(shí)例例對(duì)對(duì)象象$smarty$smarty->template_dir="./templates";//設(shè)置置模模板板目目錄錄$smarty->compile_dir="./templates_c";//設(shè)置置編編譯譯目目錄錄$smarty->left_delimiter="{";//定義義左左邊邊界界符符$smarty->right_delimiter="}";//定義義右右邊邊界界符符$smarty->assign(““name””,““來自自火火星星的的ET””);//進(jìn)行行模模板板變變量量替替換換//編譯譯并并顯顯示示位位于于./templates下的的index.tpl模板板$smarty->display("index.tpl");?>Smarty的應(yīng)應(yīng)用用-詳解解一、、應(yīng)應(yīng)用用的的基基本本設(shè)設(shè)置置包含含smarty類文文件件include_once("./comm/Smarty.class.php");建立立smarty實(shí)例例對(duì)對(duì)象象$smarty$smarty=newSmarty();設(shè)置置模模板板目目錄錄$smarty->template_dir="./templates";設(shè)置置編編譯譯目目錄錄$smarty->compile_dir="./templates_c";Smarty的應(yīng)應(yīng)用用-詳解解一、、應(yīng)應(yīng)用用的的基基本本設(shè)設(shè)置置設(shè)置置緩緩存存目目錄錄$smarty->cache_dir="./cache";設(shè)置置緩緩存存時(shí)時(shí)間間$smarty->cache_lifetime=60*60*24;緩存存設(shè)設(shè)置置$smarty->caching=false|true;這里里是是調(diào)調(diào)試試時(shí)時(shí)設(shè)設(shè)為為false,發(fā)布布時(shí)時(shí)請(qǐng)請(qǐng)使使用用trueSmarty的應(yīng)應(yīng)用用-詳解解一、、應(yīng)應(yīng)用用的的基基本本設(shè)設(shè)置置定義義邊邊界界符符$smarty->left_delimiter="{";$smarty->right_delimiter="}";進(jìn)行行模模板板變變量量替替換換$smarty->assign(““name””,““變量量內(nèi)內(nèi)容容”);編譯譯并并顯顯示示位位于于./templates下的的模模板板$smarty->display(““模版版文文件件名名");$smarty->display("index.tpl");Smarty的應(yīng)應(yīng)用用-詳解解一、、應(yīng)應(yīng)用用的的基基本本設(shè)設(shè)置置模版版文文件件中中的的注注釋釋$smarty->left_delimiter**$smarty->right_delimiter{**}模版版文文件件中中的的文文件件包包含含((引引用用))$smarty->left_delimiterincludefile=““模版版文文件件名名"$smarty->right_delimiter{includefile="header.tpl"}{*頁面面頭頭*}Smarty的應(yīng)應(yīng)用用-詳解解二、、if,elseif,else{if$sexeq““1"}WelcomeSir.{elseif$sexeq““2"}WelcomeMa'am.{else}Welcome!!{/if}Smarty的應(yīng)應(yīng)用用-詳解解三、、foreachforeach:用用于于循循環(huán)環(huán)簡(jiǎn)簡(jiǎn)單單數(shù)數(shù)組組,,它它是是一一個(gè)個(gè)選選擇擇性性的的section循環(huán)環(huán),,它它的的定定義義格格式式為為:{foreachfrom=$arrayitem=array_id}{foreachelse}{/foreach}其中中,,from指出出要要循循環(huán)環(huán)的的數(shù)數(shù)組組變變量量,,item為要要循循環(huán)環(huán)的的變變量量名名稱稱,,循循環(huán)環(huán)次次數(shù)數(shù)由由from所指指定定的的數(shù)數(shù)組組變變量量的的個(gè)個(gè)數(shù)數(shù)所所決決定定。。{foreachelse}用來來當(dāng)當(dāng)程程序序中中傳傳遞遞過過來來的的數(shù)數(shù)組組為為空空時(shí)時(shí)的的處處理理。。Smarty的應(yīng)應(yīng)用用-詳解解編寫寫一一模模版版文文件件::index4.tpl新聞聞編編號(hào)號(hào)新新聞聞標(biāo)標(biāo)題題{foreachfrom=$newsArrayitem=newsID}{$newsID.newsID}{$newsID.newsTitle}<hr>{foreachelse}對(duì)不起起,數(shù)數(shù)據(jù)庫庫中沒沒有新新聞?shì)斴敵觯?!{/foreach}Smarty的應(yīng)用用-詳解編寫一一php文件::index4.php$array[]=array("newsID"=>1,"newsTitle"=>"第1條新聞聞");$array[]=array("newsID"=>2,"newsTitle"=>"第2條新聞聞");$array[]=array("newsID"=>3,"newsTitle"=>"第3條新聞聞");$array[]=array("newsID"=>4,"newsTitle"=>"第4條新聞聞");$array[]=array("newsID"=>5,"newsTitle"=>"第5條新聞聞");$array[]=array("newsID"=>6,"newsTitle"=>"第6條新聞聞");$smarty->assign("newsArray",$array);Smarty的應(yīng)用用-詳解四、sectionsection的產(chǎn)生生是為為解決決foreach的不足足的,,與foreach一樣,,它用用于設(shè)設(shè)計(jì)模模板內(nèi)內(nèi)的循循環(huán)塊塊,它它較為為復(fù)雜雜,可可極大大程序序上滿滿足程程序需需要,,所以以在程程序中中我習(xí)習(xí)慣使使用它它而不不使用用foreach,基本原原形為為:{sectionname=nameloop=$varName[start=$startstep=$stepmax=$maxshow=true]}Smarty的應(yīng)用用-詳解四、sectionname:section的名稱稱,不不用加加$$loop:要循環(huán)環(huán)的變變量,,在程程序中中要使使用assign對(duì)這個(gè)個(gè)變量量進(jìn)行行操作作。$start:開始循循環(huán)的的下標(biāo)標(biāo),循循環(huán)下下標(biāo)默默認(rèn)由由0開始$step:每次循循環(huán)時(shí)時(shí)下標(biāo)標(biāo)的增增數(shù)$max:最大循循環(huán)下下標(biāo)$show:boolean類型,,決定定是否否對(duì)這這個(gè)塊塊進(jìn)行行顯示示,默默認(rèn)為為trueSmarty的應(yīng)用用-詳解編寫一一模版版文件件:index5.tpl這里將將輸出出一個(gè)個(gè)數(shù)組組:<br>新聞編編號(hào)新新聞聞標(biāo)題題<br>{sectionname=looploop=$News}{$News[loop].newsID}{$News[loop].newsTitle}<hr>{sectionelse}對(duì)不起起,沒沒有任任何新新聞?shì)斴斎耄?!{/section}Smarty的應(yīng)用用-詳解五、PHP+MySQL+Smarty的使用用創(chuàng)建數(shù)數(shù)據(jù)庫庫Createdatabasesnews創(chuàng)建數(shù)數(shù)據(jù)表表CREATETABLEIFNOTEXISTS`news_info`(`id`int(11)NOTNULLauto_increment,`title`varchar(60)NOTNULL,PRIMARYKEY(`id`),UNIQUEKEY`id`(`id`))ENGINE=MyISAMDEFAULTCHARSET=latin1AUTO_INCREMENT=3;插入數(shù)數(shù)據(jù)Smarty的應(yīng)用用-詳解五、PHP+MySQL+Smarty的使用用編寫一一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年燒結(jié)釤鈷永磁材料合作協(xié)議書
- 護(hù)理超聲培訓(xùn)課程
- 國際會(huì)議同傳翻譯設(shè)備租賃與翻譯培訓(xùn)全面服務(wù)合同
- 靜脈輸血病人護(hù)理
- 網(wǎng)店過戶交易安全保障與后續(xù)運(yùn)營支持合同
- 區(qū)塊鏈智能合約代碼智能合約安全審計(jì)與合規(guī)審查補(bǔ)充協(xié)議
- 離婚協(xié)議財(cái)產(chǎn)債務(wù)分割及免除條款合同
- 游戲公會(huì)會(huì)員招募與培訓(xùn)服務(wù)協(xié)議
- 網(wǎng)絡(luò)內(nèi)容審核系統(tǒng)軟件租賃與功能優(yōu)化升級(jí)服務(wù)協(xié)議
- 子女姓氏變更家庭監(jiān)護(hù)權(quán)爭(zhēng)議解決與財(cái)產(chǎn)分割協(xié)議
- 食品安全知識(shí)8
- 《校園廉潔教育》主題班會(huì)課件全文
- 臺(tái)球室裝修簡(jiǎn)易合同
- 《三只松鼠公司基于近三年數(shù)據(jù)的財(cái)務(wù)探析(4200字論文)》
- 《可復(fù)制的領(lǐng)導(dǎo)力》讀書分享
- GB/T 25085.2-2024道路車輛汽車電纜第2部分:試驗(yàn)方法
- 【水利水電】李想 案例專項(xiàng)班教案 03-案例專項(xiàng)班(三)
- 水利工程項(xiàng)目預(yù)算管理方案
- 銀行大額存單業(yè)務(wù)培訓(xùn)
- DB37-T 4733-2024預(yù)制艙式儲(chǔ)能電站設(shè)計(jì)規(guī)范
- wps計(jì)算機(jī)二級(jí)試題及答案
評(píng)論
0/150
提交評(píng)論