drupal 6模块开发教程

可能你先用drupal搭建了一个网站,最初的时候,大部分都是使用的默认功能,也很好用,随着业务的增加,你开始对网站作出修改.最初定制的是主题,同时还可以将一些简单的业务逻辑放到template.php中。随着业务逻辑的不断增加,以及特定的需求,使得drupal默认的功能,不再能满足你的网站的需要了。

这个时候,就需要添加功能。很多人会这样,选择一个功能比较接近的模块,直接修改其中的代码,让它满足自己的需要。这种方法在drupal中,是应该被禁止的,但是还是有很多的人使用这种方法,出于项目周期的考虑,出于开发技能的考虑。不管出于什么样的原因,这种方式在开始的一段时间内,是很方便,很快捷的,但是随着时间的推移,这种方式将会为你带来恶梦,你的网站无法升级,安全漏洞一个接一个,原有的开发人员离职了,后续人员不知道他在哪里动了手脚?

想要避免这种恶梦吗?那么你就需要了解,drupal的模块,你应该学习,和掌握模块的编写,以及drupal中各种钩子的使用。Drupal的模块,就是一个功能。你所看到的drupal核心的,里面有了简单的功能,但是这种功能,通常是比较简陋,朴素的。通过安装模块,就可以扩展这种功能。Drupal的模块放置在两个位置,一个是安装根目录的子目录modules下面,一个是sites/all/modules下面。前者放置的是drupal的核心模块,后者放置的是drupal的第3方模块以及自定义的模块。

      在本部分,我们将从头开发一个模块。通过这个模块,你可以学会开发模块的规范,以及一些常用的钩子函数。为了让本文更有意义,我们决定选用一个实际的例子。在每篇文章的下面,向添加一个咨询的功能。匿名用户,提出咨询,管理员对问题进行解答。这个和drupal自带的评论模块多少有点出入,也就是说,现有的评论模块,不能满足需求了。我们要开发一个专门为自己订做的模块,实现自己的功能。

   相关链接: Think in Drupal

Drupal版本:

1. drupal模块的需求

这的确是一个实际的例子,lonlife的站长提出了,他想在文章下面提供一个咨询功能,我首先 想到了使用drupal的评论模块,我觉得这个就够用了,但是他觉得评论模块不是他想要的,我让他给我一个例子,也就是他想要一个什么样的咨询功能.它给了我一个链接,京东商城里面的.我截一个图,来说明这个咨询功能.

 

网友的咨询信息,和管理员的答复,是放到一起的,一个咨询仅有一个答复.这种方式,是非常适合中国的情况的,我看到很多网站上,都是采用这种模式.我想,评论模块是不是改造改造也可以实现这样的样式,我觉得是可以的,但是修改起来也比较麻烦,这样可能还不如自己写段代码管用.

       另外,自己一直也没有编写过drupal6下面的模块,通过实践,也可以增加自己的经验,另外就是还可以以此写点东西,让更多的朋友学习使用drupal6。何乐而不为呢?

Drupal版本:

2.编写info文件

    要编写自己的模块了,首先要做的就是在sites/all/modules下面创建一个子目录来放置模块的内容。创建文件夹,首先就要为它取个名字,我们就使用咨询的汉语拼音”zixun”吧,这样符合大家的习惯。在目录sites/all/modules/zixun下面,我们可以放置模块的各种文件,比如module文件,安装文件,js,css,还有模块的模板文件,后者是drupal6所特有的,当然还有info文件。我们首先要创建的就是info文件。

   创建一个名为zixun.info的文件,由于我们的功能和评论模块相近,不妨就直接拷贝comment.info中的内容,comment.info的文件内容如下:

; $Id: comment.info,v 1.4 2007/06/08 05:50:54 dries Exp $

name = Comment

description = Allows users to comment on and discuss published content.

package = Core - optional

version = VERSION

core = 6.x

 

; Information added by drupal.org packaging script on 2008-10-08

version = "6.5"

project = "drupal"

datestamp = "1223497210"

 

对其进行修改,结果如下:

; $Id: zixun.info,v 1.4 2007/06/08 05:50:54 zhupou.cn Exp $

name = 咨询

description = 允许匿名用户向站长咨询。

package = 其它

version = VERSION

core = 6.x

 

; Information added by drupal.org packaging script on 2008-10-08

version = "6.5"

project = "drupal"

datestamp = "1223497210"

 

    后面的那4行信息,以及第一行的注释信息,是将模块提交到CVS时系统所加的,删除的话,也没有影响。

   这个时候导航到”管理 > 站点构建>模块”,发现还是找不到我们的模块,我记得主题中,加个info文件,在主题的列表页面,就会显示出主题的相关说明,及选项。但是加了模块的页面以后,看不到zixun模块,是不是info文件我加了中文的缘故。应该不是,会不会哪里写错了?再后来参考了我翻译的那本drupal专业开发指南,发现需要添加一个module文件,才能显示出来。

好了,让我们再加一个module文件,zixun.module,里面没有内容,仅仅是个架子,

<?php

// $Id: zixun.module,v 1.617.2.3 2008/10/22 06:22:38 zhupou.cn Exp $

 

/**

 * @file

 * 让匿名用户可以向站长进行咨询

 *

 * 当启用后,就会在每个节点后面添加一个咨询链接

 * 匿名用户不用登陆就可以咨询

 * 管理员可以对咨询进行管理,包括编辑,删除,答复等等

 */

   最前面是php的开始标签,第2行为CVS标记,是自动生成的,这里是根据评论模块的内容修改而成。再往下就是注释了,用来生成文档,实际中,很少用到,仅仅用来注明模块的功能,用途。

   为什么不把info文件和module文件合在一起呢?就如同本周六我给大家讲解drupal主题的Info文件时提到了,info文件通常都比较短小,用来存放模块,主题的原数据,这些数据可以缓存起来,当系统调用这一模块,主题时,只用调用info文件中的内容就可以了,这样可以提升效率。

    现在在模块列表页面,就可以看到我们的模块了。

Drupal版本: