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');
}
?>

例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);
}
?>
时间: 2024-10-14 10:24:05

Drupal模块开发之创建自己的钩子的相关文章

Drupal8模块开发之路由、控制器和菜单链接教程

其中最大的变化是引入了Symfony框架,这对开发人员来说,会产生两个重大影响 首先,这可能将会大大增加Drupal开发者的数量,比如那些曾经自认为是大师,不屑于面向过程开发的传统"高端程序猿",现在Drupal8,也是面向对像了,也用了新框架,他们已经没有理由拒绝加入drupal开发者的行列 第二,新的框架内核变化,会给现在那些没有多少PHP现代框架开发经验的人许多恐惧,他们会担心自己不能适应这种开发方式的巨大转变,但是没关系,我们都需要重新学习,学习Symfony框架,还有充满希望

Drupal8模块开发之区块和表单教程

上一教程:Drupal8模块开发之路由.控制器和菜单链接教程 在本教程中,我们将学习进一步的开发,我们可以在这个库 (link is external)里找到我们需要的沙盒模块代码示例,里面两个重要的新功能:区块和表单. 为此,我们将创建一个自定义区块来返回一些可配置的文本,在那之后,我们将创建 一个简单的表单来打印输出用户提交到的数据到屏幕上.  不知道怎么下载这个库的同学看这里: Drupal8 区块 在Drupal8里,有一个很酷的新变化时,以往的Block(区块) API 已经转换成了插

Drupal 8 开发工具 Drupal Console 介绍

相信众多开发者已经开始drupal8的探索--下载.安装drupal 8的beta版本进行尝试.对于那些没有开始尝试drupal 8的开发者们,作者可以很明确的告诉大家,我们将会有众多新概念去了解.理解.使用.当我们尝试写一个drupal 8模块的时候,我们也需要知道大量的代码知识.这也给我们造成了新的挑战,那就是层出不穷的报错. 幸好,新的drupal 8开发工具已经诞生并投入广泛的测试与使用中. 它就是drupalconsole,我们今天的主角. 相比于之前的drush,drupalcons

DNN模块开发系列文章(2)——建立模块开发项目

建立模块开发项目 开发DNN模块可以通过两种开发环境来进行: 一.在整个DNN解决方案下建立模块开发项目. 优点:可以方便的引用DNN组件,参考其他模块的实现方式,可以随时通过"转到定义"的操作查看DNN中该方法的定义,调试起来也比较容易. 缺点:速度慢.打开项目和编译项目都要费大量时间. 二.用单独的方式建立模块解决方案. 优缺点正好和第一种相对,不过在实际开发中速度是关键,下面我就单独讲讲我在以单独方式建立模块开发解决方案中的一些心得. 建立单独的解决方案进行模块开发需要解决三个问

DNN模块开发系列文章(1)——分析设计

序 DNN做为一个优秀的门户网站框架,可以通过安装各种功能模块的方式扩充应用.正是通过这一优秀的功能,DNN框架可以实现:文章管理,图片管理,文档管理,论坛,博客,商店,调查,FAQ等等各种各样满足实际需求的模块.通过这个强大的框架支持,我们可以很容易的实现这些模块.比如:权限控制,多语言支持,多数据库支持,搜索,聚合,皮肤等功能,我都可以很容易的通过框架实现.如果是在平时,光是实现这些基础功能我们就需要花去大量的时间.现在有了DNN框架的支持,我们就可以集中精力投入到模块的业务逻辑和流程上,从

初探PHPcms模块开发介绍

 由于工作关系,只能暂时放弃对mongodb的研究了 .开始研究PHPcms . 目前为止我已经基本完成了模块的开发.趁着周末来这里做个总结.我发现phpcms写的还不错,不过文档什么的确实不多. 不说废话了.对于phpcms的模块开发.首先要了解模块的目录结构. 我们可以在http://v9.help.phpcms.cn/html/2010/structure_0928/69.html 找到他的目录结构 我们要开发的东东(也就是模块)就在/phpcms/modules/下面 如果没有什么特别的

Cocoapods多模块开发

阅读此文章之前你需要对cocoapods有基本的了解,这里给大家附上几篇文章: IOS依赖管理 - CocoaPods(PS:就在前几天安眠重装了系统,重新安装cocoapods发现跟以前有点点不一样,所以顺便对文章做了更新) CocoaPods官方文档-Podspec配置格式 一. 前话 安眠是从去年后半年开始投入到现在的产品当中,前期该款产品只有国内一条产品线,之前搭的框架一直顺顺畅畅也没什么问题,中途公司决定要拓展国际产品线,考虑到业务逻辑的差异化会趋于明显大家讨论后决定国内国际分开两个产

Nginx模块开发入门(转)

  前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘

Twitter模块开发

 Twitter模块开发 关于Twitter这一块,自发这篇博文之后有很多人问我,有的验证成功了不跳转,或者其它原因什么的 =======我看了一下,这篇博文里面有写呀,下面以红色粗体文字注明一下  Twitter和Facebook,就类似于国内的微博,或者分享功能,点击某个按钮,出来一个提示框,可以分享到某些地方,这里实现的就是分享到Twitter,当然得要使用代理,因为这是给老外做的,所以得符合他们的习惯 先说一下实现的功能吧,首先运行的时候,会检查是否登陆twitter(通过SharedP