当前位置:首页 > CMS教程 > 其它CMS > 列表

Drupal Hooks Alter的先后顺序

发布:smiling 来源: PHP粉丝网  添加日期:2014-12-05 14:58:52 浏览: 评论:0 

下面来看一篇关于Drupal Hooks Alter的先后顺序文章,希望文章对你能带来帮助.

Drupal 系统的精髓在于Hooks(钩子)的设计,当系统存在多个模块时,那么模块alter hooks的先后顺序时怎样的呢?带着这个问题,我们找到了正确的答案,就是Drupal module weight 直接影响了hooks在module的执行顺序,默认的情况,每一个module的weight为0,那么order的方法就是按照module的name,这样极易受模块的名称所影响先后顺序。

更新模块Weight:在Drupal 7,模块的weight可以被灵活的修改,通过 hook_module_implements_alter() hook 来实现,代码如下:

  1. <?php 
  2. /** 
  3. * Implements hook_module_implements_alter(). 
  4. */ 
  5. function custommodule_module_implements_alter(&$implementations$hook) { 
  6. if (in_array($hookarray('form_alter'))) { 
  7. // Move our hook implementation to the bottom. 
  8. $group = $implementations['custommodule']; 
  9. unset($implementations['custommodule']); 
  10. $implementations['custommodule'] = $group
  11. }//开源软件:phpfensi.com 
  12. ?> 

另外一个兼容Drupal所有版本的方法时,hook_install 在 “custom_module.install” 文件中.

注意:使用hook_install的时候需要在后台删除模块,再重新启用模块才会生效,代码如下:

  1. <?php 
  2. function your_module_name_install() { 
  3. db_update('system'
  4. ->fields(array('weight' => your_preferred_weight)) 
  5. ->condition('name''[your_module_name]''='
  6. ->execute(); 
  7. ?> 

你也通过一个代码片段来直接更新数据库,代码如下:

  1. <?php 
  2. db_query("UPDATE {system} SET weight = [your_preferred_weight] WHERE type = 'module' AND name = '[your_module_name]'"); 
  3. ?> 

也可以通过第三方模块来修改,可以使用 Utility 模块和Modules weight模块.

Drupal 系统模块列表(包含name和weight):

  1. +----------------------------+--------+--------+--------+ 
  2. | name                       | type   | status | weight | 
  3. +----------------------------+--------+--------+--------+ 
  4. | strongarm                  | module |      1 |  -1000 | 
  5. | block                      | module |      1 |     -5 | 
  6. | webform                    | module |      1 |     -1 | 
  7. | backup_migrate             | module |      1 |      0 | 
  8. | colorbox                   | module |      1 |      0 | 
  9. | contextual                 | module |      1 |      0 | 
  10. | crumbs                     | module |      1 |      0 | 
  11. | ctools                     | module |      1 |      0 | 
  12. date                       | module |      1 |      0 | 
  13. | date_api                   | module |      1 |      0 | 
  14. | date_views                 | module |      1 |      0 | 
  15. | entity                     | module |      1 |      0 | 
  16. | faq                        | module |      1 |      0 | 
  17. | field                      | module |      1 |      0 | 
  18. | field_ui                   | module |      1 |      0 | 
  19. | file                       | module |      1 |      0 | 
  20. | filter                     | module |      1 |      0 | 
  21. | image                      | module |      1 |      0 | 
  22. | libraries                  | module |      1 |      0 | 
  23. | link                       | module |      1 |      0 | 
  24. | list                       | module |      1 |      0 | 
  25. | locale                     | module |      1 |      0 | 
  26. | masquerade                 | module |      1 |      0 | 
  27. | menu                       | module |      1 |      0 | 
  28. | menu_block                 | module |      1 |      0 | 
  29. | node                       | module |      1 |      0 | 
  30. | options                    | module |      1 |      0 | 
  31. | path                       | module |      1 |      0 | 
  32. | print                      | module |      1 |      0 | 
  33. | search                     | module |      1 |      0 | 
  34. | shortcut                   | module |      1 |      0 | 
  35. | taxonomy                   | module |      1 |      0 | 
  36. | taxonomy_manager           | module |      1 |      0 | 
  37. | text                       | module |      1 |      0 | 
  38. | token                      | module |      1 |      0 | 
  39. | translation                | module |      1 |      0 | 
  40. | transliteration            | module |      1 |      0 | 
  41. | update                     | module |      1 |      0 | 
  42. | user                       | module |      1 |      0 | 
  43. | views_ui                   | module |      1 |      0 | 
  44. | wysiwyg                    | module |      1 |      0 | 
  45. | dblog                      | module |      1 |      0 | 
  46. | domain                     | module |      1 |      0 | 
  47. | mollom                     | module |      1 |      0 | 
  48. | overlay                    | module |      1 |      0 | 
  49. | system                     | module |      1 |      0 | 
  50. | field_group                | module |      1 |      1 | 
  51. | pathauto                   | module |      1 |      1 | 
  52. | i18n                       | module |      1 |     10 | 
  53. | i18n_string                | module |      1 |     10 | 
  54. | views                      | module |      1 |     10 | 
  55. | rules                      | module |      1 |     20 | 
  56. | admin_menu                 | module |      1 |    100 | 
  57. +----------------------------+--------+--------+--------+ 

你可以通过这个页面找到Drupal中所有核心的Hooks,它可能会对你非常有用.

Tags: Drupal Hooks Alter

分享到: