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 来实现。

 代码如下 复制代码

<?php
/**
* Implements hook_module_implements_alter().
*/
function custommodule_module_implements_alter(&$implementations, $hook) {
if (in_array($hook, array('form_alter'))) {
// Move our hook implementation to the bottom.
$group = $implementations['custommodule'];
unset($implementations['custommodule']);
$implementations['custommodule'] = $group;
}
}
?>

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

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

 代码如下 复制代码

<?php
function your_module_name_install() {
db_update('system')
->fields(array('weight' => your_preferred_weight))
->condition('name', '[your_module_name]', '=')
->execute();
}
?>

你也通过一个代码片段来直接更新数据库。

 代码如下 复制代码

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

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

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

+----------------------------+--------+--------+--------+
| name                       | type   | status | weight |
+----------------------------+--------+--------+--------+
| strongarm                  | module |      1 |  -1000 |
| block                      | module |      1 |     -5 |
| webform                    | module |      1 |     -1 |
| backup_migrate             | module |      1 |      0 |
| colorbox                   | module |      1 |      0 |
| contextual                 | module |      1 |      0 |
| crumbs                     | module |      1 |      0 |
| ctools                     | module |      1 |      0 |
| date                       | module |      1 |      0 |
| date_api                   | module |      1 |      0 |
| date_views                 | module |      1 |      0 |
| entity                     | module |      1 |      0 |
| faq                        | module |      1 |      0 |
| field                      | module |      1 |      0 |
| field_ui                   | module |      1 |      0 |
| file                       | module |      1 |      0 |
| filter                     | module |      1 |      0 |
| image                      | module |      1 |      0 |
| libraries                  | module |      1 |      0 |
| link                       | module |      1 |      0 |
| list                       | module |      1 |      0 |
| locale                     | module |      1 |      0 |
| masquerade                 | module |      1 |      0 |
| menu                       | module |      1 |      0 |
| menu_block                 | module |      1 |      0 |
| node                       | module |      1 |      0 |
| options                    | module |      1 |      0 |
| path                       | module |      1 |      0 |
| print                      | module |      1 |      0 |
| search                     | module |      1 |      0 |
| shortcut                   | module |      1 |      0 |
| taxonomy                   | module |      1 |      0 |
| taxonomy_manager           | module |      1 |      0 |
| text                       | module |      1 |      0 |
| token                      | module |      1 |      0 |
| translation                | module |      1 |      0 |
| transliteration            | module |      1 |      0 |
| update                     | module |      1 |      0 |
| user                       | module |      1 |      0 |
| views_ui                   | module |      1 |      0 |
| wysiwyg                    | module |      1 |      0 |
| dblog                      | module |      1 |      0 |
| domain                     | module |      1 |      0 |
| mollom                     | module |      1 |      0 |
| overlay                    | module |      1 |      0 |
| system                     | module |      1 |      0 |
| field_group                | module |      1 |      1 |
| pathauto                   | module |      1 |      1 |
| i18n                       | module |      1 |     10 |
| i18n_string                | module |      1 |     10 |
| views                      | module |      1 |     10 |
| rules                      | module |      1 |     20 |
| admin_menu                 | module |      1 |    100 |
+----------------------------+--------+--------+--------+

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

时间: 2024-10-31 19:48:10

Drupal Hooks Alter的先后顺序的相关文章

使用 Drupal Form Hooks 进行表单自定义修改

Drupal使用或者开发过程中最常用到的Hooks(钩子)莫过于hook_form_alter,你所常见的Drupal网站中的内容创建,联系表单,Menu菜单,用户注册等等都会用到表单的钩子. Drupal Form Hooks hook_form_alter 中的hook直接替换为你的模块名称.  代码如下 复制代码 /** * Implements hook_form_alter(). */ function custom_form_alter(&$form, &$form_state

创建表时考虑列的顺序

创建 创建表时考虑列的顺序创建一个表时表中列的顺序在某些程度上对性能会有一定的影响.(表中的列有数据)Oracle对行数据的存储结构ROW HEADER(行头)和COLUMN DATA(列数据).ROW HEADER存储的信息是一个FLAG BYTE,一个LOCK BYTE 和COLUMN COUNT.COLUMN DATA包含COLUMN LENGTH和COLUMN DATA 关于这些我们可以DUMP个表做一下测试create test as select * from dba_objects

MySQL 4.1.0 中文参考手册 --- 6.5 数据定义: CREATE、DROP、ALTER

mysql|参考|参考手册|数据|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.5 数据定义: CREATE.DROP.ALTER6.5.1 CREATE DATABASE 句法 CREATE DATABASE [IF NOT EXISTS] db_name CREATE DATABASE 以给定名字创建一个数据库.允许的数据库名规则在章节 6.1.2 数据库.表.索引.列

如何更改表中的Mysql列顺序

首先,请考虑是否的确需要更改表中的列顺序.SQL的核心要点是从数据存储格式获取应用.总应指定检索数据的顺序.在下面的第1条语句中,以col_name1.col_name2.col_name3顺序返回列:在第2条语句中,以col_name1.col_name3.col_name2顺序返回列: MySQL> SELECT col_name1, col_name2, col_name3 FROM tbl_name; mysql> SELECT col_name1, col_name3, col_na

Oracle实例恢复的顺序

通过alert仔细观查,发现实例恢复的顺序是: 1.前滚 2.open db 3.rollback(注意:SMON: Parallel transaction recovery tried 在Completed: ALTER DATABASE OPEN)之后 SMON: enabling cache recovery Mon Jun 13 16:50:50 2011 Successfully onlined Undo Tablespace 1. Mon Jun 13 16:50:50 2011

《Drupal实战》——3.3 使用Views创建列表

3.3 使用Views创建列表 我们接着讲解Views的设置,首先做一个简单的实例. 3.3.1 添加内容类型"站内公告" 添加一个内容类型"站内公告",属性配置如表3-1所示. 为该内容类型设置Pathauto的模式news/[node:nid],并且我们在这里将节点类型的默认模式修改为了[node:content-type:machine-name]/[node:nid]. 准备10篇测试数据,先创建一篇"站内公告站内公告站内公告站内公告1"

《Drupal实战》——1.6 实现页脚区域

1.6 实现页脚区域 我们有了第二篇内容,离我们的目标又近了一步,只要我们坚持走,目标总会达到的. 如果给你一个任务,你是先从容易的着手呢,还是上来就要啃硬骨头?做网站就是这样一个任务.我喜欢把问题逐步分解开发,先解决容易的,再逐个解决困难的. 我们去新华文轩.当当网.灿然书屋网站上看看,发现它们的下面都有一个帮助导航,如图1-56所示. 有些网站还有页脚导航链接,如图1-57所示. 另外还有版权信息,如图1-58所示. 以上是当当网的截图,只是将其作为一个例子.我们在Drupal里面怎么来实现

Drupal 7.28, Nginx 1.6, PostgreSQL 9.3.4, PHP 5.4, fpm install on CentOS 6.x x64

安装Drupal的系统需求, 需要web server, database, php. https://www.drupal.org/requirements 本文以Drupal 7.28, Nginx 1.6, PostgrSQL 9.3.4, PHP 5.4为例写一下Drupal的部署. 不涉及任何优化, 例如使用fpm, 用unix sock连接效率会更高. 安装参考 https://www.drupal.org/documentation/install 一. nginx 安装, 本文选

mysql 命令修改表结构ALTER TABLE 句法

ALTER TABLE 句法 ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] alter_specification:         ADD [COLUMN] create_definition [FIRST | AFTER column_name ]   or    ADD [COLUMN] (create_definition, create_definition,...)   or    ADD INDEX [ind