freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于php和mvc技術(shù)架構(gòu)的精品課程網(wǎng)站管理系統(tǒng)-資料下載頁

2025-08-30 01:22本頁面

【導(dǎo)讀】學(xué)質(zhì)量的關(guān)鍵環(huán)節(jié)和重要舉措。精品課程網(wǎng)站則是精品課程建設(shè)和評價的窗口,網(wǎng)站開發(fā)的工具較多,所采用的技術(shù)也多種多樣。利用它們能夠設(shè)計出高。品質(zhì)的網(wǎng)頁、開發(fā)出功能強(qiáng)大的網(wǎng)站,但其對網(wǎng)站制作專業(yè)技術(shù)的要求非常高,因此,目前精品課程網(wǎng)站的建設(shè)一般都是由教師提供素。材和資料,委托一些IT專業(yè)人士或公司進(jìn)行開發(fā)。但這種方式存在著許多問題,如開發(fā)周期長、費(fèi)用開銷大、課程網(wǎng)站的修改和維護(hù)難以保障等。程網(wǎng)站管理系統(tǒng)的設(shè)計方案,并詳細(xì)介紹、分析了系統(tǒng)的主要功能和實(shí)現(xiàn)技術(shù)。發(fā)過程,使得非專業(yè)人員能在較短的時間內(nèi)制作出滿意的課程網(wǎng)站。

  

【正文】 php define(39。THINK_PATH39。, 39。./ThinkPHP39。)。 // 定義 ThinkPHP 框架路徑define(39。APP_NAME39。, 39。JxnuECMS_App39。)。 // 定義項目名稱define(39。APP_PATH39。, 39。./JxnuECMS_App39。)。// 定義項目路徑require(THINK_PATH./)。 // 加載框架入口文件 $App = new App()。 //實(shí)例化一個網(wǎng)站應(yīng)用實(shí)例$Apprun()。//應(yīng)用程序初始化?之后項目預(yù)編譯,依次加載系統(tǒng)慣例配置文件 、項目配置文件 、項目公共文件 ,如果是調(diào)試模式加載系統(tǒng)調(diào)試配置文件 ,如果定義了項目的調(diào)試配置文件則載入 。之后生成項目編譯緩存文件~ 。接下來系統(tǒng)會根據(jù)當(dāng)前的 URL 來分析要執(zhí)行的模塊和操作。這個分析工作由 URL 調(diào)度器 Dispatcher 來完成該調(diào)度。在 Dispatcher 調(diào)度器中,會根據(jù) 獲取當(dāng)前需要執(zhí)行的項目(appName) 、模塊(moduleName)和操作(actionName) 。每個模塊名稱是一個 Action 文件,類似于控制器,系統(tǒng)會自動尋找項目類庫 Action 目錄下面的相關(guān)類,如果沒有找到,會嘗試搜索應(yīng)用目錄下面的組件類中包含的模塊類,如果依然沒有,則會判斷是否存在空模塊(EmpatyAction) ,否則拋出異常。而 actionName 操作是首先判斷是否存在 Action 類的公共方法,如果不存在則會繼續(xù)尋找父類中的方法,如果依然不存在,就會判斷是否存在空操作(_empty) ,然后就會尋找是否存在自動匹配的模版文件。如果存在模版文件,第 4 章 系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)24那么就直接渲染模版輸出,否則將拋出異常。因此應(yīng)用開發(fā)中的一個重要過程就是給不同的模塊定義具體的操作。一個應(yīng)用如果不需要和數(shù)據(jù)庫交互的時候可以不需要定義模型類,但是必須定義Action 控制器。Action 控制器的定義非常簡單,繼承 Action 基礎(chǔ)類即可:Class UserAction extends Action{} Action 基礎(chǔ)類中默認(rèn)定義了很多常用的操作方法。例如,我們可以執(zhí)行(如果已經(jīng)存在對應(yīng)模板文件的情況) servername/如果需要增加或者重新定義自己的操作方法,增加一個方法就可以了,例如:Class MemberAction extends Action{ Public function select(){// 定義一個 select 操作方法,方法不需任何參數(shù) // select 操作方法的邏輯實(shí)現(xiàn) // …… $thisdisplay()。 // 輸出模板頁面}} 通過執(zhí)行 操作的模板文件,而默認(rèn)的模板文件應(yīng)該位于項目目錄下面的 Tpl\default\ Member \ 模版引擎設(shè)計與使用 模板引擎概述 模板引擎被設(shè)計出來用于把商業(yè)邏輯從數(shù)據(jù)的表現(xiàn)分離開來。例如,從數(shù)據(jù)庫中獲取數(shù)據(jù)或者計算貿(mào)易耗費(fèi)。模板引擎解決了兩個主要問題:一是如何實(shí)現(xiàn)這種分離;二是如何從 HTML 中分離“復(fù)雜”的 PHP 代碼,這從理論上使得沒有 PHP 經(jīng)驗的 HTML 設(shè)計者能夠不看任何 PHP 代碼的條件下修改站點(diǎn)的外觀。然而,模板系統(tǒng)也引入了一些復(fù)雜性。首先,現(xiàn)在有一個從多個文件得來的“頁面” 。典型的,可能有一個主 PHP 頁負(fù)責(zé)業(yè)務(wù)邏輯,一個外面的“布局”模板把整個站點(diǎn)的整體布局進(jìn)行渲染,一個內(nèi)部的內(nèi)容特定的模板,一個數(shù)據(jù)庫抽象層,以及模板引擎本身(這些可能是也可能不是由多個文件組成)。第 4 章 系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)25也有可能,一些人僅僅簡單地在每個 PHP 頁面的首尾處包含“頭部”和“尾部”文件。這產(chǎn)生的單個頁面的文件數(shù)量是很可觀的。然而,因為 PHP 解析器非??欤玫降奈募?shù)量可能不是那么重要,除非站點(diǎn)流量很大。模板系統(tǒng)引入了另外一個處理的層次。模板文件不僅僅是必須被包含,他們還必須被解析( 取決于模板系統(tǒng),這個行為有很多種方式來完成,使用正則表達(dá)式,字符串替換,編譯,詞法分析,等等)。這就是為什么對模板進(jìn)行測速變得流行起來:因為模板引擎使用各種方法來解析數(shù)據(jù),它們中的一些比另外一些要快。而且,一些模板引擎提供了比其他引擎更加豐富的功能。簡單地說,模板引擎利用了用 C 寫的腳本語言另外一個偽腳本語言(無論模板引擎支持何種標(biāo)簽)(PHP)。在這些嵌入的腳本語言中, 。某些提供了簡單的變量改寫和循環(huán)。另外一些則提供了條件和嵌套循環(huán)。而其他的,例如 smarty 提供了一個 PHP 的比較大的子集的接口,以及一個緩沖層。Smarty 的目標(biāo)是“把業(yè)務(wù)邏輯從表現(xiàn)中分離出來”而不是“PHP 代碼和 HTML 代碼的分離” 。這看上去區(qū)別不大,但是它正是要點(diǎn)所在。任何模板引擎的最終目標(biāo)不應(yīng)該是從HTML 移除所有的邏輯。它應(yīng)該是把表現(xiàn)邏輯從業(yè)務(wù)邏輯中分離出來。 模板引擎設(shè)計方案 系統(tǒng)模板引擎選擇采用使用 XML 標(biāo)簽庫技術(shù)的編譯型模板引擎,支持兩種類型的模板標(biāo)簽,使用動態(tài)編譯和緩存技術(shù),同時支持自定義標(biāo)簽庫。模板引擎一般分為解釋型模板引擎和編譯型模板引擎。解釋型模板引擎每次將模板內(nèi)容讀入內(nèi)存,并通過正則等方式分析字符串后對預(yù)置的標(biāo)簽進(jìn)行替換,每次加載模板都需要重復(fù)這個過程,例如 tinybutstrong 即屬于此類型。而編譯型模板引擎是在第一次執(zhí)行模板文件的時候進(jìn)行一次編譯(相當(dāng)于一次解釋分析過程) ,然后生成一個編譯后的緩存文件,下次執(zhí)行的時候就可以直接執(zhí)行緩存文件,無需再次編譯。所以,在速度上面,編譯型模板引擎在第一次運(yùn)行模板的時候速度會比解釋性模板引擎略微緩慢,是因為有嚴(yán)格的編譯(包括生成緩存文件)過程,這個過程根據(jù)模板引擎的復(fù)雜程度和模板頁面標(biāo)簽多少速度有所不同,而當(dāng)?shù)诙螆?zhí)行的時候,因為最耗時的過程已經(jīng)跳過了,編譯型模板引擎的優(yōu)勢就體現(xiàn)出來了。目前大多數(shù)的模板引擎都采用編譯型,但是,是否為編譯型和模板功能并沒有直接關(guān)系,tinybutstrong 雖然是解釋型但是功能也相當(dāng)強(qiáng)大。本系統(tǒng)也采用編譯型模板引擎的設(shè)計,具備動態(tài)生成緩存文件的能力,無論是模板文件修改或者是緩存文件被刪除,系統(tǒng)都會重新生成緩存文件。同時可以設(shè)置模板緩存的有效時間,如每隔 10 分鐘重新編譯模板文件。并且在編譯第 4 章 系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)26模板文件的過程中,如果發(fā)現(xiàn)存在很多相同的標(biāo)簽,系統(tǒng)并不會重復(fù)解析,而是讀取解析緩存。因此,無論在解析還是執(zhí)行上面,效率都是比較高的。模板引擎的運(yùn)作過程如圖 所示:圖 模板引擎運(yùn)作過程模板引擎的一個重要因素是模板標(biāo)簽的功能。Smarty 模板引擎以功能以強(qiáng)大而著稱,標(biāo)簽的易用性和完善性也是模板引擎的關(guān)鍵因素之一,最基本的功能包括注釋、變量輸出、條件控制、包含文件,而這些功能的體現(xiàn)都是借助于一系列的模板標(biāo)簽。這一部分是設(shè)計模板引擎的關(guān)鍵也是工作量比較大的地方。目前見到的模板引擎標(biāo)簽大致分為特定標(biāo)簽和 XML 標(biāo)簽兩種類型。特定標(biāo)簽通常是比較常見的類型,由模板引擎自身定義的一系列標(biāo)簽,用來滿足變量輸出和控制的需要,通常具有私有化規(guī)則,標(biāo)簽類型各不相同,在本系統(tǒng)中,我們稱之為普通模板標(biāo)簽。例如,Smarty 中就是使用 {$varname} 來輸出 PHP 的$varname 變量,TinyButStrong 則采用[]的方式輸出變量,我也曾看到過其它形式的輸出標(biāo)簽,例如{:=varname} ,當(dāng)然有些模板引擎是設(shè)計為可以定義起始標(biāo)簽的。本系統(tǒng)的普通模板標(biāo)簽以“{”和“} ”作為開始和結(jié)束標(biāo)識,和 Smarty 等大多數(shù)模板引擎是一致的,也支持起始標(biāo)簽定義,例如可以在項目配置文件中配置成采用 [$varname] 來輸出模板變量。本系統(tǒng)的變量輸出也具有 Smarty 的變量組合調(diào)節(jié)器的功能,例如{$articleTitle|upper|spacify} 。其中調(diào)節(jié)器方法可以是系統(tǒng)函數(shù)或者自定義函數(shù),還可以設(shè)置禁止在模板中使用的函數(shù)。也可以支持輸出多級對象屬性或者數(shù)組的輸出,例如:{$} {$array[ ‘name’][‘sub’]}。除了輸出模板變量之外,模板引擎通常都會提供一個特殊的標(biāo)簽輸出方式用來輸出一些常量和系統(tǒng)變量,在本系統(tǒng)中采用 $[變量名] 來輸出一些無需賦值的特殊或者內(nèi)建變量,和 Smarty 的$smarty 保留變量類似。和其他的模板引擎不同,本系統(tǒng)的特定標(biāo)簽僅僅是用于變量輸出功能,而第 4 章 系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)27把控制功能和復(fù)雜的標(biāo)簽功能放到 XML 模板標(biāo)簽里面。 XML 模板引擎在 Java領(lǐng)域里面是非常常見的,在 PHP 模板引擎領(lǐng)域似乎并不多見,本系統(tǒng)在實(shí)現(xiàn)自身的特定標(biāo)簽外,有效地借鑒了 Java 的標(biāo)簽庫技術(shù),以實(shí)現(xiàn) XML 模板標(biāo)簽支持,并且允許自定義標(biāo)簽庫。兩種標(biāo)簽方式的結(jié)合使用,可以讓模板定義更加靈活?;谀承┘嫒菪钥紤],通常在模板文件中可以直接插入 php 代碼,用來完成模板標(biāo)簽所無法完成或者比較困難的功能。這種方式與標(biāo)簽的互補(bǔ)可以滿足絕大多數(shù)的模板需要。本系統(tǒng)的模板引擎也設(shè)計成支持在模板中直接寫 php 代碼。 模板引擎的使用與著名的模板引擎 Smarty 的用法類似,本系統(tǒng)模板引擎的使用只需直接創(chuàng)建 ThinkTemplate 對象后進(jìn)行模板變量賦值,再進(jìn)行渲染輸出,之后定義模板標(biāo)簽和輸出變量。$tpl = new ThinkTemplate()。$tpl assign(‘vo’,$vo)。$tpl display(‘’)。 為方便用戶使用,在本系統(tǒng)中作了相應(yīng)簡化,無需創(chuàng)建 ThinkTemplate 對象,Action 類會自動創(chuàng)建,只需要賦值并輸出即可。$thisassign(‘vo’,$vo)?!?thisdisplay()。 Smarty 在渲染模板的時候必須指定模板文件名,在本系統(tǒng)中如果不指定模板文件名,會按照系統(tǒng)設(shè)置的規(guī)則進(jìn)行自動定位,例如,當(dāng)前模塊的某個操作可以定位成為以模塊名稱為目錄。下面的一個操作命名的模板文件。在進(jìn)行模板變量賦值的時候,可以對任何變量進(jìn)行賦值,由模板標(biāo)簽來決定輸出何種類型的。并且,賦值具有智能化和批量賦值,默認(rèn)情況下第一個參數(shù)是要在模板中輸出的變量名稱,而第二個參數(shù)是變量的值,但是如果沒有指定第二個參數(shù),那么會對第一個參數(shù)進(jìn)行判斷,如果是索引數(shù)組,則自動進(jìn)行批量賦值。例如:$tmpl = array()?!    ?tmpl[‘var1’] = ‘value1’。 $tmpl[‘var2’] = ‘value2’?!?thisassign($tmpl)?! ?thisdisplay()。 代碼會自動賦值兩個模板變量 var1 和 var2,用來在模板文件中輸出。作為安全性考慮,沒有賦值的模板變量是不能用于輸出的,但是有些特殊的模板標(biāo)第 4 章 系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)28簽可以輸出系統(tǒng)的常量和系統(tǒng)變量例外。Smarty 采用插件方法來實(shí)現(xiàn)擴(kuò)展,本系統(tǒng)采用標(biāo)簽庫技術(shù),比 Smarty 提供更為強(qiáng)大的定制功能,和 Java 的 TagLibs 一樣可以支持自定義標(biāo)簽庫和標(biāo)簽,每個 XML 標(biāo)簽都有獨(dú)立的解析方法,所以可以根據(jù)標(biāo)簽庫的定義規(guī)則來增加和修改標(biāo)簽解析規(guī)則。在 ThinkTemplate 中標(biāo)簽庫的體現(xiàn)是采用 XML 命名空間的方式,如:cx:volist id=”list”/cx:volist每個命名空間都有一個對應(yīng)的標(biāo)簽庫 XML 定義文件,并且還包含有一個用于解析該標(biāo)簽庫的類文件。系統(tǒng)默認(rèn)對 cx 標(biāo)簽庫進(jìn)行支持,所以在定義 cx標(biāo)簽庫的標(biāo)簽時候,可以省略 XML 的命名空間前綴。當(dāng)系統(tǒng)中存在很多的標(biāo)簽庫的時候,每次編譯都會加載所有的標(biāo)簽庫解析文件,這樣會造成一種浪費(fèi),因為很多情況,我們可能只是使用其中的一個或者二個標(biāo)簽庫。所以,我們還必須在模板頁面實(shí)現(xiàn)標(biāo)簽庫引入功能,來告訴模板引擎當(dāng)前模板頁面需要哪些標(biāo)簽庫的支持,從而加載需要的解析類。在本系統(tǒng)中,使用 tagLib 標(biāo)簽來實(shí)現(xiàn)這一功能,如:tagLib name=html,cx /表示導(dǎo)入 html 和 cx 兩個標(biāo)簽庫的支持。如果沒有定義,那么默認(rèn)只是加載 cx 標(biāo)簽庫。利用標(biāo)簽庫的特性,我們可以非常方便地擴(kuò)展自己需要的標(biāo)簽,ThinkTemplate 正是采用這種機(jī)制來內(nèi)置集成了一些常用的 HTML 組件標(biāo)簽,如:html:list id=checkList name=user style=list checkbox=true action=true datasource=list show=id:編號|10%,title:標(biāo)題:edit,cTime|toDate=39。Ymd his39。:評論日期,status|getStatus:狀態(tài) actionlist=forbid|resume:禁用|恢復(fù),edit:編輯 / 使用上面的自定義 XML 標(biāo)簽定義了一個 DataGrid 組件,省去了復(fù)雜的Html 代碼,在模板第一次執(zhí)行的時候,模板引擎會把上面的組件標(biāo)簽解析成PHP 和 Html 結(jié)合的代碼,生成緩存文件。在模板文件中,變量輸出代碼格式如下:{$varname|function1|function2=arg1,arg2, } //常規(guī)輸出方式{$webTitle|md5| strtoupper | substr=0,3}{$info[39。name39。] } //輸出數(shù)組變量
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1