版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
網(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)簡潔,我們可以說:令人費(fèi)解的。在每次調(diào)用的時(shí)候,都要去解析那些語法和常規(guī)表達(dá)式,于是在大型應(yīng)用的時(shí)候,它顯然慢了下來。在程序員的眼光看來,最大的問題還是使用php腳本建立和處理模板和動(dòng)態(tài)區(qū)塊的所有必要工作。我們應(yīng)該如何使他變得更簡單?模版smarty的產(chǎn)生我們可以想象smarty應(yīng)該有怎樣的最后表現(xiàn)。我們知道php代碼如果沒有了模板解析的開銷將有多快,我們也知道從一般的美工看來php語言是多么的“恐怖”,然而這一切可以被一種更簡單的模板語法掩飾掉。我們應(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)目簡單而美工與程序員兼于一人的項(xiàng)目,使用smarty會(huì)喪失php開發(fā)迅速的優(yōu)點(diǎn)。Smarty的應(yīng)用-安裝安裝裝smarty的環(huán)環(huán)境境::php版本本4.06以上上版版本本。。安裝裝smarty方法法非非常常簡簡單單,,從從/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)簡簡單單數(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年美麗鄉(xiāng)村建設(shè)項(xiàng)目預(yù)拌混凝土供應(yīng)協(xié)議3篇
- 二零二五年礦山安全員聘用及礦山安全生產(chǎn)合同3篇
- 2025年度城市綜合體項(xiàng)目土地收購及開發(fā)合作協(xié)議4篇
- 2025年地下管網(wǎng)建設(shè)PPP合作框架協(xié)議
- 2025年消防設(shè)施維修保養(yǎng)合作協(xié)議范本3篇
- 2025年合法用途租賃協(xié)議
- 2025年度旅游車輛租賃與景區(qū)導(dǎo)覽設(shè)備租賃合同4篇
- 2025年度臨建施工工程消防安全管理合同4篇
- 二零二五年建筑施工腳手架承包合同2篇
- 二零二五年度煤矸石綜合利用技術(shù)與設(shè)備出口合同3篇
- 《新生兒預(yù)防接種》課件
- 小學(xué)五年級(jí)上冊(cè)數(shù)學(xué)寒假作業(yè)每日一練
- 2025年1月八省聯(lián)考高考綜合改革適應(yīng)性測(cè)試-高三化學(xué)(陜西、山西、寧夏、青海卷) 含解析
- DB1303T382-2024 創(chuàng)傷性休克患者護(hù)理指南
- 2024年03月內(nèi)蒙古中國銀行內(nèi)蒙古分行春季校園招考筆試歷年參考題庫附帶答案詳解
- 鏈家、貝殼專業(yè)租房協(xié)議、房屋租賃合同、房屋出租協(xié)議
- 2024-2025學(xué)年華東師大新版八年級(jí)上冊(cè)數(shù)學(xué)期末復(fù)習(xí)試卷(含詳解)
- 《道路車輛 48V供電電壓的電氣及電子部件 電性能要求和試驗(yàn)方法》文本以及編制說明
- 2024年新高考I卷數(shù)學(xué)高考試卷(原卷+答案)
- 十八項(xiàng)醫(yī)療核心制度考試題與答案
- 大學(xué)生職業(yè)規(guī)劃大賽生涯發(fā)展報(bào)告
評(píng)論
0/150
提交評(píng)論