




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)站開發(fā)技術(shù)高級(jí)篇,日照職業(yè)技術(shù)學(xué)院 毛書朋 2008.4,第七部分 模版技術(shù)(smarty),提綱,模版smarty的產(chǎn)生 什么是smarty Smarty的特點(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ì)者只
2、需要配置文件,動(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á)到了我們所有的要
3、求:常規(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語言是多么的“恐怖”,然而這一切
4、可以被一種更簡(jiǎn)單的模板語法掩飾掉。我們應(yīng)該怎樣把這兩種方法的長(zhǎng)處結(jié)合起來?于是,Smarty誕生了.,什么是smarty,Smarty是一個(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表格,背景色,字體大小,樣式表,等等)。有一天程序員
5、想要改變文章檢索的方式(也就是程序邏輯的改變)。這個(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)的情況下)
6、,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ù)
7、據(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)境:php版本4.06以上版本。 安裝smarty方法非常簡(jiǎn)單,從 其它高級(jí)安裝使用方法請(qǐng)看手冊(cè). 安裝Smarty發(fā)行版在/libs/目錄里的庫文件(就是解壓了). 這些php文件你可不能亂畫哦.這些文件被所有應(yīng)用程序共享,也只能在你升級(jí)到新版的smarty的時(shí)候得到更新。,Smarty的應(yīng)用-第一個(gè)程序,編寫一個(gè)模版文件:index.tpl * 顯示是smarty變量識(shí)符里的
8、用*包含的文字為注釋內(nèi)容 * 我的第一個(gè)smarty應(yīng)用實(shí)例 大家好,我是$name, 歡迎大家訪問我的第一個(gè)smarty應(yīng)用實(shí)例!。 CopyRight/設(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
9、.tpl); ?,Smarty的應(yīng)用-詳解,一、應(yīng)用的基本設(shè)置 包含smarty類文件 include_once(./comm/Smarty.class.php); 建立smarty實(shí)例對(duì)象$smarty $smarty = new Smarty(); 設(shè)置模板目錄 $smarty-template_dir = ./templates; 設(shè)置編譯目錄 $smarty-compile_dir = ./templates_c;,Smarty的應(yīng)用-詳解,一、應(yīng)用的基本設(shè)置 設(shè)置緩存目錄 $smarty-cache_dir=./cache; 設(shè)置緩存時(shí)間 $smarty-cache_lifetime
10、=60*60*24; 緩存設(shè)置 $smarty-caching=false|true; 這里是調(diào)試時(shí)設(shè)為false,發(fā)布時(shí)請(qǐng)使用true,Smarty的應(yīng)用-詳解,一、應(yīng)用的基本設(shè)置 定義邊界符 $smarty-left_delimiter = ; $smarty-right_delimiter = ; 進(jìn)行模板變量替換 $smarty-assign(“name”, “變量?jī)?nèi)容”); 編譯并顯示位于./templates下的模板 $smarty-display(“模版文件名); $smarty-display(index.tpl);,Smarty的應(yīng)用-詳解,一、應(yīng)用的基本設(shè)置 模版文件中的注
11、釋 $smarty-left_delimiter * * $smarty-right_delimiter * * 模版文件中的文件包含(引用) $smarty-left_delimiter include file=“模版文件名 $smarty-right_delimiter include file=header.tpl *頁面頭*,Smarty的應(yīng)用-詳解,二、if,elseif,else if $sex eq “1 Welcome Sir. elseif $sex eq “2 Welcome Maam. else Welcome! /if,Smarty的應(yīng)用-詳解,三、foreach f
12、oreach:用于循環(huán)簡(jiǎn)單數(shù)組,它是一個(gè)選擇性的section循環(huán),它的定義格式為: foreach from=$array item=array_idforeachelse/foreach 其中,from 指出要循環(huán)的數(shù)組變量,item為要循環(huán)的變量名稱,循環(huán)次數(shù)由from所指定的數(shù)組變量的個(gè)數(shù)所決定。foreachelse用來當(dāng)程序中傳遞過來的數(shù)組為空時(shí)的處理。,Smarty的應(yīng)用-詳解,編寫一模版文件:index4.tpl 新聞編號(hào) 新聞標(biāo)題 foreach from=$newsArray item=newsID $newsID.newsID $newsID.newsTitleforea
13、chelse對(duì)不起,數(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=
14、6, newsTitle=第6條新聞); $smarty-assign(newsArray, $array);,Smarty的應(yīng)用-詳解,四、section section的產(chǎn)生是為解決foreach的不足的,與foreach一樣,它用于設(shè)計(jì)模板內(nèi)的循環(huán)塊,它較為復(fù)雜,可極大程序上滿足程序需要,所以在程序中我習(xí)慣使用它而不使用foreach,基本原形為: section name = name loop = $varName start = $start step = $step max = $max show = true,Smarty的應(yīng)用-詳解,四、section name: secti
15、on的名稱,不用加$loop: 要循環(huán)的變量,在程序中要使用assign對(duì)這個(gè)變量進(jìn)行操作。$start: 開始循環(huán)的下標(biāo),循環(huán)下標(biāo)默認(rèn)由0開始$step: 每次循環(huán)時(shí)下標(biāo)的增數(shù)$max: 最大循環(huán)下標(biāo)$show: boolean類型,決定是否對(duì)這個(gè)塊進(jìn)行顯示,默認(rèn)為true,Smarty的應(yīng)用-詳解,編寫一模版文件:index5.tpl 這里將輸出一個(gè)數(shù)組:新聞編號(hào) 新聞標(biāo)題 section name=loop loop=$News$Newsloop.newsID$Newsloop.newsTitlesectionelse對(duì)不起,沒有任何新聞?shì)斎耄?section,Smarty的應(yīng)用-詳解,
16、五、PHP+MySQL+Smarty的使用 創(chuàng)建數(shù)據(jù)庫 Create databases news 創(chuàng)建數(shù)據(jù)表 CREATE TABLE IF NOT EXISTS news_info ( id int(11) NOT NULL auto_increment, title varchar(60) NOT NULL, PRIMARY KEY (id), UNIQUE KEY id (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 插入數(shù)據(jù),Smarty的應(yīng)用-詳解,五、PHP+MySQL+Smarty的使用 編寫一模版文
17、件:index6.tpl 這里將輸出一個(gè)數(shù)組: 新聞編號(hào) 新聞標(biāo)題 section name=loop loop=$News start=$start step=$step $Newsloop.id $Newsloop.titlesectionelse 對(duì)不起,沒有任何新聞?shì)斎耄?/section,Smarty的應(yīng)用-詳解,五、PHP+MySQL+Smarty的使用 編寫一模版文件:index6.php $db = mysql_connect(localhost, root,root) or die(數(shù)據(jù)庫連接錯(cuò)誤!); mysql_select_db(news, $db); $query=select * from news_info; $rst=mysql_query($query,$db)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧城市安防建設(shè)新篇章-智能監(jiān)控系統(tǒng)融資提案解讀
- 教學(xué)流程與數(shù)字化時(shí)代教育的互動(dòng)結(jié)合研討會(huì)
- 抖音商戶流量來源數(shù)據(jù)分析制度
- 抖音商戶客服售后問題閉環(huán)管理制度
- 服裝縫紉技能培訓(xùn)課件
- 天津市河西區(qū)第四中學(xué)2024-2025學(xué)年化學(xué)九上期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 2024-2025學(xué)年重慶市江津區(qū)支坪中學(xué)九年級(jí)化學(xué)第一學(xué)期期末調(diào)研模擬試題含解析
- 公共衛(wèi)生應(yīng)急物資保障資金申請(qǐng)2025年預(yù)算報(bào)告
- 南京鐵道職業(yè)技術(shù)學(xué)院《移動(dòng)互聯(lián)網(wǎng)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 大同煤炭職業(yè)技術(shù)學(xué)院《健美操(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 住院患者心理需要及護(hù)理
- 空調(diào)設(shè)備吊裝與安裝方案
- 2024年寧夏中考生物真題卷及答案解析
- 公共體育場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 光纖通信系統(tǒng)(第3版) 課件 第1-3章 概述、光纖與光纜、光源和光發(fā)送機(jī)
- 貸款車電子合同模板
- 高空作業(yè)車外墻施工方案
- 四年級(jí)上冊(cè)語文全冊(cè)重點(diǎn)知識(shí)
- GB/T 150.3-2024壓力容器第3部分:設(shè)計(jì)
- 火龍罐綜合灸技術(shù)
- 拼多多店鋪代運(yùn)營合同模板
評(píng)論
0/150
提交評(píng)論