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