Drupal可以讓第三方模塊創建自己的鉤子,在通常的實踐中,有兩種類型的鉤子你可能想要創建,一種是內容修改類的鉤子,一種是攔截類的鉤子.
Drupal的鉤子系統允許和模塊交互并改變其他模塊的邏輯,甚至是改變Drupal核心邏輯,這是一個非常簡單的系統,甚至可以讓第三方模塊創建自己的鉤子,在通常的實踐中,有兩種類型的鉤子你可能想要創建,一種是內容修改類的鉤子,一種是攔截類的鉤子,修改類的鉤子提供了一個標準的方法來修改某個特定對象或變量的內容,典型的是使用 drupal_alter()函數,攔截類的鉤子可以讓第三方模塊在模塊執行過程中根據條件做出一些動作.
例1:簡單調用,代碼如下:
- <?php
- // will call all modules implementing hook_hook_name
- module_invoke_all('hook_name');
- ?>
例2:聚合結果,代碼如下:
- <?php
- $result = array();
- foreach (module_implements('hook_name') as $module) {
- // will call all modules implementing hook_hook_name and
- // push the results onto the $result array
- $result[] = module_invoke($module, 'hook_name');
- } //開源軟件:Vevb.com
- ?>
例3:使用 drupal_alter() 改變內容,代碼如下:
- <?php
- $data = array(
- 'key1' => 'value1',
- 'key2' => 'value2',
- );
- // will call all modules implementing hook_my_data_alter
- drupal_alter('my_data', $data);
- ?>
例4:引用傳參,不能使用 module_invoke,代碼如下:
- <?php
- // @see user_module_invoke()
- foreach (module_implements('hook_name') as $module) {
- $function = $module . '_hook_name';
- // will call all modules implementing hook_hook_name
- // and can pass each argument as reference determined
- // by the function declaration
- $function($arg1, $arg2);
- }
- ?>
新聞熱點
疑難解答