文件布局(File Layout)
譯者:葛紅儒 Eskalate科技公司
理解默認(rèn)Drupal安裝的目錄結(jié)構(gòu),能夠幫助你調(diào)試你的站點(diǎn),并教你一些重要的最佳實(shí)踐,比如下載的模塊和主題的放置位置,如何擁有不同的Drupal輪廓(profile)。一個(gè)Drupal默認(rèn)安裝的目錄結(jié)構(gòu)如圖1-4所示。
文件夾目錄中的每一元素的詳解如下:
files:Drupal默認(rèn)不帶有這個(gè)文件夾,但是如果你想使用一個(gè)定制的logo,啟用用戶頭像,或者在你的站點(diǎn)上上傳其它媒體文件時(shí),你需要這個(gè)文件夾。運(yùn)行Drupal的web服務(wù)器需要具有對(duì)這個(gè)子目錄進(jìn)行讀和寫的權(quán)限。
includes :包含了Drupal常用的函數(shù)庫。
misc:用來存儲(chǔ)JavaScript,和在Drupal安裝中備用的各種圖標(biāo)和圖片。
modules:包含所有的核心模塊,其中每個(gè)模塊位于它自己的文件夾下。最好不要亂動(dòng)這個(gè)文件夾下面的任何東西(你添加的其他模塊放到sites目錄下)
profiles:包含一個(gè)站點(diǎn)的不同安裝輪廓(profile)。如果在這個(gè)子目錄下面,除了默認(rèn)的輪廓(profile)以外,還有其它的輪廓(profiles),那么在你第一個(gè)安裝Drupal站點(diǎn)時(shí)Drupal將向你詢問想要安裝哪一個(gè)輪廓(profile)。安裝profile的主要目的是自動(dòng)的啟用核心的或者第3方的模塊。比如一個(gè)電子商務(wù)輪廓(profile)的示例,它將自動(dòng)把Drupal作為一個(gè)電子商務(wù)平臺(tái)進(jìn)行安裝。
scripts:包含了許多腳本,這些腳本可用于檢查語法,清潔代碼,使用cron處理特定情況等等。在Drupal的請(qǐng)求生命周期中用不到它;里面有一些shell和Perl的有用腳本。
sites:包含了你對(duì)Drupal進(jìn)行的修改,包括設(shè)置、模塊、主題等形式(參看圖1-5)。你從第3方模塊庫中下載的模塊,或者你自己編寫的模塊,都放在sites/all/modules下面。這使得你對(duì)Drupal所進(jìn)行的任何修改都保存在單個(gè)文件夾里。在目錄sites下面有一個(gè)名為default的子目錄用來放置你Drupal站點(diǎn)的默認(rèn)配置文件--- settings.php。通??截?/span>default目錄并使用你站點(diǎn)的URL對(duì)其重命名,這樣你的設(shè)置文件就位于sites/www.example.com/settings.php.
themes:包含了Drupal的模板引擎和默認(rèn)主題。
圖1-4 Drupal安裝的默認(rèn)目錄結(jié)構(gòu)
圖1-5 sites文件夾用來存儲(chǔ)你的所有Drupal修改
對(duì)一個(gè)請(qǐng)求提供服務(wù)(Serving a Request)
當(dāng)Drupal收到一個(gè)請(qǐng)求時(shí)都發(fā)生了什么,如果對(duì)此有一個(gè)概念上的框架,這對(duì)以后很有幫助,所以本部分將為這一框架提供一個(gè)快照。如果你自己也想追蹤它的話,使用一個(gè)好的調(diào)試器,從index.php開始,Drupal的大多數(shù)請(qǐng)求都從這里開始。對(duì)于展示一個(gè)簡(jiǎn)單web頁面,這里所列的順序看起來有些復(fù)雜,但這是靈活性所必需的。
Web服務(wù)器的角色
Drupal運(yùn)行在一個(gè)web服務(wù)器上,通常是Apache上。如果web服務(wù)器識(shí)別Drupal的.htaccess文件,那么將初始化一些PHP設(shè)置,并啟用簡(jiǎn)潔(clean)URL。
注意 Drupal支持簡(jiǎn)潔(clean)URL,也就是像http://example.com/foo/bar的一樣的URL。Drupal的.htaccess文件中的mod_rewrite規(guī)則將這一路徑轉(zhuǎn)換為index.php?q=foo/bar。所以在內(nèi)部,無論是否啟用了簡(jiǎn)潔(clean)URL,Drupal總是使用相同的路徑(存儲(chǔ)在URL查詢參數(shù)q中)。在這里,內(nèi)部路徑應(yīng)該為foo/bar。內(nèi)部路徑也被稱為Drupal路徑。
在備選的web服務(wù)器中,比如微軟的IIS,可以使用一個(gè)ISAPI模塊比如ISAPI_Rewrite來實(shí)現(xiàn)簡(jiǎn)潔URL。
引導(dǎo)指令流程(The Bootstrap Process)
對(duì)于每個(gè)請(qǐng)求,Drupal通過一系列的引導(dǎo)指令階段來引導(dǎo)它自己。這些階段在bootstrap.inc中定義,接下來的部分描述了處理流程。
配置(Configuration)
在這一階段將填充Drupal的內(nèi)部配置數(shù)組,并建立站點(diǎn)的基礎(chǔ)URL($base_url)。通過include_once()來解析settings.php文件,任何已被覆蓋的變量將被應(yīng)用。
早期頁面緩存(Early Page Cache)
當(dāng)在需要更高的性能水平時(shí),甚至在試圖建立數(shù)據(jù)庫連接之前可能就需要要調(diào)用緩存系統(tǒng)了。早期頁面緩存階段讓你(使用include())包含一個(gè)含有名為page_cache_fastpath()的函數(shù)的PHP文件,該函數(shù)接收并返回內(nèi)容給瀏覽器。通過將page_cache_fastpath變量設(shè)置為TRUE,就可以啟用早期頁面緩存階段了,而包含進(jìn)來的文件是通過將cache_inc變量設(shè)置為文件的路徑來定義的。
數(shù)據(jù)庫(Database)
在數(shù)據(jù)庫階段期間,將決定數(shù)據(jù)庫的類型,將建立初始鏈接以供數(shù)據(jù)庫查詢使用。
訪問(Access)
Drupal支持基于一個(gè)主機(jī)名一個(gè)IP地址來禁止主機(jī)(對(duì)站點(diǎn)的訪問)。在訪問階段,將快速的檢查請(qǐng)求是否來自一個(gè)被禁的主機(jī);如果是,那么將拒絕訪問。
會(huì)話(Session)
Drupal利用了PHP內(nèi)置的會(huì)話處理,但是它使用它自己的基于數(shù)據(jù)庫的會(huì)話處理器來覆蓋PHP的一些處理器。在會(huì)話階段,將初始化或者重新構(gòu)建會(huì)話。
后期頁面緩存(Late Page Cache)
在后期頁面緩存階段,Drupal加載足夠的支持代碼來決定是否需要從頁面緩存中提供一個(gè)頁面。這包括,把來自于數(shù)據(jù)庫的設(shè)置合并到在配置階段創(chuàng)建的數(shù)組中,加載或者解析模塊代碼。如果在會(huì)話中顯示請(qǐng)求來自于匿名用戶并且啟用了頁面緩存,那么將從緩存中返回頁面,執(zhí)行到此停止。
路徑(Path)
在路徑階段,將加載處理路徑和路徑別名的(aliasing)的代碼。該階段使得用戶可讀的URL被轉(zhuǎn)化為Drupal路徑,并處理內(nèi)部Drupal路徑的緩存和查詢操作。
完整(Full)
該階段是引導(dǎo)指令的最后一個(gè)階段,它包括加載一個(gè)通用函數(shù)庫,主題支持,和支持回調(diào)映射,文件處理,Unicode,PHP圖片工具集,表單的創(chuàng)建和處理,自動(dòng)排序的表格,和結(jié)果集的分頁。在這里將設(shè)置Drupal定制的的錯(cuò)誤處理器,設(shè)置本地化,并加載所有啟用了的模塊。最后Drupal調(diào)用init鉤子,這樣在對(duì)請(qǐng)求正式開始處理以前,將有機(jī)會(huì)通知相應(yīng)的模塊。
一旦Drupal的整個(gè)引導(dǎo)指令完成了,那么框架中的所有部分現(xiàn)在都可以使用了?,F(xiàn)在是時(shí)候獲得瀏覽器的請(qǐng)求并將它委托給一個(gè)處理它的函數(shù)。在URLs和處理它們的函數(shù)之間的映射,是使用一個(gè)回調(diào)登記來完成的,這個(gè)回調(diào)登記負(fù)責(zé)URL映射和訪問控制。模塊使用菜單鉤子來注冊(cè)它們的回調(diào)函數(shù)(更多信息,參看第4章)
當(dāng)Drupal為瀏覽器請(qǐng)求的URL找到一個(gè)存在的回調(diào)函數(shù),并且用戶有權(quán)訪問該回調(diào)函數(shù),那么控制權(quán)將轉(zhuǎn)移給回調(diào)函數(shù)。
處理一個(gè)請(qǐng)求(Processing a Request)
回調(diào)函數(shù)做了流程要求做的事情,并收集滿足請(qǐng)求所需要的數(shù)據(jù)。例如,收到一個(gè)對(duì)內(nèi)容的請(qǐng)求比如http://example.com/q=node/3,URL將被映射到node.module里面的函數(shù)node_page_view()。進(jìn)一步的處理將從數(shù)據(jù)庫中取回該節(jié)點(diǎn)的數(shù)據(jù)并將它放到一個(gè)數(shù)組中。接著,就到了主題化的時(shí)候了。
主體化數(shù)據(jù)(Theming the Data)
主體化涉及到將已被取回,操作或者創(chuàng)建的數(shù)據(jù)轉(zhuǎn)化為HTML。Drupal將使用管理員選用的主題來為網(wǎng)頁提供一個(gè)合適的外觀,并將生成的HTML移交給web瀏覽器。
總結(jié)
讀完本章后,你應(yīng)該能大致理解Drupal的工作原理,并對(duì)當(dāng)Drupal為一個(gè)請(qǐng)求服務(wù)時(shí)都發(fā)生了什么有個(gè)概念。組成網(wǎng)頁服務(wù)處理流程的個(gè)部分將在后面章節(jié)中詳細(xì)介紹。
發(fā)表于 @ 2008年03月24日 18:27:00|評(píng)論(0)|編輯
聯(lián)系客服