drupal6开发指南

drupal 小结9

本章的焦点是构建一个定制的 Drupal 发行版。为了完成这一任务,我们从一个原始的 Drupal 包开始,加入了自己的模块和主题,然后编写了一个安装大纲自动完成若干任务。最后我们制作了一个新的压缩包,这个包可以用作新的发行版。

在我们编写的代码中,我们重点关注安装程序使用的回调函数。不过,我们也学习了添加内容类型的另一种方式,以及用代码创建触发器的过程。我们用表单API增加了一个安装配置画面。

在本书的课程中,我们学习了 Drupal 的体系结构,创建了几个模块和一个主题,现在又编写了一个安装大纲。我们学习了主要的 Drupal API 和子系统。我们还实现了几十个钩子,运用了很多关键的 Drupal 函数。

到此为止,你手中已经具备了开发复杂 Drupal 模块的工具。那么,就去动手编写drupal 化的代码吧。

drupal 发行版打包

我们从一个干净的 Drupal 包开始。我们在适当的位置加入了我们的模块和主题,然后在 profiles/ 目录下创建了一个安装大纲。

最后一步是把这一堆文件打个包。

提示:去掉你做的修改
如果你用这个发行版目录进行安装大纲的测试,一定要确保去掉安装程序所做的
更改。特别要注意一定要把 sites/default/settings.php 文件删除掉。(如果
你是用安装大纲迁移自己的网站,当然可以保存 settings.php 文件)

Drupal 发行时一般是归档并压缩的文件。如果你有 UNIX-like 环境,你可以切换当前目录到 drupal-philbios-6.2-1.0/ 文件夹并用如下方法创建发行版:
 

完成drupal安装大纲

现在我们到了 philosopherbios_profile_tasks() 的最后一部分。我们已经看到了调用 drupal_get_form() 的结果是让提交处理函数设置默认主题。让我们继续分析 philosopherbios_profile_tasks() 函数,看看表单数据处理完成后发生了什么:

 

drupal表单提交处理函数

当 drupal_get_form() 这次被调用时,它取出缓存的表单并把它交给提交处理函数。遵循表单API回调例程,我们的处理函数名为:philosopherbios_theme_form_submit()。

此函数如下:
 

回到 philosopherbios pick theme 任务

当安装程序检查自己的状态,它发现当前任务仍然是philosopherbios_pick_theme,因此它将再次调用philosopherbios_profile_tasks() 函数,这一次 $task 的值为philosopherbios_pick_theme。

让我们回到 profile 任务函数,看一看第二条 if 语句:
 

drupal主题选择表单

我们将再次使用 Form API。这一次,我们将创建一个简单的表单,让用户可以选择第三章中创建的 Descartes 主题或者选择 Drupal 内建的 Garland 主题。管理员的选择将决定哪个主题做为默认主题。(当然,管理员以后也可以在Administer | Site building | Themes 更改。)

我们的 philosopherbios_profile_tasks() 函数的第一条 if 语句的最后几行
如下所示:
 

注册一个drupal新任务

前面,我们把 $task 设置为 philosopherbios_pick_theme。现在,我们需要让Drupal 安装程序知道我们添加了另一项任务。这是用philosopherbios_profile_task_list() 做到的,安装程序将查找这一回调函数:
 

走向下一个drupal任务

现在我们已经创建好了内容类型和触发器。接下来,我们要获取用户的输入,以决定是否把 descartes 设置为默认主题。

要实现这一点,需要两件事:第一,我们需要使用一个不同任务。第二,我们需要为用户体哦能够一个表单,以便用户做出决策。

这个 profile 任务的最后,设置了这两件事:
 

创建一个drupal触发器(trigger)

在第八章中,我们用管理界面创建了一个触发器。不过在我们的安装大纲中,我们觉得在安装期间就配置好这个触发器比较好。 trigger API 并未提供一个插入触发器的函数。实际上,一个触发器只是数据库中的一行。因此,我们通过在数据库中插入一条记录来添加我们的触发器:

创建一个drupal内容类型

在 if ($task == 'profile') 代码块儿中,我们做的第一件事儿是调用默认大纲中的 default_profile_tasks() 函数。前面我们指出了这样做的原因。

接下来,我们定义 quote 节点类型:
 

同步内容
|