Drupal的鉤子(Hooks)

       Drupal怎麼就知道什麼時候調用一個模塊來處理特定的請求?

      這個是通過Drupal的hook機制完成的,下面解釋一下hook的工作機制。

      當Drupal處理來自用戶的一個請求,它通過一系列步驟進行。比如:Drupal核心首先引導這個應用,確定關鍵變量和經常使用的功能。接下來,它加載關鍵庫、主題和模塊。接下來,它繼續處理請求,將請求的URI映射到正確的處理代碼,等等。然後它爲數據應用一個主題,爲輸出來格式化信息。最後它返回輸出結果到用戶的瀏覽器。

      在循序漸進的預定義時刻,Drupal進行勾取。這意味着什麼呢?簡短的說,它意味着Drupal測試部分或全部當前啓用的模塊,尋找遵循特定的預定義模塊的函數。一些已經連接這個進程到“回調”的模式經常被用在事件處理模塊中。Drupal和這個是類似的,但是更加充滿活力。

      比如說,當它正在創建一個頁面瀏覽內容時,Drupal可能再模塊中尋找叫做<modulename>_block()和<modulename>_view()的函數(在這裏<modulename>被每個Drupal檢測的模塊的名稱代替)。尋找模塊包含的這些函數被叫做實施hook_block()和hook_view()勾取。

      當Drupal找到這些函數,它執行它們,並且利用這些函數返回的數據創建一個響應來發送給用戶。然後Drupal繼續循序漸進的處理請求,或許在它進行過程中執行許多其它的鉤子。

      當所有的步驟完成並且一個響應發送給用戶,Drupal自動清除並且推出。

      模塊可以定義自己的鉤子,這些鉤子又可以被其他模塊使用。這樣一來,hook機制可以擴展到提供複雜的定製行爲。

      當一個模塊提供匹配一個鉤子的簽名的功能,我們就說那個模塊執行那個鉤子。比如,假設Drupal有一個叫做hook_example()的鉤子。如果我們定義一個叫做 mymodule 並且包含一個叫做 mymodule_example() 函數的模塊,我們就會用到 hook_example().

 

      Hook對於面向對象程序員的啓示:

      那些對面向對象編程熟悉的程序員可能發現在面嚮對象語言中考慮將鉤子作爲一個類似於接口方法或者抽象方法的機制是很有用的。鉤子是Drupal將尋找的函數並在某些情況下需要出現在你的模塊中。就像接口方式,一個鉤子的函數簽名必須匹配Drupal的預期簽名。而和接口不同的是,模塊開發者可以選擇(在一定程度上)哪個鉤子去實現、哪個鉤子去忽視。Drupal不要求每個定義的鉤子都實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章