drupal6开发指南

drupal 一个复杂的 profile 任务

我们的所有定制模块都已经安装了。但是在本书中,有好几个地方我们使用了管理接口来配置这些模块。

当然,我们希望在自己的安装大纲中自动完成这个过程。准确地说,我们要完成以下工作:

  • 创建我们在第四章中定义的 quote 内容类型;
  • 为第八章中定义的 sitenews_send_action 动作添加一个触发器,与 Node API 的 presave 事件相关联;
  • 让用户可以选择把 descartes 而不是 garland 设置为默认主题。

最后一步需要与用户进行交互,因此我们将利用任务系统来设计自己的定制任务。

与往常一样,我们先从整体上看一看这个函数。然后我们先介绍前面两点。实现自己的任务稍微有点复杂,我们稍后再详细介绍。
 

drupal 一个基本的 profile 任务

当 Drupal 的安装程序到达 profile 任务时(运行完 configure 任务以后),它尝试执行 <profilename>_profile_tasks() 函数,传递给它两个参数:一个任务名称的引用 (&$task), 以及安装程序当前的 URL ($url)。$task 变量的初始值总是设置为 profile。

如果安装大纲不需要用户提供额外的信息,那么它可以直接进行安装并返回,不需要使用 $task 和 $url 变量。在这种情况下,我们的philosopherbios_profile_task() 函数结构类似下面这样:
 

profile 任务

任务 profile 是安装大纲的入口点。大多数样板安装工作是在这里进行的。数据库已经配置好、模块已经安装好、locale也已经选好了、甚至基本的站点信息(比如站点名称和管理员的email地址)都已经存储在数据库中。在profile任务中,我们将开始进行自己的定制配置。

drupal 任务系统

Drupal 的大多数安装工作都是由任务系统完成的。在这个系统中,Drupal 实行一系列的步骤(任务)。每项任务负责指引安装程序去处理下一个任务,形成一个链条。

注解:

这一点很重要:指引安装程序去处理下一个任务是每个任务的责任。因此,一个任务可以根据当前的状态从逻辑上决定下一项任务是什么。

要想详细了解任务系统的工作细节,最好去查看 install.php 的代码,这个文件位于 Drupal 的根目录下。install_tasks() 函数对于理解任务这个概念特别有用。

例如,Drupal 执行 profile-install 任务,它负责准备philosopherbios_profile_modules() 函数中罗列的模块的安装。一旦这项任务完成了,它指引安装程序进行下一项任务:profileinstall-batch。这项任务负责模块的实际安装工作。configure 任务进行之前,还有几项简单的任务要完成。这项任务为管理员显示站点配置表单,其开头是这样的:

图 9-4

drupal 模块列表

一旦选定了一个安装大纲,Drupal 将依次进行几个基本安装任务,包括语言选择、系统验证和数据库配置。然后它开始安装系统。

任务之一是模块安装与配置。指定应该安装哪些模块是安装大纲的责任。我们用philosopherbios_profile_modules() 函数做到这一点:
 

描述drupal大纲细节的函数

 

我们的 philosopherbios.profile 脚本的开头如下:
 

drupal .profile 脚本

Drupal 的安装系统期望大纲具有某些特性。这些特性是用函数实现的,象钩子一样遵循命名惯例。函数签名以大纲名称开头。

例如,Drupal 期望有个名为 <profilename>_profile_details() 的函数存在,其中 <profilename>用大纲的名字取代。如果这个函数没有定义,这个大纲就是不可用的。

一个 .profile 文件应该具有如下函数:

  • <profilename>_profile_details(): 提供有关大纲的基本信息。(要想让大纲正常工作,必须有这个函数)
  • <profilename>_profile_modules(): 列出此大纲应该安装的模块。
  • <profilename>_profile_tasks(): 处理安装任务。
  • <profilename>_profile_task_list(): 提供一个安装过程中应该执行的任务列表。

虽然这四个函数是安装程序直接使用的,不过一个 .profile 文件也可以包含其它函数。

drupal 大纲编程

在某些方面,安装大纲与模块相似。例如,从结构上说目录布局是相似的。就像 Drupal 期望模块文件夹中包含一个 .module 文件一样,大纲文件夹中也应该有个 .profile 文件。

不过也有不同之处。大纲没有 .info 文件。大纲不需要安装或启用(只要放置在正确的目录下即可)。大纲没有集成在帮助系统中。这些是小小的差异。但是有一个很大的不同之处,开发者应该有所察觉。

大纲执行了 Drupal 安装的绝大部分工作。对于编些代码来说,这有重要的实际意义。安装大纲是在某些 Drupal 的基础设施激活之前运行的。

因此,我们使用过的钩子框架是无效的。相反,我们使用与钩子系统相似的一系列回调函数。

制作一个drupal发行版

我们的第一项工作不需要编程。我们需要为定制的Drupal发行版建立目录结构。

我们的目标是创建一个 Drupal 发行版,包含我们的模块和主题。我们不是要迁移一个网站。

因此,我们从一个干净的 Drupal 拷贝开始——一个既没有安装过也没有配置过的Drupal。最容易的办法是从 Drupal.org 下载一份信心的拷贝。这可以确保最新的安全补丁等被包含在内。

迁移提示:你已经得到它了!
如果你是要迁移一个网站而不是新建一个网站,那么就没有必要从原始的配置开始。
你应该保持已经进行的所有变更(可能包括设置文件和 drupal/files/ 目录)。

拿到 Drupal 的原始拷贝之后,先要解压。为了区分我们的发行版与通常的Drupal发行版,给主目录改个名字是个好主意。借鉴模块版本命名惯例,我们把drupal-6.2/ 改成 drupal-philbios-6.2-1.0/. 第一组数字(6.2)是 drupal 的版本号。修订号(1.0)是我们的发行版的版本号。

drupal 安装大纲简介

安装大纲是个特殊的安装程序,它包括一些预装的模块和主题,并按照特定的目的配置 Drupal。例如,它可以安装并配置自定义的模块和主题,甚至可以设定系统偏好——全部都在安装程序中完成。当你在安装完成后第一次登录系统时,环境就已经全都配置好了。

编写安装大纲需要完成两个层次的工作:

  • 文件系统:从 Drupal 的基本系统开始,我们必须移动或复制一些文件以便进行安装配置。
  • .profile 脚本:仅仅把文件放置在正确的位置是不够的。我们得编写一个特殊的 .profile 脚本,让它执行安装任务。

这两项工作我们都要进行。说实话,文件系统的工作很简单。我们的大部分时间都将花费在编写 .profile 上。

为什么要使用安装大纲?

“当然,那听起来不错,”也许有人会说“不过,人们为什么需要这些呢?”让我们考虑两种情况,它们说明了如何使用定制的安装大纲。我们先看看最显而易见的情况。

同步内容
|