玩转Drupal模块:Hook System运作简介
来源:互联网 发布:淘宝店铺店名可以改吗 编辑:程序博客网 时间:2024/06/05 14:21
模块系统是drupal很重要的运作方式,drupal依靠着少少的核心程序,便能让模块能做到任何事情。
drupal只有21个档案在include里头,每次必会loading进来,其他的全都放在modules。
也就是说,除了那几只档案以外,全部的东西都把他当成module在写。诸如CMS最基本的功能,文章管理、评论、讨论区、分类…等的功能,全部都写在 module里,include里头所提供的是各种api,档案处理函式、数据库存取、窗体生成…等等,这样的分层,module便可以专心的开发各种功能。
当然,这样的架构不够令人注目。有许多web app架构,对于模块 (module)、插件(plug-in)…等的运作,通常是让他们各自为政,自己干自己的事情。多是用核心提供的object和function,加上 module自己额外的code,达到module要做到的额外功能。但是drupal的核心运作却不是如此。
drupal处理使用的程序为modules/user.module。如果今天想要在看用户数据的同时,也想看看所有使用者过去发表文章的list,那该怎么写呢?
直接一点,更改user.modue,在显示时,顺便去文章数据库抓相关的数据?然而这样却不是一个好方式,今天任何想要对用户增加新功能的时候,都得trace一次user.module的code,看懂他在干啥,然后把新的code安插在合适的地方… 最后可能增加user.module的复杂度,增加维护那支module的难度,共同开发时,更是一个危险的方式。
第二种方式,重写一个新的浏览页面,重新写一个SELECT的语句,让SELECT的时候除了用户信息,也把文章数据一起抓出来,然后显示到不同的页面。但是这样很浪费,明明跟user.module重复的功能达到一半以上,那是不是之后要新增功能,都得重写一次呢?
上面两种方式在drupal中也都可以达成,然而熟悉Drupal的人却不会如此。Drupal的开发者很聪明,他的模块系统(module system)考虑到了模块再利用这一点,每个模块都视为可以再利用的资源,只要写module的人想写,透过模块系统便可以跟所有的module交互作用。
第三种方式以modules/user.module为例,他即是处理包含新增、修改、删除、注册、登入….等所有与用户相关的功能。在进行每个重要的功能时,user.module都会呼叫一个函式去扫所有的module,看看是否有其他的module要在user.module进行此动作时,也进行一些其他想要做的事情,这就是drupal重要的Hook System。
example:
在drupal user.module里头可以找到如下的程序代码
function user_view($uid = 0) {
// … skip
// moudle_invoke扫描所有的module
// 看看有没有modulename_user这个function
// 有个话就看’view’这个功能的部份要加上什么
foreach (module_list() as $module) {
if ($data = module_invoke($module, ‘user’, ‘view’, ”, $account)) {
// do something…
}
}
// … skip
}
所以,第三种方式,不用重写,也不用改到user.module,只要自己新增module和写一个function,便可以轻松让浏览用户信息时,加上过往文章。
example:
新增自己的module,与hook system紧密运作
新增sample.module
function sample_user($type, &$edit, &$user, $category = NULL) {
if ($type == ‘view’) {
return /*过往文章,型别为一数组*/;
}
}
这就是drupal把众多主要功能都写成module的原因,让所有模块之间都可以交互利用,或是写给别人利用,或是利用别人的module,像积木一样推砌成想要的功能,却又不浪费资源
- 玩转Drupal模块:Hook System运作简介
- Drupal常用模块简介
- drupal 模块
- Drupal简介
- Drupal简介
- Drupal简介
- drupal 简介
- drupal 简介
- centos 试玩 drupal
- 瞎忙半天的drupal hook
- drupal几个模块
- drupal模块: Ajax Slideshow
- Drupal模块功能一览
- Drupal常用模块简述
- Drupal常用模块简述
- Drupal Hello World模块
- Drupal模块开发注意事项
- Drupal模块开发指南
- *.xhtml在MyEclipse里打开出错问题
- Collections.sort() 对 List 排序
- April 2nd Friday 2010
- 2.1 基本数据类型和值
- 回溯算法;双船装载问题;限界+约束;子集树;时间复杂度:O(2的n次方);
- 玩转Drupal模块:Hook System运作简介
- Drupal - Hierarchical Select
- 关键字valarray小结
- MSDE允许网络连接办法
- ogre笔记
- ip地址,子网,VLSM 基础知识
- NOM6.5.2
- 2009年总结帖
- RCP 中设置和Eclipse一样的流线型视图窗口