Drupal的体系结构

Drupal是一个由许多小的功能模块组成的模块化系统。它不仅是一个CMS,还被描述成为框架。项目创建者将它设计为高度灵活的系统,让技术人员可以对其进行改造以满足多样化的需求。正是因为遵循了这个设计原则,Drupal才需要大量的定制化工作—当然也对使用者的技术水平提出了较高的要求。

了解Drupal体系结构的工作原理不是一个简单的事情。但如果想成为一个称职的Drupal管理员,这是必需的过程。

1. 使用的编程语言

Drupal软件是使用PHP程序语言编写的,用户界面综合使用了HTML、JavaScript、CSS和PHP。当为Drupal开发扩展(模块)时,开发者需要同时使用PHP、HTML和CSS。

提示

Drupal 7是第一个要求使用PHP 5的版本,其全部技术需求请参见第2章。

2. 体系结构的基本概念

Drupal体系结构的基本概念包括用户、节点、字段、分类、评论、模块、钩子以及一组用户界面条目如区域、区块和菜单。其他重要概念将在本书后面的章节讨论,但下面的概念非常重要,需要在开始了解Drupal前掌握。

用户

一个Drupal用户指的是可以登录系统并执行操作的人。包括编辑者、系统管理员和网站用户(通过Drupal网站彼此交流)。Drupal还有一个和安全相关的概念称为“匿名用户”。所有网站的访问者在登录前都被称为匿名用户。

用户是系统的原生(native)实体,其默认属性包括用户名、密码、电子邮件等。另外也可以对用户个人信息进行定制增加新的属性,例如可以为用户的Twitter地址增加一个新URL属性。

节点

节点是内容条目。Drupal内容类型全部基于节点。Drupal对内容的管理的实质是管理节点。例如,要在Drupal中创建并发布一篇博客,则需要创建和发布一个Drupal节点。

节点由默认元素(如标题和内容)以及一个或多个可选的Drupal字段组成。默认情况下,节点是简单实体。这样定义的目的是让站点所有者在定义自己的内容类型时可以扩展简单节点。

提示

默认的Drupal安装程序会创建两个已定义好的内容类型:基本文章(basic article)和页面(page)。这两个内容类型包括标题和内容字段以及一些元数据。也可以通过为其增加字段来扩展这些内容类型。

字段

字段是Drupal 7中新添且重要的概念,它们是可以被附加到Drupal中大部分实体上的内容容器。例如,想将文章的到期时间增加到站点的文章中,那么可以定义一个新的名为“到期时间”的字段并将其关联到Article内容类型上。

能够自由地定义新字段并将其关联到内容类型上,这使Drupal几乎可以存储任何类型的内容。

交叉引用

有关Drupal内容类型的创建和管理,包括Drupal字段的定义、配置和管理详见第10章。

分类

分类(taxonomy)用于在Drupal中对内容进行组织。Drupal分类功能是由内核模块定义的,可以定义“词汇表”(一组类别或标签)并将它们与系统中的内容类型相关联。当一个分类与某个内容类型关联后,就可以在创建或编辑这种类型的内容时使用所属分类了。

分类也有不同的形式—可以是层次的(hierarchical)、平行的(flat)或任意的(arbitrary),标签(tagging)系统为任意形式分类的一个示例。在创建一篇关于体育运动的博客时,可能需要用一套分类来区分不同运动项目的博客,还有可能需要标明每篇文章中提到的运动员的名字。

在上面提到的两种应用场景中,第一种可以使用一个预先定义好的分类系统,第二种使用标签系统比较合适,可在创建内容时填入一系列任意的单词或词组。

交叉引用

第11章将详细介绍Drupal 7中分类的创建和管理,包括Drupal 7中所包含的分类管理工具。

评论

Drupal评论是原生的系统实体,用来展示来自用户的评论和反馈。评论必须与系统中的某段内容相关联—用术语来表达就是“节点”。例如像用户个人信息这样的内容是不能被评论的。

评论也可以与其他评论相关联。换句话说,一个用户可以回复他自己或其他人的评论,这样Drupal的评论就构成了一个“会话”,也就是通常所说的帖子列表(threading)。

交叉引用

评论模块和相关的功能将在第15章中深入讨论。

模块

Drupal模块是用于增强或改变现有Drupal功能的软件包,它有两种类型:Drupal默认的内核模块和由社区提供的贡献模块。如果使用Drupal基础发布版,那么需要单独下载和安装贡献模块。如果使用其他发布版,除带有内核模块外,还会集成一些贡献模块。

标准的Drupal版本包含了一定数量的内核模块,通常少于50个。然而目前已有上千的贡献模块可使用,这些都可以从Drupal官方网站上下载:http://drupal.org/project/modules。

高级管理员和开发者可以通过开发自己的模块来扩展或改变Drupal的功能,这需要精通Drupal API和PHP编程技术。

交叉引用

Drupal内核模块将在第6章中详细介绍。如何使用贡献模块扩展站点功能的内容将在第29章中介绍。

菜单系统负责显示站点的导航元素,它也有另外的功能,例如将URL请求映射到Drupal系统中能够处理此请求的部分。这个功能被称为请求路由(request routing),是Drupal的高级概念。掌握此过程的复杂原理并不必要,但是所有管理员应该明白菜单系统不只是负责显示用户界面。

交叉引用

第8章有关于创建和管理Drupal菜单的详细介绍。第5章将介绍主题和Drupal主题管理工具。

3. 数据库

Drupal将所有的内容、缓存数据、系统实体和一部分配置信息存储到一个关系型数据库中。很多系统实体包括用户、评论、节点和字段,都有专门的数据库表存放各自的数据。

Drupal 7包括了一个增强的数据库抽象层。这层是建立在PHP数据对象(PHP Data Object,PDO)API基础之上的,使模块开发者从底层的数据库操作细节中解放出来。

Drupal 7支持MySQL、PostgreSQL和SQLite数据库。

交叉引用

关于Drupal 7的详细技术需求请参见第2章。

4. 工作原理

Drupal是一个Web应用程序,通过Web服务器和数据库服务器来支撑其运行。对内容的请求源自像Web浏览器这样的客户端,通过Web服务器被传递至Drupal应用程序系统,再由Drupal菜单系统路由转发至负责处理这些请求的软件组件。图1-4展示了请求的处理流程。

技巧

所有的模块都针对特定的Drupal版本创建。如果一个模块的版本与其所安装的Drupal系统版本不匹配,那么模块将不能正常使用。

钩子

钩子是模块开发者必须掌握的高级编程知识。钩子是系统中所有功能和模块的内部应用程序接口(API)。它们定义了可被系统执行的操作。当模块安装钩子时,就进入到系统的管理中并执行与此钩子有关的操作。

例如,一个名为example的节点模块创建了一个文件example.module,其中定义了example_form()函数。当系统调用这个函数时,模块将进入到系统的管理中并显示所编辑的菜单。如想获得Drupal开发的更多信息,可在线查看开发者文档:http://drupal.org/contributors-guide。
区域、区块和菜单

Drupal网站的每个页面都由区域构成。页面的结构可能包含页眉、页脚、左边栏和中心内容区。区块是在被安排在某个特定区域中显示出来的一块内容。图1-3展示了在Drupal驱动的网站页面上如何显示区域。

如果客户端请求的内容有访问权限,则Drupal将从系统缓存或原始的数据表中取出内容并返回。内核系统和相关模块会对响应内容进行组装。模板系统负责内容的最后格式化处理,并最终交由Web服务器将内容发布至客户端。

猜你喜欢

转载自gavin2013.iteye.com/blog/1993296