版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
網(wǎng)站開發(fā)技術(shù)高級篇日照職業(yè)技術(shù)學院毛書朋2008.4第七部分模版技術(shù)(smarty)提綱模版smarty的產(chǎn)生什么是smartySmarty的特點Smarty的應用安裝第一個程序詳解模版smarty的產(chǎn)生一個應用程序的開發(fā)流程如下:提交計劃文檔界面設計者[美工]制作了網(wǎng)站的外觀模型,然后把它交給后臺程序員。程序員使用PHP實現(xiàn)商業(yè)邏輯,同時使用外觀模型做成基本架構(gòu)。然后工程被返回到html頁面設計者繼續(xù)完善。就這樣工程可能在后臺程序員和頁面設計者之間來來回回好幾次。由于后臺程序員不喜歡干預任何有關(guān)html標簽,同時也不需要美工們和php鬼混在一起;美工設計者只需要配置文件,動態(tài)區(qū)塊和其他的界面部分,不必要去接觸那些錯綜復雜的php代碼。因此,這時候有一個很好的模板支持就顯得很重要了。模版smarty的產(chǎn)生早在1999年后期,我們就已經(jīng)開始為模板引擎寫說明文檔。在完成這個文檔之后,我們開始用c寫一個模板引擎,并有希望被包含到php里去。在撞上了許多的技術(shù)難題的同時,“什么是模板應該做的,什么不該做”這個問題,也被熱烈的討論著。從這些經(jīng)驗,我們決定應該用Php將模板引擎寫成一個類,讓任何覺得合適的人使用它。模版smarty的產(chǎn)生所以我們寫了一個引擎,從此就有了smarty.(注:這個類以前從來沒有公開發(fā)表過)。這個類幾乎達到了我們所有的要求:常規(guī)變量替換,支持包括其他模板,使用配置文件集成設置,嵌入Php代碼,限制‘if’語句的作用,還有更多的可以多層嵌套的健壯的動態(tài)區(qū)塊。它用常規(guī)表達式做到這一切,于是代碼變得相當簡潔,我們可以說:令人費解的。在每次調(diào)用的時候,都要去解析那些語法和常規(guī)表達式,于是在大型應用的時候,它顯然慢了下來。在程序員的眼光看來,最大的問題還是使用php腳本建立和處理模板和動態(tài)區(qū)塊的所有必要工作。我們應該如何使他變得更簡單?模版smarty的產(chǎn)生我們可以想象smarty應該有怎樣的最后表現(xiàn)。我們知道php代碼如果沒有了模板解析的開銷將有多快,我們也知道從一般的美工看來php語言是多么的“恐怖”,然而這一切可以被一種更簡單的模板語法掩飾掉。我們應該怎樣把這兩種方法的長處結(jié)合起來?
于是,Smarty誕生了......什么是smartySmarty是一個php模板引擎。更準確的說,它分開了邏輯程序和外在的內(nèi)容,提供了一種易于管理的方法??梢悦枋鰹閼贸绦騿T和美工扮演了不同的角色,因為在大多數(shù)情況下,他們不可能是同一個人。例如,你正在創(chuàng)建一個用于瀏覽新聞的網(wǎng)頁,新聞標題,標簽欄,作者和內(nèi)容等都是內(nèi)容要素,他們并不包含應該怎樣去呈現(xiàn)。在Smarty的程序里,這些被忽略了。模板設計者們編輯模板,組合使用html標簽和模板標簽去格式化這些要素的輸出(html表格,背景色,字體大小,樣式表,等等)。有一天程序員想要改變文章檢索的方式(也就是程序邏輯的改變)。這個改變不影響模板設計者,內(nèi)容仍將準確的輸出到模板。同樣的,哪天美工吃多了想要完全重做界面,也不會影響到程序邏輯。因此,程序員可以改變邏輯而不需要重新構(gòu)建模板,模板設計者可以改變模板而不影響到邏輯。Smarty的特點-優(yōu)點速度:采用smarty編寫的程序可以獲得最大速度的提高,這一點是相對于其它的模板引擎技術(shù)而言的。2.編譯型:采用smarty編寫的程序在運行時要編譯成一個非模板技術(shù)的PHP文件,這個文件采用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉(zhuǎn)換到這個文件中,而不再進行模板重新編譯(在源程序沒有改動的情況下)Smarty的特點-優(yōu)點3.緩存技術(shù):smarty選用的一種緩存技術(shù),它可以將用戶最終看到的HTML文件緩存成一個靜態(tài)的HTML頁,當設定smarty的cache屬性為true時,在smarty設定的cachetime期內(nèi)將用戶的WEB請求直接轉(zhuǎn)換到這個靜態(tài)的HTML文件中來,這相當于調(diào)用一個靜態(tài)的HTML文件。4.插件技術(shù):smarty可以自定義插件。插件實際就是一些自定義的函數(shù)。5.模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對模板進行格式重排。Smarty的特點-缺點1.需要實時更新的內(nèi)容。例如像股票顯示,它需要經(jīng)常對數(shù)據(jù)進行更新,這類型的程序使用smarty會使模板處理速度變慢。2.小項目。小項目因為項目簡單而美工與程序員兼于一人的項目,使用smarty會喪失php開發(fā)迅速的優(yōu)點。Smarty的應用-安裝安裝裝smarty的環(huán)環(huán)境境::php版本本4.06以上上版版本本。。安裝裝smarty方法法非非常常簡簡單單,,從從/do_download.php中所所有有文文件件拷拷入入comm目錄錄,完成成基基本本安安裝裝.其它它高高級級安安裝裝使使用用方方法法請請看看手手冊冊.安裝裝Smarty發(fā)行行版版在在/libs/目錄錄里里的的庫庫文文件件(就是是解解壓壓了了).這些些php文件件你你可可不不能能亂亂畫畫哦哦.這些些文文件件被被所所有有應應用用程程序序共共享享,也只只能能在在你你升升級級到到新新版版的的smarty的時時候候得得到到更更新新。。Smarty的應應用用-第一一個個程程序序編寫寫一一個個模模版版文文件件::index.tpl{*顯示示是是smarty變量量識識符符里里的的用用*包包含含的的文文字字為為注注釋釋內(nèi)內(nèi)容容*}<html><head><title>我的的第第一一個個smarty應用用實實例例</title></head><body>大家家好好,,我我是是{$name},歡迎迎大大家家訪訪問問我我的的第第一一個個smarty應用用實實例例?。~~~。<hr><center>CopyRight©ET工作作室室2008年4月Email:etpt@163.com</center><hr></body></html>Smarty的應應用用-第一一個個程程序序編寫寫php文件件::index.php<?phpinclude_once("./comm/Smarty.class.php");//包含含smarty類文文件件$smarty=newSmarty();//建立立smarty實例例對對象象$smarty$smarty->template_dir="./templates";//設置置模模板板目目錄錄$smarty->compile_dir="./templates_c";//設置置編編譯譯目目錄錄$smarty->left_delimiter="{";//定義義左左邊邊界界符符$smarty->right_delimiter="}";//定義義右右邊邊界界符符$smarty->assign(““name””,““來自自火火星星的的ET””);//進行行模模板板變變量量替替換換//編譯譯并并顯顯示示位位于于./templates下的的index.tpl模板板$smarty->display("index.tpl");?>Smarty的應應用用-詳解解一、、應應用用的的基基本本設設置置包含含smarty類文文件件include_once("./comm/Smarty.class.php");建立立smarty實例例對對象象$smarty$smarty=newSmarty();設置置模模板板目目錄錄$smarty->template_dir="./templates";設置置編編譯譯目目錄錄$smarty->compile_dir="./templates_c";Smarty的應應用用-詳解解一、、應應用用的的基基本本設設置置設置置緩緩存存目目錄錄$smarty->cache_dir="./cache";設置置緩緩存存時時間間$smarty->cache_lifetime=60*60*24;緩存存設設置置$smarty->caching=false|true;這里里是是調(diào)調(diào)試試時時設設為為false,發(fā)布布時時請請使使用用trueSmarty的應應用用-詳解解一、、應應用用的的基基本本設設置置定義義邊邊界界符符$smarty->left_delimiter="{";$smarty->right_delimiter="}";進行行模模板板變變量量替替換換$smarty->assign(““name””,““變量量內(nèi)內(nèi)容容”);編譯譯并并顯顯示示位位于于./templates下的的模模板板$smarty->display(““模版版文文件件名名");$smarty->display("index.tpl");Smarty的應應用用-詳解解一、、應應用用的的基基本本設設置置模版版文文件件中中的的注注釋釋$smarty->left_delimiter**$smarty->right_delimiter{**}模版版文文件件中中的的文文件件包包含含((引引用用))$smarty->left_delimiterincludefile=““模版版文文件件名名"$smarty->right_delimiter{includefile="header.tpl"}{*頁面面頭頭*}Smarty的應應用用-詳解解二、、if,elseif,else{if$sexeq““1"}WelcomeSir.{elseif$sexeq““2"}WelcomeMa'am.{else}Welcome!!{/if}Smarty的應應用用-詳解解三、、foreachforeach:用用于于循循環(huán)環(huán)簡簡單單數(shù)數(shù)組組,,它它是是一一個個選選擇擇性性的的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ù)組組變變量量的的個個數(shù)數(shù)所所決決定定。。{foreachelse}用來來當當程程序序中中傳傳遞遞過過來來的的數(shù)數(shù)組組為為空空時時的的處處理理。。Smarty的應應用用-詳解解編寫寫一一模模版版文文件件::index4.tpl新聞聞編編號號新新聞聞標標題題{foreachfrom=$newsArrayitem=newsID}{$newsID.newsID}{$newsID.newsTitle}<hr>{foreachelse}對不起起,數(shù)數(shù)據(jù)庫庫中沒沒有新新聞輸輸出?。/foreach}Smarty的應用用-詳解編寫一一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的應用用-詳解四、sectionsection的產(chǎn)生生是為為解決決foreach的不足足的,,與foreach一樣,,它用用于設設計模模板內(nèi)內(nèi)的循循環(huán)塊塊,它它較為為復雜雜,可可極大大程序序上滿滿足程程序需需要,,所以以在程程序中中我習習慣使使用它它而不不使用用foreach,基本原原形為為:{sectionname=nameloop=$varName[start=$startstep=$stepmax=$maxshow=true]}Smarty的應用用-詳解四、sectionname:section的名稱稱,不不用加加$$loop:要循環(huán)環(huán)的變變量,,在程程序中中要使使用assign對這個個變量量進行行操作作。$start:開始循循環(huán)的的下標標,循循環(huán)下下標默默認由由0開始$step:每次循循環(huán)時時下標標的增增數(shù)$max:最大循循環(huán)下下標$show:boolean類型,,決定定是否否對這這個塊塊進行行顯示示,默默認為為trueSmarty的應用用-詳解編寫一一模版版文件件:index5.tpl這里將將輸出出一個個數(shù)組組:<br>新聞編編號新新聞聞標題題<br>{sectionname=looploop=$News}{$News[loop].newsID}{$News[loop].newsTitle}<hr>{sectionelse}對不起起,沒沒有任任何新新聞輸輸入?。/section}Smarty的應用用-詳解五、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的應用用-詳解五、PHP+MySQL+Smarty的使用用編寫一一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)產(chǎn)品銷售合同協(xié)議范本
- 招標文件房產(chǎn)項目
- 版短期無擔保個人
- 第三方支付保證金協(xié)議
- 知識產(chǎn)權(quán)顧問合同的爭議解決方法分享
- 學生健康飲食承諾保證書
- 裝飾拆除改造合同
- 道具采購合同范本中文模板樣式
- 導購員合同協(xié)議的交通補貼
- 幼兒園食品訂購合同范本
- 電影作品解讀-世界科幻電影智慧樹知到期末考試答案章節(jié)答案2024年成都錦城學院
- NB-T47003.1-2009鋼制焊接常壓容器(同JB-T4735.1-2009)
- 聚焦高質(zhì)量+探索新高度+-2025屆高考政治復習備考策略
- 惠州市惠城區(qū)2022-2023學年七年級上學期期末教學質(zhì)量檢測數(shù)學試卷
- 北京市西城區(qū)2022-2023學年七年級上學期期末英語試題【帶答案】
- ISO45001-2018職業(yè)健康安全管理體系之5-4:“5 領導作用和工作人員參與-5.4 工作人員的協(xié)商和參與”解讀和應用指導材料(2024A0-雷澤佳)
- 看圖猜成語共876道題目動畫版
- 小學二年級上冊數(shù)學-數(shù)角的個數(shù)專項練習
- 曲式與作品分析智慧樹知到期末考試答案章節(jié)答案2024年蘭州文理學院
- 園林設施維護方案
- 特種設備使用單位日管控、周排查、月調(diào)度示范表
評論
0/150
提交評論