Drupal 高手建站技术手册 样章

方擎 等编著

ISBN 978-7-121-11813-5

2010年10月出版

定价:49.80元(含DVD光盘1张)

16开

332 页

宣传语

中国Drupal培训第一人“方医生”力作

国内第一本介绍Drupal建站的图书

字字珠玑,绝对干货,物超所值!

赠送价值300元的Drupal培训视频

内容简介

本书全面、系统地介绍了当今最流行的开源内容管理系统Drupal的建站方法,不仅由浅入深地介绍了Drupal的基础知识、而且对重要的配置过程均配以截图进行详细的讲解;在此基础上,介绍了Drupal模块开发和主题定制方面的知识,为读者对Drupal进行二次开发提供了很有价值的参考;最后通过两个完整的案例使读者对Drupal建站全过程进行近距离接触,以增强读者使用Drupal进行实际开发的能力。在本书的配套光盘中列出了这两个案例的源代码,以及14小时的学习视频,将为读者学习Drupal建站起到很好的辅助作用。

本书从Drupal的基本概念和配置到模块的使用和开发、主题到安装和定制,几乎涵盖了Drupal建站的各个方面,适合所有想要学习Drupal的开发人员;即使没有网站开发经验,也可以作为踏入网站开发领域的入门书籍。作者在书中与读者分享了多年的Drupal开发经验,对正在使用Drupal的开发者也具有很好的借鉴作用。
 

附件尺寸
Image icon Drupal-gaoshou-banner-01.jpg120.8 KB

Drupal诞生于2000年,是一个基于PHP语言编写的用于开发网站的开发型CMF(内容管理框架)。Drupal强大的定制开发能力,也使其成为众多有技术实力的网站建设公司优先选用的网站开发平台。

任何网站建设公司自己开发的系统,在技术上都无法达到Drupal的水平,这正是开源软件的优势所在:PHPChina(www.phpchina.com)作为PHP的中文官方网站,同时也是国内最大的开源社区;其中自然也有很多关于Drupal的技术讨论的话题,但是非常遗憾并没有关于Drupal的系统介绍和讲解。随着《Drupal高手建站技术手册》这本书的问世,弥补了国内在Drupal技术方面的一块空白,为广大PHP爱好者以及公司提供了强有力的技术支持后盾,同时也为Drupal在国内更好的推广起到了基石的作用。

由于Drupal具有便于搜索引擎收录的URL,提供了强大的个性化环境、提供了基于角色的权限系统、提供的站内搜索系统能对站内的所有内容进行索引和搜索、模板系统将内容和表现分离、提供内建的新闻聚合工具、强大的多语言支持体系等等优势,所以国外很多著名的政府机构(联合国,美国白宫)、商业公司(华纳兄弟,联邦快递)、高等学府(美国哈佛大学,美国美国麻省理工学院)、技术社区(Ubuntu、Fedora、Firefox)的网站都是使用Drupal搭建的。因此,我们也希望国内能够通过《Drupal高手建站技术手册》这本书让Drupal真正被国内的企业和PHP技术人员所认可,让其在开源领域绽放出更加绚丽的色彩!

 

PHPChina 总经理 李薇
 

前言

Drupal是当今开源内容管理系统中的王者,连续几年获得优秀开源CMS 大奖的殊荣。它依靠优良的架构、多语言支持、Web 2.0的特质、丰富的第三方模块、简练的主题模板引擎和强大的Drupal API,获得了无数开发者的青睐。目前,国内外越来越多的网站在采用Drupal构建,很多著名的公司、组织和个人也使用Drupal作为其门户网站的框架。在经过了近十年的发展后,Drupal 6现已成为最流行也是最稳定的Drupal版本,这是全球近700名开发者在Drupal 5的基础上做了大量的改进、使其更加完善和强健的成果。

Drupal包含了内容管理、用户管理、角色和权限访问控制、模块管理、主题和模板管理等网站基础功能。掌握了Drupal,就等于掌握了一个强大建站工具;将帮助读者在未来的网站项目中,保证质量的同时有效地缩短开发周期,尽快实现网站原型。

作者是国内最早使用Drupal的开发者之一,参与和独立完成了很多国内外的Drupal项目,在本领域经验颇丰。作者结合实践中的项目经验和多年的培训经验完成此书,旨在为读者搭建一个通往Drupal世界的桥梁。本书依据Drupal的学习路径,由浅入深地介绍Drupal建站知识;对关键操作进行了详细的讲解,并配以截图和代码片段让读者更准确地掌握操作技能;最后通过两个项目案例的讲解,系统介绍了如何使用Drupal解决实际项目中的需求。相信读者在学习完本书后,必具备独立开发Drupal网站的能力。

本书特色

1.遵循Drupal学习路径

本书每一章节的排列顺序都按照学习Drupal的路径进行编排,从基础的背景知识到实际项目经验,构建了Drupal完整的学习路径。每结束一章的学习,意味着读者能根据前面所学的知识构建某个难度等级的Drupal网站。这样可最大程度地保证读者学习的成果。

2.内容全面、系统、深入

本书介绍了从Drupal的下载与安装到后台管理的各项功能,从第三方模块的使用到自定义模块的开发,几乎涵盖了Drupal建站的各种技能。很多重要的知识点,不只停留于表面操作流程的讲解,还对其功能实质和设计原理进行了讲解,旨在使读者不仅掌握工具的使用,还能体会其中蕴涵的思想。

3.适合不同层次的读者阅读

不管是从未开发过网站的初学者,还是精通PHP的高级开发工程师,相信都可从本书中有所收获。本书在讲解时,充分考虑了不同层次读者的需要,即对关键的知识点进行了详细的讲解,又避免过于在基础的知识点上停留。

4.完整的项目案例讲解

本书详细介绍了大学教务处新闻系统和在线订餐系统的案例(在本书的配套光盘中列出了这两个案例的源代码)。与其他书不同的是,作者结合软件工程思想,从需求分析、设计与实现到测试完整软件产品开发流程对两个实例项目进行了讲解,旨在培养读者Drupal网站项目的全局观。

5.提供技术支持,答疑解惑

读者阅读本书时若有疑问可发E-mail至doctor.fang@hotmail.com获得帮助,同时欢迎访问“方医生798工厂”(http://www.fang798.com),查看笔者最新的技术博客文章并进行交流。

本书内容及体系结构

第1篇 基础篇(第1~7章)

本篇主要内容包括:Drupal入门、安装Drupal 6、Drupal的基本概念、管理Drupal、主要模块介绍、部署Drupal和Drupal网站维护。通过本篇的学习,读者可以掌握内容管理系统的概念、Drupal下载和安装、Drupal的核心概念、后台管理的主要功能、核心模块的使用以及Drupal网站的部署和维护等知识和技能。

第2篇 高级篇(第8~12章)

本篇主要内容包括:常用第三方模块、Drupal模块开发、Drupal主题开发、Drupal API和Drupal网站安全等内容。通过本篇的学习,读者可以掌握Drupal最重要的三大第三方模块:CCK、Views和Panels的使用,还会掌握使用Drupal API开发自定义模块的技能,以便修改和扩展Drupal。还将学到如何使用Drupal的主题模板引擎定制Drupal网站的表现层。此外,通过第12章Drupal网站安全的学习,可加深开发者对网站安全的重视,并给出Drupal网站应对常见攻击的方法。

第3篇 实战篇(第13~14章)

本篇主要内容包括:大学教务处新闻系统和在线订餐系统的设计与实现。第一个实践项目重点是让读者熟知Drupal网站开发的流程;第二个实践项目重点在详解使用Drupal API开发自定义模块。通过本篇的学习,读者可以掌握如何使用Drupal解决实际项目中的需求。

附录

本篇主要内容包括:PHP入门、MySQL入门和第三方模块介绍。前两者对没有接触过PHP网站开发的读者是很好的入门学习资料。第三方模块介绍中对常用的Drupal第三方模块按照分类进行了简要介绍,可作为读者在选择模块时的参考依据。

本书读者对象

  正使用Drupal的网站开发者;

  专注国外网站项目外包领域的开发者;

  PHP网站开发的初学者;

  想利用Drupal作为系统架构的架构师;

  开源PHP项目的爱好者;

  大中专院校的学生;

  社会培训班学员。

本书作者

本书主要由方擎编写,同时参与编写的还有巴蕾、昊燃、黄叶新、李增辉、刘聪、龙志标、孟劼、米爱中、秦侠、冉剑、任潇、谭励、王大亮、伍云辉。在此一并表示感谢。

编者
2010年7月于北京
 

目录

基 础 篇


第1章 Drupal入门 2
1.1 内容管理系统(CMS) 2
1.2 开源的PHP WCMS 3
1.2.1 Drupal 3
1.2.2 Joomla 5
1.2.3 Typo3 7
1.2.4 WordPress 8
1.2.5 比较 10
1.3 Drupal功能总览 11
1.3.1 内容管理 11
1.3.2 用户管理 12
1.3.3 主题模板 13
1.3.4 博客平台 14
1.3.5 论坛社区 15
1.3.6 多语言支持 16
1.3.7 站点管理工具 16
1.3.8 模块 17
1.3.9 其他特性 17
1.4 小结 18


第2章 安装Drupal 6 19
2.1 版本的选择 19
2.2 获得Drupal 19
2.3 创建数据库 20
2.4 使用安装向导 24
2.4.1 选择向导的界面语言 24
2.4.2 创建settings.php文件 24
2.4.3 设置数据库 25
2.4.4 设置站点初始信息 27
2.4.5 完成安装 30
2.5 Hello Drupal! 32
2.5.1 创建个人博客 32
2.5.2 开启功能模块 32
2.5.3 发布第一篇博客 33
2.5.4 选择合适的主题 35
2.6 小结 37


第3章 Drupal的基本概念 38
3.1 节点(Node) 38
3.2 内容类型(Content Type) 39
3.3 模块(Module) 39
3.4 主题(Theme) 40
3.5 区块(Block) 42
3.6 菜单(Menu) 42
3.7 用户(User) 43
3.8 评论(Comment) 43
3.9 分类(Taxonomy) 44
3.10 小结 44


第4章 管理Drupal 45
4.1 介绍 45
4.2 内容管理 46
4.2.1 创建节点 47
4.2.2 管理节点 51
4.2.3 管理评论 52
4.2.4 管理节点类型 53
4.2.5 发布设置 60
4.2.6 RSS发布设置 61
4.2.7 类别管理 62
4.3 用户管理 64
4.3.1 用户管理 65
4.3.2 访问规则 67
4.3.3 角色 69
4.3.4 用户相关设置 71
4.4 站点创建 74
4.4.1 区块管理 75
4.4.2 菜单导航管理 80
4.4.3 模块管理 83
4.4.4 主题管理 85
4.5 站点配置 89
4.5.1 动作(Actions) 89
4.5.2 管理专用主题(Administration theme) 91
4.5.3 简洁URL(Clean URLs) 91
4.5.4 日期与时间(Date and Time) 93
4.5.5 错误报告(Error reporting) 94
4.5.6 文件系统(File system) 94
4.5.7 图像处理工具(Image toolkit) 95
4.5.8 输入格式(Input formats) 95
4.5.9 日志和报警(Logging and alerts) 99
4.5.10 性能(Performance) 99
4.5.11 站点信息(Site information) 101
4.5.12 站点维护(Site maintenance) 101
4.6 站点报告 102
4.6.1 最近日志记录 102
4.6.2 出现“访问被拒绝(Access denied)”的页面 103
4.6.3 查看返回404错误的路径 103
4.6.4 站点状态 104
4.7 小结 105


第5章 主要模块介绍 106
5.1 博客(Blog) 106
5.2 文集(Book) 108
5.2.1 创建文集 109
5.2.2 管理文集 111
5.3 联系表单(Contact) 111
5.3.1 联系表单类别管理 112
5.3.2 网站用户的联系表单 113
5.3.3 联系表单链接 115
5.4 论坛(Forum) 116
5.4.1 容器(Container)和论坛(Forum) 118
5.4.2 论坛全局设置 119
5.5 本地化(Locale)和翻译(Content Translation) 121
5.5.1 更换界面语言 121
5.5.2 修改现有翻译 124
5.5.3 导出翻译包 125
5.5.4 为节点创建多语言版本 126
5.5.5 本地化域名 127
5.6 自定义路径(Path) 128
5.6.1 创建节点时设置自定义路径 128
5.6.2 使用后台集中管理自定义路径 128
5.7 访问统计(Statistics) 130
5.8 触发器(Trigger) 130
5.9 小结 132


第6章 部署Drupal 133
6.1 测试环境与生产环境 133
6.2 选择最适合你的服务器架构 133
6.2.1 单服务器 133
6.2.2 Web服务器和数据库服务器 134
6.2.3 更复杂的架构 134
6.3 部署流程 135
6.3.1 第一次部署 135
6.3.2 更新运行中的Drupal网站 137
6.4 小结 138


第7章 Drupal网站维护 139
7.1 网站清理 139
7.1.1 清理缓存 139
7.1.2 清理垃圾节点和评论 140
7.1.3 非法用户 140
7.1.4 垃圾上传文件 141
7.1.5 日志 142
7.2 网站备份 142
7.2.1 准备工作 142
7.2.2 数据库备份 142
7.2.3 网站程序备份 143
7.2.4 用户文件备份 143
7.3 网站数据恢复 143
7.3.1 使用phpMyAdmin 144
7.3.2 使用BigDump 144
7.4 小结 146


高 级 篇


第8章 常用第三方模块 148
8.1 CCK 148
8.1.1 为什么需要字段 148
8.1.2 扩展内容类型 149
8.1.3 CCK提供的字段类型 153
8.2 Views 157
8.2.1 基础概念 157
8.2.2 创建视图 159
8.2.3 列表样式 167
8.2.4 导入与导出 168
8.3 Panels 169
8.3.1 Panel布局 170
8.3.2 创建Panel节点 171
8.3.3 创建Panel区块 172
8.4 小结 173


第9章 Drupal模块开发 174
9.1 开发环境搭建 174
9.1.1 开发工具 174
9.1.2 Drupal运行环境 177
9.1.3 Devel模块 178
9.2 模块开发基础 179
9.2.1 钩子函数 180
9.2.2 菜单系统 180
9.3 创建Drupal模块 180
9.3.1 为模块命名 181
9.3.2 模块文件夹 181
9.3.3 模块注册文件 181
9.3.4 创建页面 182
9.3.5 创建自定义区块 184
9.4 小结 186


第10章 Drupal主题开发 187
10.1 Drupal的主题机制 188
10.1.1 MVC架构 188
10.1.2 模板技术和网站主题 189
10.1.3 Drupal主题引擎 190
10.2 theme函数 193
10.2.1 执行流程 194
10.2.2 hook_theme 194
10.3 主要模板文件 195
10.3.1 通用模板变量 196
10.3.2 page.tpl.php 197
10.3.3 node.tpl.php 199
10.3.4 block.tpl.php 200
10.3.5 comment.tpl.php 201
10.4 小结 202


第11章 Drupal API 203
11.1 API文档使用指南 203
11.2 操作节点 204
11.2.1 节点对象 204
11.2.2 载入节点(node_load) 205
11.2.3 获得节点展示代码(node_view) 205
11.2.4 保存节点(node_save) 206
11.2.5 删除节点(node_delete) 206
11.2.6 节点钩子函数(hook_nodeapi) 206
11.3 操作用户 208
11.3.1 用户对象 208
11.3.2 全局$user变量 209
11.3.3 载入用户(user_load) 209
11.3.4 用户钩子函数(hook_user) 210
11.4 操作数据库 212
11.4.1 数据库查询(db_query) 213
11.4.2 获得结果(db_fetch_object和db_fetch_array) 214
11.4.3 分页查询(pager_query) 214
11.5 表单API 216
11.5.1 创建表单 216
11.5.2 表单提交数据的验证 219
11.5.3 处理提交数据 221
11.5.4 修改已存在的表单 222
11.6 小结 223


第12章 Drupal网站安全 224
12.1 访问权限控制 224
12.2 过滤用户输入内容 225
12.3 安全的数据库查询 225
12.4 防止跨站请求伪造(CSRF) 227
12.5 小结 228


实 战 篇


第13章 实践项目一:大学教务处新闻网站 230
13.1 项目背景 230
13.2 需求分析 230
13.2.1 需求分析的重要性 230
13.2.2 用例图 231
13.2.3 网站功能 231
13.2.4 非功能性需求 232
13.2.5 项目估计 233
13.3 设计 233
13.3.1 核心页面设计 233
13.3.2 主要内容类型 236
13.3.3 所需模块 236
13.3.4 主题 237
13.3.5 用户角色与权限 237
13.4 系统实现 238
13.4.1 新闻审核 238
13.4.2 新闻视图 240
13.4.3 创建首页 242
13.4.4 注册规则 243
13.4.5 联系表单 244
13.4.6 自定义错误页面 245
13.4.7 定制主题 246
13.4.8 安装中文语言包 248
13.5 测试 248
13.5.1 软件测试简介 249
13.5.2 使用SimpleTest进行单元测试 249
13.5.3 使用虚拟机搭建测试环境 251
13.5.4 测试用例 254
13.6 小结 255


第14章 实践项目二:在线订餐系统 256
14.1 项目背景 256
14.2 需求分析与功能设计 256
14.2.1 核心业务数据 257
14.2.2 页面设计 257
14.2.3 所需模块 258
14.3 系统实现 258
14.3.1 创建内容类型 258
14.3.2 订餐模块的开发 260
14.3.3 订单列表 264
14.3.4 订餐页面的美化 265
14.4 小结 265


附录A PHP基础 266
附录B MySQL基础 281
附录C 第三方模块介绍 302
 

第1章 Drupal 入门

Drupal是一个由PHP语言开发的,使用MySQL或PostgreSQL作为数据库的开源的网站内容管理系统。它有着非常繁荣的开发社区,全世界广大的开发者为它创造了成千上万的功能模块,使Drupal能被广泛地应用于各种类型网站的建设。同时,Drupal本身也是一个具有优良架构设计的网站系统。学会使用Drupal,不仅能掌握一个强大灵活的建站工具,同时也会使开发者通过学习其架构、代码和功能设计,增强自身对网站的领悟和理解,并对未来网站项目的开发产生深远的影响。

本章将向读者介绍内容管理系统的定义,并对当前流行的PHP内容管理系统进行横向对比,以使读者对当前的PHP CMS领域有大致的了解,同时初步了解Drupal的主要特性和功能。在选择使用Drupal作为网站基础框架之前,了解这些知识对技术决策也是非常有帮助的。

1.1 内容管理系统(CMS)

内容管理系统(英文全称为:Content Management System,缩写为CMS),是一个能够提供创建、修改、管理和发布各种内容的系统。从使用目的角度讲,CMS的功能主要分成两类:一类用于展示内容,也就是通常所说的“前台”;另一部分用于对内容进行管理,也就是通常所说的“后台”。“前台”主要面向最终用户,将系统中的内容以可读的形式展示出来;“后台”主要面向管理者,用于对系统的内容和用户等进行管理。CMS的主要功能如下。

  • 内容管理的基本操作:内容管理系统最初的设计目的是为了方便非技术人员对网站内容管理的需求。CMS为管理员提供易于使用的界面,使其在不需要技术人员协助的情况下,可对网站内容(如文本、图像、视频音频等)进行管理。
  • 内容分类机制:对于大量的内容,如果没有分类的话,既不便于管理,也不利于访问。CMS提供一种分类机制,允许管理员可以创建类别树,并将根据内容的不同属性(如标题、文本或关键字等)将其归到某特定的类中。
  • 对内容进行版本控制:CMS提供一种对内容进行版本控制的机制,来保存内容的历史版本。这样做的好处是可以使重要内容的修改被记录下来,以便于随时恢复到以前的状态。
  • 基于角色的用户管理:内容的发布和访问都是需要权限控制的,CMS可以安排指定类别的操作者负责不同类别内容的管理,并设置特定的用户群可以访问特定的内容。“角色(Role)”可以理解为是“用户组”,这个组内的用户具有相同的权限。
  • 主题与模板机制:CMS的前台负责展示内容。内容的展现形式有很多,样式也要根据系统所面向的用户群而进行定制。如果一个CMS会作为多个网站的基础框架的话,它必须有灵活的内容模板机制,使开发人员可针对不同的项目和需求修改内容展示样式。这样的机制在CMS中被称为“主题模板引擎”。

图1-1展示了一个典型的CMS系统的构架图。位于中心的是保存各种内容的存储服务器,由指定的内容录入和管理人员向内容数据库中输入内容。同时,用户还可以通过某种方式(如浏览器或客户端等)浏览和查询内容,并进行反馈(如评论)等。

图1-1 CMS体系结构

目前,网络已成为内容聚集的交流的主要平台,内容管理系统也越来越多地被应用于网络。人们将基于Web的内容管理系统划分出单独的一类,名为“网络内容管理系统”,英文缩写为WCMS(Web Content Management System)。在这个领域中,PHP开发的开源WCMS占据着绝对的统治地位。1.2节将对一些流行的开源PHP WCMS进行介绍和对比。
 

1.2 开源的PHP WCMS

WCMS在近些年来发展迅速,目前业界已经有很多成熟的WCMS系统。从简单的博客引擎系统到具有工作流、表格处理等功能的企业级内容管理系统,均有多种产品。在这些产品中,以PHP为开发语言的WCMS应用较为广泛。PHP的快速开发及部署成本低的特性,是大多数人选择它的原因。而且,PHP的WCMS多半是免费和开源的。近年涌现出了很多优秀的PHP的WCMS产品,如Joomla、 Wordpress,以及Drupal等。本节将对这几个系统进行简单的比较。

1.2.1 Drupal

Drupal是由比利时人Dries Buytaert开发的,最初只是一个用于实验室内部的新闻发布网站和网上交流区。Dries经过一段时间的发展和改进,于2001年发布了Drupal的第一个版本Drupal 1.0。随着Dries的推广,Drupal被越来越多的人所使用,其功能也逐步地向内容管理系统完善。当Drupal发展到Drupal 5.x时,进入了繁荣时期。欧美地区的很多公司、组织和个人开始使用Drupal构建各种类型的网站,如Sun公司、AOL、IBA等,都使用其开发子站点。美国政府也使用其作为政府财政开销的公众监督网站,流行天王迈克• 杰克逊的巡演网站也是用Drupal构建的,其流行的程度可见一斑。

几乎任何一个内容管理系统的发展都经过类似Drupal诞生的过程:起初为某一简单的需求而开发的一个程序,接着由于应用到更多的项目中,逐步进行功能增强和内核完善,最终将核心功能抽象出来,发布成为一个独立的系统。Drupal从诞生至今已经过十余年,算是比较成熟的系统了。

Drupal是一个免费的、开源的、具有模块化框架、使用PHP开发的网站内容管理系统。它可以使个人或用户社区轻松地发布、管理和组织Web站点上的各种内容。Drupal官方网站的地址是:http://www.drupal.org,网站本身就是用Drupa平台搭建的,主要功能包括新闻和公告、讨论组以及项目管理等。此网站对于所有的Drupal使用者都非常重要, Drupal的模块、主题、翻译包、帮助文档等几乎都由这个网站提供。读者可以在网站上注册一个账户,亲身体验一下各种功能。

国内的Drupal用户可以访问drupalchina.org,它是Drupal的简体中文官方网站。图1-2和图1-3分别为drupal.org和drupalchina.org的首页面。

图1-2 Drupal官方网站首页

 Drupal包括内容管理系统、博客系统、论坛、协作型编写环境、图片库、文件上传和下载等功能,并采用GPL许可协议发布的开放源代码软件。GPL协议意味着任何人都可以复制、分发及修改源代码。同时,Drupal具有丰富的文档支持和强大的专业化社区。Drupal中国社区也有很多Drupal爱好者和开发者,他们为Drupal文档的中文化作出了巨大的贡献。

图1-3 Drupal China官方网站首页

由于Drupal是用PHP编写的,因此,可运行在Windows、Mac OS X、Linux、FreeBSD、OpenBSD、Solaris和其他任何支持PHP解释的服务器中。它目前支持MySQL和PostgreSQL数据库。笔者推荐使用Linux作为网站服务器环境,因为相比Windows + IIS的组合,LAMP(Linux + Apache + MySQL + PHP)更稳健,且性能更佳。

Drupal的最大特点是具有可扩展性。在Drupal的官方网站上,有数以千计的模块供使用者下载。这些模块涵盖了应用中的各个方面,如内容处理、电子商务、主题展现等,而且还有优化性能的模块。同时,正由于其优秀的可扩展性,它也通常被作为一种“网络应用程序框架(Web Application Framework)”。使开发者无须重复开发基础功能模块,而可将重点放在高级的自定义特性的开发上。这一点在本书的高级篇中将详细进行讲解。

无论使用者是否精通PHP或相关的编程技术,都能很好地使用Drupal。当然,更高的编程技巧意味着能更好地使用Drpual,它提供了简洁但强大的模块机制以及丰富的API,如果开发者的编程技能很好,那么Drupal必将成为其强大的建站工具。
 

1.2.2 Joomla

Joomla是Drupal主要的竞争对手,也是目前使用非常广泛的开源内容管理系统之一。它具有完善的内容管理功能,每个文章内容包括多种属性(如分类、所属区、发布状态、路径别名等),同时还有“回收站”功能——一个文章被删除后,先移至回收站,只有从回收站删除后才彻底删除。这样的机制对保护内容很有帮助。Joomla支持多主题模板,同时通过组件(Component)和插件(Plug-in)来扩展系统功能。Joomla的宣传口号是:让不会用PHP的管理员可以轻松的构建网站。

Joomla有统一的管理后台,可以执行站点管理的各种操作。如图1-4所示为Joomla的后台管理界面,首页面包括“发布新文章”、“首页管理”、“语言管理”等管理链接。

文章发布页面如图1-5所示,每个文章具有路径别名(Alias)和分类等属性。同时Joomla集成了Tiny MCE网页文本编辑器,便于管理员对文章内容进行样式修改。

图1-4 Joomla后台管理页面

图1-5 发布文章页面

Joomla官方的演示网站如图1-6所示,当前主题为Joomla的蜜蜂(Bee)主题。

Joomla的用户只能通过后台管理系统创建,但并不支持在线注册的功能。而Drupal原生提供了用户注册机制,只要设置为开放注册,则互联网用户便可以进行在线注册。它的核心模块也提供了博客、评论以及论坛等功能,并对内容创建也属于“协作式”平台,每节点也可以支持多版本,所以Drupal在Web 2.0方面更为擅长。

Joomla提供了内置的用户组,包括“作者(Author)”、“编辑(Editor)”、“发布者(Publisher)”和管理员等,但用户组是固定的,不能添加或删除用户组。而在Drupal中,尽管只提供了两个默认的系统角色:匿名用户(Anonymous)和注册用户(Authenticated),但管理员可以添加新的用户角色。同时,Drupal内置了权限机制,每个权限表示进行一项操作所需的权限,只有具有这个权限的用户才可以执行此操作。并且权限可以和用户角色相关联,这样凡是属于此角色的用户就拥有了相应的权限。

图1-6 Joomla的Bee主题

从系统的二次开发角度看,Joomla的开发风格和Java相近,模块需要继承JComponent类,而插件需要继承JPlugin类。Drupal则使用注册文件声明模块,并通过一系列的钩子函数实现对Drupal内核的修改和功能扩展。所以Drupal的开发属于“半面向对象、半面向过程”,在对核心对象(如用户、节点、类等)进行了类的封装外,对类的操作和常用的处理均通过函数直接完成,这在很大程度上保持了PHP的优势,使开发者更容易上手。

和Drupal相比,Joomla是一个比较专业的“内容管理系统”,它比较适合单纯以内容为主的网站。而Drupal则更具有Web 2.0的网站功能和风格,是一种多人协作式的内容管理与展示平台,且更符合“框架”的特性;其用户权限模型的灵活性很大,定制起来非常容易。

1.2.3 Typo3

Typo3是一种在GPL下发布的企业级内容管理系统,全世界有很多网站都使用它作为WCM。它历史比较悠久,所以支持的语言也比较多。许多大学、公司、政府机构和非营利组织也在使用它。图1-7为Typo3的首页截图。

Typo3是一个比较大型的系统。尽管它有一个很大的社区,也有大量用户采用它,但Typo3对使用者的编程水平要求较高,故它的学习过程很长。Typo3的网站上也提到:如果用户想在短时间内上手并搭建一个内容管理系统,那么Typo3不是最佳的选择。

Typo3的大部分核心模块和第三方模块使用的是比较早的技术,结构也不是很好,例如大量地使用了表格作为页面布局的实现方法,没有很好地使用CSS;因此,它的模板系统与Drupal和Joomla相比是较为复杂和陈旧的。

图1-7 Typo3的首页截图
 

1.2.4 WordPress

WordPress是当前最流行的PHP博客系统,它免费、开源、简洁并且主题丰富,是大多数个人博客的首选建站程序。它使用PHP开发,MySQL作为数据库系统。它具有标签、分类、文章评论等常用的功能,还可以安装第三方插件以扩展其功能,其官方博客页面如图1-8所示。

图1-8 WordPress官方博客页面

WordPress有统一的管理后台,如图1-9所示,提供了系统各方面的配置,如文章管理、分类设置、站点相关信息设置等。文章发布页面如图1-10所示。

 

图1-9 WordPress的后台管理

图1-10 WordPress的文章发布

WordPress最受欢迎的特性之一,是它丰富的主题模板。它拥有近百种免费的主题,且样式美观。如图1-11所示为WordPress的主题管理部分,在这个页面中可以查看大量主题,只需要单击“Install”按钮,即可完成主题的下载与安装,非常方便。

如果只是做博客系统,WordPress比Drupla更为简洁和轻便,比如它只使用了11个数表用于存储内容。但是,如果博客只是系统中的一个次要功能,从可扩展性角度讲,Drupal则更为适合。Drupal也具有Blog模块,在开启后可以提供简单的博客功能,但要到达WordPress的效果,则还需要使用第三方模块并进行相关的定制。

图1-11 WordPress的主题浏览
 

1.2.5 比较

前面列举了几种开源的使用PHP开发的WCM,下面从以下几方面对最常用的Drupal、Wordpress和Joomla做一下比较。

  • 安装难易度:包括程序的安装和数据库的安装。即从下载到正式使用期间的过程的开销。
  • 学习难易度:包括系统的易用性、管理界面的可操作性以及其接口或扩展机制的学习难易度等。
  • 会话管理:会话管理是指服务器对当前用户的各种状态的控制与存储。除了PHP原有的会话管理机制外,WCMS一般会扩展会话管理机制,以实现更强大的会话管理机制。例如Drupal实现了基于数据库的会话管理机制。
  • 用户管理:是否支持多用户注册以及对用户的权限管理等。
  • 可扩展性:如果系统允许并很好地支持开发者开发自己所需的功能,那么这个系统的可扩展性就比较强。开发者自定义的模块或组件可以轻松地发布并为他人所用,这也是可扩展性的另一个重要体现。
  • 可伸缩性(Scalability):系统的可伸缩性包括纵向和横向两方面。纵向可伸缩性是指在同一个逻辑单元内增加资源来提高处理能力。例如通过硬件设备的增加(如升级为更强的CPU或扩大内存或存储空间容量)来增强其性能,支持更多的用户或获得更快的运行速度等。横向可伸缩性是指系统能够通过运行更多的程序实例或者采用分布式处理来增强处理能力。数据库集群、分布式文件系统、负载平衡都是提高系统横向的可伸缩性。
  • 主题模板支持:主题模板的易开发程度,以及现有的主题模板的数量。
  • XHTML/CSS:对标准的支持程度影响着主题模板的可编程性。

表1-1展示了上面提到的几个开源CMS系统特性的对比,5分表示程度最高。

表1-1 几个WCM的比较

 

Drupal

Joomla

WordPress

安装难易度

3

5

5

学习难易度

3

3

1

会话管理

5

3

1

用户管理

5

5

1

可扩展性

5

3

3

可伸缩性

5

5

1

主题模板支持

5

3

4

XHTML/CSS

5

5

5

 抛开广告性的溢美之词,笔者认为选择Drupal的原因有以下几点。

  • 免费:无须支付任何费用即可下载、安装、再开发以及部署。
  • 更新较快:有很多著名的CMS,由于其更新速度慢,很长时间没有出新版本,致使大量的用户流失。而Drupal的更新速度非常快,推出的升级和补丁也比较及时,并且每年都有Drupal会议举办,让使用者对Drupal的未来很有信心。
  • 专业:强大的CMS功能,使用了当今最流行的各种网站技术。Drupal比其他的WCM更适合于PHP的专家,因为它是一个框架级的WCM,有着丰富的API及完善的代码标准和风格规范。
  • 丰富的第三方模块:在Drupal的官方网站上可以下载各种第三方模块以扩展其功能,如电子商务、内容处理、主题样式等各方面。
  • 扩展性强:模块式架构和主题模板引擎,使功能和表现样式均可以无限扩展。

 

1.3 Drupal功能总览

本节将对Drupal的主要功能和特性进行简要介绍。

 

1.3.1 内容管理

内容管理功能是Drupal的基础功能。Drupal使用节点作为内容单元,每个节点包含标题、详细内容、发布时间以及是否推荐到首页、是否置顶等多个属性。管理员也可以对节点进行结构上的更改,以创建新的“内容类型”。Drupal默认是通过“内容类型(Content type)”来区分不同的内容,也可以通过第三方扩展模块来为节点增加额外的属性。此外,还具有完善的分类机制,可以对内容进行复杂的分类控制。下面是一些Drupal内容管理方面的功能。

  • 创建、编辑和删除节点:具有创建节点权限的用户可以为站点贡献内容。节点的创建和编辑是两个不同的权限,可以分配给不同的角色。Drupal支持节点版本(Revision),可以记录下每个节点每次更改的内容。这样管理员可以选择使用哪个版本作为当前版本。这一功能结合了维基百科的特性,非常适合协作式内容创作。
  • 便捷的内容编辑:Drupal后台提供一个统一的节点管理页面,在这个页面上可以查找节点、批量更新节点状态以及删除节点。同时,如果以管理员身份查看某个节点,那么此节点页面的标题下方会直接显示当前节点的管理链接。
  • 分类(Taxonomy):在Drupal中可以创建多个“词汇表”,每个词汇表可以指定哪些内容类型可以使用。每个词汇表定义了属于本领域的多个分类项,分类项之间既可以有继承关系,也可以有“同义词”关系。如果再进行深入的研究,则可以用类别体系来表达本体(Ontology)。
  • 评论:可以设置哪些内容类型开启评论。评论的权限也是由后台控制的,匿名用户和注册用户均可以进行评论。还可以设置评论是否需要审核以后再发布。
  • 协同写作:Drupal提供一种名为“Book(文集)”的内容类型,每个文集分为多个章节,构成一个结构化的内容群组。每个内容单元即为节点。如果实时开启节点的版本控制功能,那么就实现了一个维基百科式的内容协作平台。
     

1.3.2 用户管理

Drupal是多用户系统,它支持多用户注册并具有完善的用户管理功能。由于采用了基于角色的权限管理,Drupal将不同的用户划分为不同的角色,限制其对内容访问和修改等操作。Drupal不仅能管理本地的用户,还可以使用外部的认证源(诸如Jabber、Blogger或其他的Drupal站点)进行分布式认证。在Drupal 6中,提供Open ID的统一登录机制,用户只要在Open ID网站上注册均可在开启Open ID模块的Drupal网站上登录。这是一种类似于微软的Passport一样的机制。如图1-12所示为Open ID网站的首页(网址:http://openid.net/)。

图1-12 Open ID网站首页(使用OpenID提供的验证服务可进行统一的身份验证)

Open ID允许用户使用同一账户登录多个网站,而不需要在网站上重新进行注册。使用Open ID的前提是所访问的网站支持Open ID服务。Open ID要求用户首先在Open ID网站上进行注册,填入邮箱、密码、姓名等账户信息。其他支持Open ID服务的网站,在用户进行登录时,将会根据用户提交的信息通过Open ID提供的验证服务对用户进行身份验证,如果通过则进行登录。除了Open ID的官方网站外,任何运行Open ID服务的网站均可以作为身份验证中心,甚至在局域网内搭建一个Open ID服务器也是可以的。Open ID至今已获得50000多个网站支持,其中包括Google、Yahoo!、微软、美国在线、MySpace等。
 

1.3.3 主题模板

主题模板系统将内容和显示方式分离出来,这样可以方便地调整网站的外观风格,而不影响业务逻辑。在Drupal的官方网站上,可以找到大量的设计美观、风格多样的Drupal主题,下载后可直接安装并使用。目前也有很多公司或工作室提供Drupal主题的开发服务,对网站主题模板要求高的用户可以考虑向专业的开发团队寻求支持。

模板引擎是主题模板机制的核心,Drupal支持多种模板引擎,如内建的PHPTemplate和Smarty等。PHPTemplate是专为Drupal开发的,它具有高效、易学的特性。它使用的模板是HTML与PHP混合式,不需要学习其他的模板语言。

如图1-13所示为美国奥巴马总统的“经济危机恢复网站”首页。这个网站是由Drupal构建的,用于展示政府针对经济危机所采取的各项计划以及进展情况。其风格简约、色调偏冷,但内容突出、便于网民访问,是比较优秀的Drupal网站主题

图1-13 美国的经济危机恢复计划展示网站

如图1-14所示为美国著名歌手 “流行之王”迈克•杰克逊的官方网站,也是由Drupal构建的,网页中还结合了Flash和视频等媒体技术展现页面的华丽风格。

图1-14 迈克•杰克逊的官方网站
 

1.3.4 博客平台

博客是当前互联网的主要应用,Drupal提供了多种与博客相关的功能。Blog模块提供了最基本的博客文章内容类型,用户可以发布博客文章,其他用户可以浏览某用户的博客列表。使用Drupal做个人博客也是个不错的选择,Drupal的创始人就采用Drupal作为其个人博客平台,如图1-15所示,网址为:http://buytaert.net/。

图1-15 Drupal创始人的博客

除了基本的博客功能外,Drupal还提供了Blog API和RSS订阅功能。下面分别进行介绍。

Blog API:Blog API允许用户使用桌面就用程序来更新自己的博客。Windows Live Writer、Zoundry等均是流行的博客写作客户端工具。用户可以在本地编写博客文章,在连接上互联网后发布至站点中。可以使用这样的工具集中管理多个博客站点。

RSS:Drupal提供将网站的上节点Drupal以RDF格式输出的机制,这样使用户可以对站点实现RSS订阅。drupal.org网站上的RSS订阅功能如图1-16所示。

图1-16 RSS订阅支持
 

1.3.5 论坛社区

Drupal包含了一个论坛模块,可用来创建论坛或讨论组之类的社区站点。Drupal的论坛支持多级子论坛,每个论坛均可以拥有多个子论坛。每个论坛也可以拥有不同的“板块”,这在Drupal中被称为“容器”。版块用于对论坛进行归类,但在其中不可以发表主题。具有权限的管理员可以对论坛主题进行管理,但管理粒度较粗,不能设定其只能管理部分论坛。这种权限控制需要第三方模块的支持。

Drupal的官方网站论坛是使用Drupal搭建的如图1-17所示。

图1-17 Drupal的官方网站论坛
 

1.3.6 多语言支持

Drupal是面向全球使用者的,它提供了完整的多语言支持机制,使不同地区的开发者可以创建多语言的网站、博客、内容管理系统和社区应用。Drupal的多语言支持分为两种:一种是界面多语言支持,另一种是节点内容的不同语言版本。
对于界面语言,Drupal的官方网站上已经有大量的语言包,可直接导入Drupal进行界面的本地化。网站的注册用户可以自定义界面语言。目前Drupal主程序已有中文语言包,但并不是所有第三方模块均有中文语言包,可能需要读者自己进行汉化工作。对于没有翻译的界面文字,Drupal提供了翻译功能,可以查找要翻译的字符串并增加翻译。

图1-18为使用Drupal搭建的Drupal法国网站。

图1-18 Drupal的法国网站

对于节点内容的不同语言版本,这个功能对于国际化的网站是非常有用的。比如网站可以向国外用户展示英文内容,而向国内用户展示中文内容。开启Drupal的本地化模块(Locale)后,可以为每个节点创建不同语言的版本。Drupal会根据登录用户的语言设置来显示相应的内容。
 

1.3.7 站点管理工具

一个站点能够良好地运行,是需要管理员不断加以管理和维护的。Drupal提供了很多站点配置以及与管理分析相关的功能,使管理员能够轻松地管理站点并监视其运行状态,及时地发现问题并进行危机处理。Drupal站点管理方面的一些特性如下。

站点状态报告:Drupal提供一个状态报告页面,列出了网站所需的软件环境的检查项(Checklist),如图1-19所示。如果某项不符合要求会红色显示,并在管理页面上报警。

分析、跟踪和统计:Drupal可以生成很多站点分析数据,例如访问日志、错误信息、流量等信息。

日志和报告:所有重要的操作和系统事件都会被捕获并记录在一个事件日志中,管理员可以随时进行查看。

基于浏览器管理:Drupal完全通过浏览器进行管理,这意味着管理员可以在任何能够连接互联网的地方管理站点,而无须任何客户端。

图1-19 Drupal的站点状态报告
 

1.3.8 模块

模块(Modules)式架构是Drupal最优秀的地方。通过各种下载第三方模块以及开发自定义模块,用户可以轻松扩展Drupal以获得更为丰富的功能。开发者可以在drupal.org上找到成百上千个不同种类的Drupal模块。对Drupal的开发也主要是通过模块进行的,掌握Drupal模块开发技巧是开发Drupal的技术基础。

1.3.9 其他特性

Drupal除具有一般的内容管理系统功能外,还具有一些其他的特性。

简洁友好的网址(Clean URL):Drupal可以让操作者为每个页面自定义一个友好的URL,这在Drupal中称为URL别名。如Drupal的“关于页面”可以通过“http:// drupal.org/about”访问,而不需要输入http://drupal.org/node/12345。这对搜索引擎优化有非常重要的作用。

全文搜索:Drupal提供搜索模块,可以让用户对网站节点、用户或评论等内容进行简单搜索和高级搜索。搜索框以区块的形式提供,可以被放置在页面的某个区域中。
 

1.4 小结

本章对Drupal的一些基础背景知识进行了介绍,包括内容管理系统的定义以及Drupal的主要特性等。大名鼎鼎的Bruce Eckel(“Thinking In C++”和“Thinking In Java”的作者)曾建议他的朋友使用Drupal。他说:“我的一个朋友Nancy Nicolaisen表示她希望搭建一个旅游网站,我建议她看一下Drupal。她听取了我的建议并最终选择了它,只进行了轻微的改动就使她的网站上线了,用她的话来说,这个用户社区吸引她的地方是它的强大和易用。”听了大师的推荐,想必读者已经摩拳擦掌,准备尝试一下Drupal了。第2章将讲解如何下载和安装Drupal。

第2章 安装Drupal 6

本章将讲解如何安装Drupal 6,以及如何创建一个简单的个人博客。安装之前需要配置好PHP的运行环境,并开启MySQL数据库服务。如何安装PHP和MySQL不属于本书介绍范围,请读者自己参考相关文档和书籍。目前PHP和MySQL在Windows下有独立安装包,安装起来相对比较简便。在Linux下,也有编译好的对应不同Linux发行版本的安装包。对于使用Windows作为开发环境的读者,建议使用AMP(Apache+MySQL+ PHP/Perl)集成环境——XAMPP。它集成了网站服务程序Apache、PHP扩展以及MySQL数据库,只需要一次安装即可完成Drupal运行环境的搭建,可以避免很多在配置Apache、PHP和MySQL过程中出现的问题,是PHP开发者的首选。

2.1 版本的选择

Drupal在经历了4系列的初出茅庐和5系列的辉煌后,现已发布了其第6个版本。Drupal最新的版本为6.10,与上一个版本相比,D6中增加了对AJAX支持,重写了主题模板引擎,支持更强大的模板自定义机制。同时,一些核心模块也做了少量的修改,不过大体上还是基本一致的。第三方模块中的CCK和Views等模块,也做了重大的升级,因此是很吸引人的。

从功能角度看,即从内容的发布和管理、用户管理、站点配置等方面,除了操作界面有些微小的变化外,Drupal 6没有显著的改变。从程序角度看,Drupal 6重写了主题模板引擎,使之更为高效和健壮,同时开发方式也做了微小的变化,比如现在每个主题都需要有注册文件,而且Drupal还会对主题相关的函数或模板进行缓存,这些在开发时都需要稍加注意。

Drupal以其丰富的第三方模块闻名,因此选择Drupal版本的一个重要参考因素,就是看所要使用的模块是否有稳定版。

Drupal的模块分为开发中版本、Alpha测试版、Beta测试版、预发布版(RC)和最终版。只有RC和最终版是可以用于生产环境的。如要对原有Drupal网站进行升级,则要充分考虑原网站自定义开发模块的迁移问题。
就目前开始学习Drupal,或使用Drupal建站的读者来说,应首选使用Drupal 6系列的最新版。
 

2.2 获得Drupal

Drupal程序的官方发布渠道只有drupal.org网站。访问www.drupal.org进入Drupal官网,在右侧将会显示当前Drupal主流版本的最新版,如图2-1所示。同时网站的第一条新闻也显示当前Drupal的下载链接,单击直接开始下载。

图2-1 Drupal首页的下载链接

Drupal安装包是.tar.gz的压缩文件,下载之后可使用WinRAR、WinZIP或7Zip等压缩软件进行解压缩。在Linux下使用如下命令将Drupal解压缩至当前目录。

tar –xvzf drupal-6.10.tar.gz

Drupal具有检查最新版本的功能。在其后台管理的系统状态报告页面中将会显示当前Drupal发布的最新版本,如果运行的网站版本不是最新版则提示管理员进行升级。
 

2.3 创建数据库

Drupal目前只支持MySQL和PostgreSQL数据库。PostgreSQL也是非常著名的开源数据库。在安装Drupal之前,需要手动创建一个供Drupal使用的数据库,并且设置好连接数据库所使用的用户名和密码。Drupal在安装时将自动生成它所使用的数据表。本节使用phpMyAdmin创建供Drupal使用的MySQL数据库。phpMyAdmin为当前最流行的基于Web的MySQL数据库管理工具。通过它可以控制无端的MySQL数据库,执行对数据库、数据表、用户等管理工作,也可以进行SQL查询。

如果使用XAMPP,那么phpMyAdmin是自动安装的,通过访问http://localhost/ phpmyadmin即可进入phpMyAdmin管理页面。如果没有使用,可以去官方首页(http://www.phpMyAdmin.net)下载最新版本。使用phpMyAdmin创建数据库和用户的具体步骤如下。

打开浏览器,进入phpMyAdmin管理界面,如http://locahost/phpmyadmin。页面如图2-2所示。

在右侧中央有“Create new database(创建新数据库)”部分,填入数据库名字,并选择编码集(Collation)。编码集是数据表中的字段值存在数据库里时所使用的字符编码,如gb2312和utf-8等。如果要存放中文内容,请选择“utf-8_general_ci”。

 

图2-2 在phpMyAdmin中创建数据库

比如将数据库命名为“drupal”,单击右侧的“Create”按钮,即完成创建。图2-3即为创建成功的页面。

 

图2-3 成功创建新数据库drupal

在命名数据库时请注意:大小写是有区别的,建议全部使用小写字母。

接着创建数据库用户。数据库的root用户可访问所有的MySQL数据库。不过,一般PHP应用程序都是明文存储数据库连接密码,因此非常不安全,如果一旦泄露,非法用户将获得数据库的最高权限。所以最好为每个数据库创建专用的用户以读取数据库,通过phpMyAdmin创建数据库用户的方法如下。
在phpMyAdmin首页面单击“权限”进入权限按理页面,如图2-4所示。
单击进入后,可以看到目前数据库中的所有用户列表。单击列表下方的“添加新用户”链接进入数据库用户添加页面,如图2-5和图2-6所示。

 

图2-4 “权限”链接所在位置

 

图2-5 创建新用户的链接

 

图2-6 添加新用户页面

在这个页面中,必填的内容是“用户名”。虽然不设密码也是可以的,但相当不安全。phpMyAdmin提供一个自动生成密码的功能,只需要单击 “重新输入”下方“Generate Password(生成密码)”区域的“Generate”按钮,即可生成随机密码。在图2-6中,创建了用户名为drupal_admin的用户,且使用了生成的随机密码——“6HTXtn5jhh:StJz.”。

创建成功后,需要给drupal_admin用户分配权限。单击“权限”链接,回到权限浏览页面。单击刚创建的用户“drupal_admin”行的“编辑权限”链接,如图2-7中标记处所示。单击后,进入权限的详细设置页面,如图2-8所示。

 

图2-7 “编辑权限”按钮

 

图2-8 权限详细设置页面

先单击第一部分“全局权限”的“全选”链接,将所有的操作全部选中。再在第二部分“按数据库指定权限”中,单击下拉框,选择新创建的“drupal”数据库。然后单击“执行”按钮,完成drupal_admin的权限设置。
 

2.4 使用安装向导

将Drupal的网站文件放置在Apache的htdocs目录(或其他Document Root目录)下后,即可运行Drupal安装向导。安装向导程序文件为根目录下的install.php。确保Apache和MySQL正常启动后,直接通过网址运行此页面即可,如http://localhost/install.php。

2.4.1 选择向导的界面语言

进入安装向导后,首先要选择安装过程中所使用的界面语言,如图2-9所示。默认情况下只支持英文,如果要使用中文或其他语言,需要先安装相应的语言包。由于Drupal的安装流程非常简单,更换界面语言还不如直接安装更简便。

图2-9 Drupal安装向导

单击图2-9中圆圈标记处的链接“Install Drupal in English(使用英语安装)”即开始安装Drupal。
 

2.4.2 创建settings.php文件

单击安装链接后,Drupal执行安装前检查。Drupal的配置文件为sites/default目录下的settings.php文件。如果此文件不存在或没有可写权限,将会出现错误提示,如图2-10所示。图中所示的错误信息告知:sites/default目录下没有settings.php文件,但 sites/default目录下有一个default.settings.php文件,是配置文件的示例。复制此文件并更名为settings.php以作为Drupal的配置文件。

设置settings.php文件权限为可写。这个操作在Linux和Windows中是不同的。在Linux中,通过使用“chmod a+w settings.php”来设置文件权限;在Windows中,在settings.php上单击右键,设置文件属性并确保“只读”选项未勾取即可,如图2-11所示。

然后,回到图2-10的错误页面,单击下方的“try again”链接。如果已关掉页面,只需要重新访问Drupal站点即可。

图2-10 修改settings.php文件

图2-11 在Windows下将settings.php设为可写
 

2.4.3 设置数据库

如果settings.php文件设置正确,并单击“try again”后,会出现如图2-12所示的界面。

 

图2-12 数据库配置页面

此页面需要填写的共有三个部分:数据库类型(Database type)、数据库名(Database name)、数据库用户名(Database username)和密码(Database password)。下面分别介绍详细的配置方法。

数据库类型:Drupal支持两种数据库类型,一种是mysqli,另一种是pgsql。这两个选项分别代表MySQL数据库和PostgreSQL数据库。这两个数据库都是著名的开源数据库。一般情况下使用MySQL作为Drupal的数据库,所以选择mysqli即可。mysqli是一个PHP针对MySQL开发的接口库,PHP程序通过一系列mysqli函数来访问MySQL数据库。

数据库名称:此处要填的是2.4.2节在“创建Drupal数据库”中创建的Drupal数据库名称。示例中创建的数据库名称为“drupal”,请注意大小写,Drupal和drupal表示不同的数据库。

数据库用户名和密码:此处填入Drupal连接数据库使用的用户名和密码。如果是生产环境,不应使用root用户。2.3节中创建了用户名为drupal_admin的数据库连接账户,这样更加安全。将“drupal_admin”用户名和密码填入对应的文本框。

还有一些高级配置,单击图中的“Advanced options”即可显示高级选项框,如图2-13所示。



图2-13 安装数据库的高级设置

主要的可配置项如下。

数据库服务器IP地址(Database host):如果是本机,只需填写localhost;如果是网络中的其他计算机,需填写其IP地址或服务器名称。

数据库服务器端口(Database port):默认的MySQL服务端口号为3306,可更改为其他端口,依MySQL服务器配置而定。

数据表前缀(Table prefix):为了便于标识(例如同一数据库中会有几个Drupal的数据库),可设置数据表的前缀。如设 drupal_为数据表前缀,则表名为drupal_access, drupal_user等。一般情况下不需要设置。

当全部输入后,单击“保存设置”(Save Configuration)按钮即可。如配置成功,Drupal会在新建的数据库中创建数据表,并将数据库配置等信息写入settings.php文件中。

如未配置成功,Drupal会提示失败原因。引起失败的常见问题主要是:

MySQL数据库服务没有启动;

MySQL数据库服务端口不是默认端口:查看MySQL的配置文件;

数据库用户名或密码错误:如忘记,可使用phpMyAdmin进行修改;

没有创建供Drupal使用的数据库。
 

2.4.4 设置站点初始信息

安装向导的最后一步是设置站点的基础信息,如站点名称、站点邮箱等。最重要的是创建“超级管理员”账户。超级员账户拥有对Drupal进行控制的最高权限,后面的小节会有专门的介绍。此外,还可设置Drupal站点的默认时区、是否开启简洁URL以及更新提示等功能。下面将逐一进行介绍。

1.站点信息

如图2-14所示为站点信息填写页面。站名名称将会显示在每个页面的上方,并链接到网站首页。站点邮箱主要用于在发送给注册用户欢迎信时,显示为“邮件发送者”。另外,也用于接受站点的管理信息,如最新升级信息等。

图2-14 填写站点信息

在安装全部完成后,也可以通过后台管理页面中的“站点信息(Site information)”进行管理。

2.创建超级管理员

如图2-15所示即为创建管理员用户的表单框。在此处注册的用户即为Drupal的超级管理员账号,它也是网站的第一个注册账号。

 

图2-15 创建超级管理员账户

Drupal 6中增加了密码提示的功能。在创建或修改密码时,页面上会即时提示所输密码的长度和是否匹配的检查信息,如图2-16所示。

图2-16 密码检查提示

“超级管理员”是Drupal站点中具有所有控制权限的用户。此账户可以进行设置网站各种属性,开启模块、设置主题等操作,并可以增删用户、创建及分配角色,可见其权力之大。因此,务必牢记第一个注册的用户名和密码,如果忘记将会造成一定的麻烦。如果不小心忘记,除了通过网站内置的“取回密码”功能(即通过电子邮件重新获取)外,还有更直接的解决方法——直接在MySQL数据库中修改用户表中超级管理员的密码。下面是详细步骤。
首先要拥有Drupal所用数据库的用户账户。使用phpMyAdmin登录后,查看Drupal的数据库,找到user表,此有为Drupal储存所有用户的数据表,如图2-17所示。

图2-17 用户信息表

单击浏览按钮可查看所有注册的用户信息。uid为1的用户即为超级管理员的信息,单击铅笔图标即可进入编辑状态。如图2-18和图2-19所示。

图2-18 修改管理员信息

密码是用MD5码的形式存放于数据库中的。因此需要使用MySQL的md5函数将输入的密码进行转换。首先在“pass”字段值的文本框中填入要更改的新密码,然后在“函数”列选择“MD5”函数并单击下方的“执行”按钮,就完成了密码的更改。

 

图2-19 修改管理员密码

3.站点相关设置

站点相关设置主要包括默认时区、是否使用简洁URL模式以及是否开启“自动检查Drupal版本更新”功能。如图2-20所示的服务器设置页面。网站默认时区主要影响网页上时间的显示。不同的时区显示时间的方式是不同的。对于中国内地,可选择“+0800”,即东八区。

简洁URL(Clean URL)是Drupal为了优化搜索引擎对网站页面的收录而提供的一个功能。Drupal中的所有页面均通过index.php进行分发(dispatch),每个Drupal页面的URL中,都会带有“?q=”字符串。比如“http://example.com/index.php?q=admin”就是指向后台管理页面。但这样既不美观,又对搜索引擎不友好。Drupal利用Apache的rewrite模块,通过在.htaccess文件中设置URL重写规则,来去掉URL中的“?q=”。比如,Drupal网站的一个页面的访问地址是:“http://example.com/?q=node/2”,那么在开启Clean URL后,网址就变成了“http://example.com/node/2”。

自动检查程序版本是Drupal 6中的新功能,可以定期检查drupal.org上发布的最新Drupal版本,并提示网站管理员有新更新。此功能是由计划任务来实现的。除了Drupal核心程序有版本更新外,所安装的模式如有更新的话,也会作出提示。但是,在某些系统中,开启此功能可能会引起后台管理页面载入缓慢的问题。每次进入后台管理页面时,系统会通过HTTP访问drupal.org以获取Drupal的最新版本信息。如果网络不连通或由于防火墙设置等原因,有可能造成无法连接drupal.org,这时系统会等待一段时间。读者应根据实际情况决定是否开启此功能。

 

图2-20 服务器设置

以上这些设置可以在安装完成后通过后台管理进行重新设定,而不是“只有一次”。此处的“简洁URL模块”,会根据Drupal所安装的服务器的Apache配置情况显示不同的提示信息。如图2-20所示的绿色背景框中提示的是“可以使用此功能”,而在有些服务器上则显示红色背景框并提示“无法开启”。这时需要修改Apache的相关配置。这一点本书将在后面的章节进行介绍。

 

2.4.5 完成安装

在执行完上面的安装步骤后,Drupal会保存相关设置显示安装完成页面,如图2-21所示。

 

图2-21 安装完成页面

在图2-21所示的页面中出现了醒目的红色背景提示框。里面的主要内容是告知管理员邮件功能未配置成功。Drupal默认会向刚创建的超级管理员账户所填写的E-mail地址发送一封确认信,如果所在服务器没有配置SMTP邮件发送服务,则会出现此邮件发送错误。Drupal发送邮件功能使用的是PHP的mail相关的函数。这个函数在Windows和UNIX下的实现和配置方法是不同的。具体技术细节请参考PHP手册。下面列出针对Windows服务器的解决办法。

第一步:获得发送邮件服务器的SMTP地址。

第二步:打开php.ini文件,将“;extension=php_smtp.dll”的注释去掉(即去掉第一个分号)。

第三步:找到下面的配置代码:

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

将SMTP修改为可以使用的SMTP服务器的地址,将smtp_port修改为所对应的端口即可。

这种设置方式比较适合于SMTP服务器针对Drupal服务器进行了配置的情况,即无须密码验证即可以直接发送邮件。对于需要密码或SSL验证的SMTP服务器,建议使用SMTP Authentication Support模块(http://drupal.org/project/smtp)。

单击如图2-21所示页面中的“your new site”链接,即进入Drupal的欢迎页面,如图2-22所示。

 

图2-22 Drupal欢迎页面

能看到此页面即证明安装已成功。页面左侧为用户登录框,右侧为默认的内容文本,里面包含了一些欢迎文字和快速链接。当在Drupal中发布内容后,首页将默认显示内容列表,而不再显示此欢迎文字。
 

2.5 Hello Drupal!

Drupal安装完成后,想必读者已想“牛刀小试”。本节将从搭建一个简单的个人博客入手,让读者初步体验Drupal网站。

Taxonomy upgrade extras: 

2.5.1 创建个人博客

Drupal的一个最常用的用途就是创建个人门户。目前很多站点是用Drupal搭建的,比如Drupal创始人——Dries Buytaert的网站。本节将讲解如何使用Drupal来构建一个具有简单功能的个人博客网站。网站的主要功能是发布博客文章,并可以为文章增加标签。同时使用一个新的主题替换Drupal的默认主题。

2.5.2 开启功能模块

博客(Blog)模块属于Drupal的核心可选模块,在Drupal安装包中自带。它提供了博客的基本功能。由于Drupal是多用户系统,因此每个注册用户均可以有自己的博客(也可以通过权限设定只有某角色的用户可以创建博客文章)。此外,“评论(Comment)”模块允许博客文章的访问者对当前文章发表评论,每个评论的回复也会以某种样式显示出来。“分类(Taxonomy)”模块用于对网站内容进行分类。Drupal引用词汇表的概念,每个词汇表中有相应的分类项。由于博客是一种内容类型,而标签可理解为是针对此内容类型的一种分类。Drupal的分类功能非常灵活,即可以让用户选择预先设定好的分类,也可以通过文本框自由输入。标签(Tags)功能可由分类模块完成。

上面提到了三个模块:Blog、Comment和Taxonomy。这三个模块在刚安装完成后的Drupal中是默认关闭的,需要手动开启。下面讲解如何进入后台管理页面开启这三个模块。

Drupal网站页面的左侧是个人导航,包含了当前用户可访问的页面链接,如图2-23所示。在图2-23中圆圈标记的“Administer”即为进入后台管理界面的链接。

进入管理界面后,单击“站点创建(Site building)”部分的“Modules(模块)”,进入模块管理列表页面,如图2-24所示。图2-25表示了要开启的模块。将前面的单元框勾选,并单击保存按钮,即完成模块的开启。

Drupal以模块组的形式显示模块。如图2-25所示的模块属于“Core(Optional)”模块组,即属于核心可选模块。

Drupal模块按开发者的不同一般分为两种:Drupal自带的模块和第三方模块。Drupal自带模块即Drupal安装包中包含的模块,由Drupal核心开发团队开发。这种模块也包括两种子分类:核心模块和核心可选模块。核心模块是默认且必须开启的,它提供了Drupal核心的内容管理等功能,如节点模块、系统模块等;可选模块即像博客模块、评论模块等功能模块,不是默认开启的,可根据网站需求有选择地开启。

 

图2-23 进入管理界面链接

图2-24 模块管理链接

图2-25 开启模块
 

2.5.3 发布第一篇博客

Drupal使用统一的内容创建页面,使发布内容更为快捷高效。每个内容的发布页面也大致相同。在页面左侧的个人导航区块中有“Create content”链接,单击即进入创建内容页面,如图2-26所示。此页面列出了系统当前内容类型的名称和描述,单击内容类型名称即进入此内容类型的发布页面。在本例中,单击“Blog entry”进入博客文章发布页面。

Drupal的每个内容单元为节点,此页面即为创建节点页面。每个节点包含一些基础属性,如标题和内容等。如图2-27所示是超级管理员身份访问时的页面,如果是普通具有发布节点权限的用户不一定看到全部的属性。比如“Menu settings”是针对菜单进行的设置;“Revision information”是为节点创建新版本。页面提供了保存按钮(Save)和预览(Preview)按钮,在正式保存前可以进行预览以查看是否达到预期效果。

 

图2-26 创建内容页面

 

图2-27 创建博客文章

在本例中,先创建一篇简单的博客文章。在 “Title(标题)”和“Body(内容)”文本框中填入适当内容并保存,成功后即显示节点查看页面,如图2-28所示。这时回到网站首页即可看到新发布的文章的预览。

 

图2-28 成功发布第一篇博客

用同样的方法,再发布一至两篇博客文章,可以更明显的看到博客列表效果,如图2-29所示。

 

图2-29 首页的新发布内容列表

至此,一个个人博客已见雏形。不过,目前使用的还是Drupal的默认主题,因此不能给人一种专业博客的感觉。Dupal内置了除Garland外的另外几种主题,而且drupal.org网站上也提供了很多主题供下载,可以选择一个比较“像”博客的主题安装在网站中。
 

2.5.4 选择合适的主题

Drupal的主题模板机制允许管理员切换不同的网站主题及安装新主题。每个主题包含了注册文件、样式表文件、模板文件以及相关的图片,有时还包含JavaScript脚本。在drupal.org的网站上可以浏览大量的主题。图2-30中标记的链接即为主题浏览和下载链接。

本节先简单介绍一下如何更换现有的Drupal主题,如何下载和安装第三方Drupal主题将在后面详细介绍。Drupal的默认主题即为Drupal.org网站的主题,名字为Garland,这个单词的意思是“胜利的花环”,Drupal志在夺取开源PHP CMS冠军宝座的野心可见一斑。此外,Drupal的安装包还提供了几个可选主题。

通过页面左侧导航链接的Adminsiter进入后台管理界面,在站点创建(Site Building)部分单击“Themes(主题)”链接,进入Drupal主题管理界面,如图2-31所示。

 

图2-30 Drupal.org上的主题下载链接

主题管理页面上列出了可开启的所有Drupal主题,如图2-32所示。

 

图2-31 主题管理链接

图2-32 主题列表

列表左侧可查看主题的预览图。从预览图中可以看出,Chameleon主题比较简洁,没有太多余的页面样式和元素,比较适合强调加载速度的博客使用。右侧的“Enabled”列中,打勾的为已开启的,“Default”列中选中的是当前网站的默认主题。在Drupal中,每个注册用户可以选择自己的主题。

在“Enabled”列中,将Chameleon主题勾选,再将其后的“Default”列选中。最后单击“保存”按钮,这样Drupal网站的主题就将更换为Chameleon主题。首页样式如图2-33所示。

 

图2-33 使用新主题的网站首页

当然,这样的界面还远不能满足博客的要求。对于懂得HTML和CSS的读者,可以在学习自定义主题模板后,在这个主题的基础上进行修改和完善,使其具有更为鲜明的特色和美感。


 

2.6 小结

本章详细介绍了如何选择Drupal版本,以及下载和安装Drupal的详细步骤。Drupal提供了一个友好的安装向导使管理员能够轻松地在服务器上安装Drupal。预先修改好Drupal的配置文件settings.php可以省略在安装向导中数据库配置部分的操作。有时通过页面配置数据库时会出现无法连接的错误,直接修改settings.php则会避免这样的问题。此外,还介绍了一些如“更改超级管理员”密码这样的小技巧,也是实际开发中非常实用的技能。

本章通过一个简单的“个人博客”网站示例,向读者展示了如何使用Drupal构建一个具有发布博客文章及评论功能的个人博客网站。这个示例只展现了“冰山一角”,更丰富的功能和使用方法将在后面的章节陆续展开。
 

第3章 Drupal 的基本概念

Drupal的基本概念主要包括节点、内容类型、模块、主题和分类等。只有对这些概念有了足够的了解,方能灵活的构建网站。本章将对这些基本概念作详细的介绍,具体的应用将在后面章节进行讲解。

3.1 节点(Node)

节点是一段内容(a piece of content),它是网站内容的基本组成单元。网站上的主要内容是由一个个节点组成的。通过观察网站上发布的各种内容(如新闻、博客、论坛帖子等),可发现它们都有如下的共同特性:

需要一个唯一的ID用于标识这个节点;

都有标题和内容;

需要记录发布时间、修改时间和发布者。

用面向对象的分析问题的方法,可以将这些内容进行抽象出一个“节点类”,节点类具有最基本的属性,而其他类(如博客文章、论坛主题等)均继承自此类,增加一些专属的属性。因此,可以认为Drupal网站中的每个节点是节点类的一个实例。

如图3-1所示为一个网站中的节点类的实例。可以看到,每个节点类除了标题、内容、发布者等共同的属性外还有专属属性。使用这样的图对网站内容进行分析是一种很好的方法。

图3-1 节点类结构图

由于节点的共性,Drupal为节点的创建和编辑准备了相同的页面,这样使管理员可以在一个页面中完成全部节点的创建。

对于不同的节点类的子类,Drupal采用“内容类型”来实现这样的功能。内容类型将在下面的章节介绍。
 

3.2 内容类型(Content Type)

内容类型(Content type)就是在抽象层次上对节点的一个归类,如上面提到的新闻和博客文章,是两种不同的内容类型。不同内容类型的文章用于不同的使用场景。每一个节点都必须属于某个内容类型,一个内容类型下可以有多个节点。

Drupal默认提供两种内容类型:页面(Page)和故事(Story)。这两者没有实质的区别,只是在显示时,故事节点会显示节点的发布信息,如时间和发布者等;但页面不会显示。页面经常用于存储如“公司介绍”等介绍性文字信息;而故事通常用于存储如“站点新闻”、“公告”等内容,且在浏览时可显示发布者和发布时间等信息。

Drupal的后台管理有“内容类型”管理功能,管理员可以创建新的内容类型并设置每个内容类型具有哪些属性。除标题、内容属性外,还提供了诸如是否支持评论、是否开启版本控制等功能选项。同时,在内容类型的设置中可以对节点的三个基本属性——是否发布在首页、是否置顶和是否发布——有选择地开启。

但是,像3.1节如图3-1所示描述的“新闻节点类”,除了基本属性外,还需要“文中插图”这个额外的属性。这时需要使用第三方模块Content Construction Kit(简称为CCK)提供的为节点增加字段的功能。此模块将在后面的章节详细介绍。
 

3.3 模块(Module)

如果说节点是Drupal的内容单元,那么模块(Module)就是Drupal的功能单元。每个模块为Drupal提供一个或多个完整的功能。上文提到的“节点”管理,还有评论管理、用户管理等功能,都是由模块提供的。

一 个模块是由一组脚本文件组成的,它用于扩展Drupal的功能。核心模块和核心可选模块是包含在Drupal安装包里的,不需要单独下载。在后台管理的 “模块管理(Module)”列表中可以看到当前系统可开启的全部模块及状态。第三方模块是由除Drupal开发团队外的开发者开发的,基本上都发布在 http://drupal.org/project/modules中,提供了从内容发布、显示、用户管理、分类等各种各样的模块,而且都是免费和开源 的。

除了直接使用核心模块和第三方模块,也可以使用Drupal API开发自定义模块。Drupal模块的核心机制是钩子函数,通过调用它可以实现对Drupal工作流程的修改。比如创建一个新的系统路径来展示自定义 页面,就需要菜单的钩子函数(hook_menu)来完成。

Drupal使用了“反向控制(inversion control即IoC)”的设计模式,使系统可以在“需要时”加载相关的模块。IoC也被称为是“依赖注入(Dependency Injection)。它的原理简单地讲就是:每个模块只实现自己的功能,何时被调用是由系统决定的。比如一个订单系统,当订单被支付时需要执行一系列操 作。每一个操作是由一个独立的模块来实现的。如果按照传统的系统架构,应该预先定义一段代码使用相关的类或函数完成订单支付后处理的工作流。但在模块化的 架构中,可以安装很多用于对订单支付后进行处理的模块。这些模块通过配置文件让系统得知其存在,并且通过某种接口方式让系统知道应调用哪些方法。那么,系 统在获知订单被支付后,就可以触发这些方法的执行。在Drupal中,模块的注册是由.info文件来实现的,而何时调用哪种方法是通过钩子函数来“通 知”系统的。

图3-2展示了系统中的模块层次结构。最底层的是Drupal框架,它提供了模块机制;上层是Drupal的五个核心 模块:节点模块(Node)、用户模块(User)、系统配置模块(System)、内容过滤器模块(Filter)和区块模块(Block)。再上层是 第三方模块,是由开发ac者使用Drupal框架和五大核心模块提供的API开发的。

图3-2 Drupal的模块架构图
 

3.4 主题(Theme)

网站的外观称为主题(theme),主要包括网站的页面布局、颜色、图片、字体、按钮等元素。国外通常用“look and feel”这个词组来说明什么是主题,它准确地表达了主题的含义,即“所看及所感”。网站不仅要美观,还要让用户使用起来“有感觉”,即使用起来非常方便,能够简洁流畅地完成网站业务流程。

Drupal主题是由一组模板文件,样式表(CSS)以及图像所组成的,也有时会包含一些JavaScript代码。Drupal默认提供了几种主题,它们的文件在程序根目录下的themes文件夹中。Drupal提供的主题包括:Garland(默认主题)、Chameleon、Marvin等,如图3-3所示。

这些主题可以在后台管理的主题管理页面中开启或关闭。此外,还可以从www.drupal.org上下载第三方提供的Drupal主题。图3-4展示了一些第三方的Drupal主题。

主题的定制是Drupal建站中最重要的一个环节。尽管Drupal的主题有很多种,但要选择一款适合自己网站的主题也绝非一件易事。大部分的解决方案是先选择一个和网站风格比较相近的主题模板,然后在此基础上进行修改。Drupal提供了“主题引擎(Theme Engine)”,制定了一整套主题开发的规范和函数,供开发者灵活创建自定义主题。如何开发自己的Drupal主题将在“开发篇”中详细介绍。

图3-3 Drupal的默认主题

图3-4 丰富多彩的Drupal主题

很多开发者对主题和模板的概念较为模糊。从范围上看,模板是主题的一部分,通常是指一类文件,这类文件规定了页面的大体框架,网站在显示某个内容时,会将内容放置在模板中适当的地方。主题是指网站整体的风格和样式,除了一系列模板文件外,还有各种图像和样式表文件等。下面这个公式很好地诠释了主题的组成:主题 = 模板文件 + 样式表 + 图像 + JavaScript脚本文件。从Drupal网站上下载的Drupal的主题,就是这些文件的集合压缩包。

 

3.5 区块(Block)

区块是用于在页面上展示一部分数据的方法。它是一个小块区域,里面可以放置文字、图片、文章列表或其他内容。这些区块通常被放置在页面的“非主要部分”。非主要部分主要是指顶部、左侧、右侧和底部。另外,区块还可以被设置只在某个页面或某类页面显示。

区块在页面中可以放置的地方称为“区域”。区域是由“主题”规定的,Durpal的主题引擎默认将页面分为五个区域,如图3-5所示。每个主题可以自定义页面模板,增加或减少区域。页面模板文件page.tpl.php中包含有区域变量(如$left、$right等),通过修改HTML代码或CSS样式可以实现对定位的修改。一个区域中可以拥有0个或多个区块,但每个区块只能被放置在一个区域中,不能同时出现在两个以上的区域。

图3-5 Drupal的默认区域

管理员可以在后台的区块管理中设置区块的所属区域,以及每个区块的属性(如标题、可访问的角色以及在哪些页面中显示等)。网站用户也可以选择其是否开启和关闭,只要系统赋予了这样的权限。

区块有两种创建方式:一种是在后台管理像创建节点那样创建区块,填入静态的HTML代码;另一种方式是通过自定义模块,使用区块的钩子函数来创建区块,这些将在后面的“开发篇”中介绍。
 

3.6 菜单(Menu)

菜单是网站中常见的页面元素,它由一系列超链接组成,并以某种方式进行排列(如权重),起网站导航的作用。菜单的内容和摆放位置是否合理,也是决定网站受欢迎程度的重要因素之一。Drupal提供了完整的菜单管理功能,可创建很多菜单组,每个菜单组中包含多个菜单项,而菜单项还可以有子项,是一个树型结构。

Drupal有三个预置的菜单组:主要链接(Primary Links)、二级链接(Secondary Links)和个人导航(Navigation),分别显示在页面上方和左侧区域中。

Drupal中还有一个“菜单系统(Menu System)”,它和本节所说的“菜单”不是同一个概念。菜单系统是框架级别的功能,用于对请求的URL进行解析,并调用相应的函数进行处理,返回页面上要显示的内容。在开发Drupal模块时,如果需要生成自定义的页面,要使用菜单系统提供的用于菜单注册的钩子函数——hook_menu来告知Drupal注册哪个路径以及相应的处理函数。
 

3.7 用户(User)

用户是网站的受众,也是网站内容的贡献者。现在大多数的网站都支持用户注册。Drupal适合构建从个人网站到社区驱动的网站(community-driven),是一个多用户系统,支持用户注册和身份验证,并具有维护个人信息的功能。

管理员可以通过后台管理的“用户管理”功能查看当前网站的全部用户,并可批量更新用户状态、按排用户角色或删除用户。Drupal采用 “基于角色的访问控制”的权限管理机制。角色可以理解为一个用户组,组内的成员具有相同的对网站的访问和操作权限。每个用户可以同时具有一个或多个角色。在后台可以管理 “用户角色(User Roles)”和“权限(Permission)”。管理员在后台管理的角色管理中可根据网站需求增加角色,如如普通管理员、新闻发布者、站点维护者等。但Drupal中有两个预先定义的角色不能被更改:

  • 匿名用户(Anonymous User):未注册用户或已注册但未同过审核的用户;
  • 认证用户(Authenticated User):已注册并同过审核的用户。

每个权限项,如创建节点(Create Story Node)等权限,是由模块提供的,使用钩子函数hook_perm在模块中定义。权限不能在后台管理中手动创建。
 

3.8 评论(Comment)

评论也是一种内容,但不作为Drupal中的一种内容类型而存在。每个评论包含标题和内容,但标题是选填的。在Drupal中,每个评论必须对应于一个节点,不能单独存在。如果开启了评论模块,并且在内容类型中设置此内容类型支持评论,那么用户即可发表对节点的评论。

另外,评论模块是论坛模块的依赖模块。论坛的每个主题帖都是一个节点,而“回帖”其实就是对主题帖的一种“评论”。因此Drupal利用“评论”功能来实现论坛的功能。这样做的好处是无须重复开发功能,充分利用现有资源。
 

3.9 分类(Taxonomy)

分类是将网站中的节点,按其内容属性进行的分类。比如上文提到的例子中,管理员可以发布各种新闻。而依据所报道内容的不同,又可以将新闻分为国际新闻和国内新闻等。这两个就属于“分类”。

在Drupal中,对内容的分类是由分类模块(Taxonomy Module)实现的。

词汇表(Vacabulory)和项(Term)是Drupal分类的核心概念。网站中会有很多内容类型,比如新闻和博客文章。那么,对于新闻和博客文章的分类就可能是不同的。比如新闻分为国内新闻和国际新闻,而博客文章可能分为文学、艺术或个人心得等。这时需要分别为新闻和博客文章各创建一个分类组,每个组里包含只针对某种内容类型的分类。这个分类组就称为词汇表。每个词汇表中包含多个分类项。如图3-6和图3-7所示为新闻的词汇表和博客文章的词汇表。

图3-6 新闻词汇表

图3-7 博客文章词汇表

分类模块也是论坛模块的依赖模块。Drupal创建了一个新的词汇表,名称为“Forum”,然后使用词汇项来表示各个论坛。由于分类项间可以有继承关系,因此使用分类就能准确地表达论坛的层次结构。图3-8是一个社区论坛结构。

图3-8 社区论坛结构
 

3.10 小结

本章对Drupal中的一些基本概念和重要术语作了介绍。这些对Drupal的使用、管理和开发都有非常重要的意义。Drupal是内容管理系统,基本概念都和内容管理领域紧紧相关,但若使用Drupal作为应用程序框架,则需要将其他业务领域的数据映射到Drupal中来。如何高效地使用Drupal的功能实现需求,是Drupal开发者最需要掌握的技能。相信随着各个功能的使用,读者会对些概念有更具体的了解,也就可以更灵活地运用Drupal了。

第4章 管理Drupal

网站从功能结构上讲分为前台和后台。前台主要负责各种内容的展示以及用户数据的采集,后台主要负责对网站信息、内容和用户以及各项配置进行管理。Drupal几乎将全部的管理功能链接统一在一个页面中“/admin”,并可按功能分类显示或按模块显示以便于查找。本章将按照功能的分类进行详细的讲解。

4.1 介绍

Drupal的后台管理总界面如图4-1所示,通过左侧个人导航中的“Administer”链接或通过其URL——“/admin”即可进入。此页面包含了所有当前系统中可以使用的管理功能,按照管理任务的类别进行了分区,主要分为五个部分:内容管理、用户管理、站点创建、站点配置以及统计报告。类似于Windows中的控制面板。

图4-1 Drupal后台管理页面布局

默认情况下,每个管理链接的下方都有描述,因此当管理内容很多时会占用大量的篇幅。通过单击页面上方的“Hide descriptions”链接,可以将这些描述隐藏,以使管理页面看起来更为简洁。如图4-2所示即为省略描述的页面。

由图4-2可见,除按管理任务分区显示管理链接外,还可以按每个功能的提供模块进行分类。单击“Administer”标题旁的“By module”即可。每当安装新模块时,如果不知道其是否增加了管理链接,则可以通过“按模块”显示管理链接的方法,找到其提供的功能。

图4-2 按模块查看管理链接

下面是一些快速访问几个管理分区的链接,在URL中通过下列链接可直接进入只属于某分类的管理任务列表。

  • admin/content:内容管理任务列表页面,可以管理节点、评论和分类等。
  • admin/build:站点创建管理任务列表页面,可以管理区块、菜单、主题和模块等。
  • admin/user:用户管理任务列表页面,可以管理网站账户、访问规则、角色和权限等。
  • admin/settings:站点配置管理任务列表页面,可以管理网站性能设置、文件系统设置和站点状态等。
  • admin/reports:站点报告管理任务列表页面,可以查看访问记录和站点日志等。
     

4.2 内容管理

Drupal的内容单元是节点,因此节点相关的管理任务是Drupal网站内容管理的中心。内容管理区的链接如图4-3所示。本节主要针对Drupal默认开启的内容管理功能进行讲解。主要包含节点管理、评论管理、节点内容输入设置、内容分类以及RSS发布等。

图4-3 后台管理的内容管理部分
 

4.2.1 创建节点

Drupal有统一的创建节点的页面,不同内容类的节点发布页面是一致的。创建节点的链接并没有出现在后台管理页面中,因为Drupal是社区型的内容管理系统,内容的创建除了管理员,还可以是普通用户。

在页面左侧区域的个人导航区块中,单击“Create content”可进入发布节点页面,如图4-4所示。也可以通过node/add的URL直接访问(如http://localhost/node/add)。此页面列出了iv 网站中现有的内容类型,如图4-5所示,单击某个类型即进入节点创建页面。Drupal默认提供两个内容类型:页面(Page)和故事(Story)。单击“Story”链接进入创建Story节点页面,如图4-6所示。

 

图4-4 选择要创建的节点类型

 

4-5 可使用的内容类型

如图4-6所示的页面展示了发布节点时需要设置的内容。但并不是所有用户均可以看到这些属性。图4-6所示的页面是超级管理员可看到的样子。如果创建节点的用户是其他角色,可能看到部分设置。下面对节点的每个属性进行说明。

1.标题(Title)

标题内容是必填字段,最大长度为255个字符。如果发布的是英文文章,那么使用Pathauto模块可以根据标题自动生成针对搜索引擎优化的URL别名。

2.内容(Body)

内容是可选字段,长度没有限制,在数据表中以longtext数据类型存储。右侧有“在光标处分隔摘要”按钮(Split summar at cursor),用于手动设置节点摘要。如果不手动指定,则Drupal会生成固定长度的内容摘要,此长度可以在后台管理的“发布设置(Post settings)”中设置。如图4-7所示为设置摘要后的Body编辑框。

当进入手动设置摘要状态时,原按钮变为“合并摘要(Join Summary”),单击此将取消分隔的摘要,与原内容进行合并。同时增加了一个选项——Show summary in full view,如果取消选择将在显示节点全部内容时不显示摘要。

 

图4-6 创建Story页面

 

图4-7 手动设置摘要文字

3.菜单设置(Menu settings)

单击“Menu settings”前的小三角号可以展开具体信息,如图4-8所示。在Drupal中,每个节点都可以直接存为某个菜单组里的菜单项。在设置中,Menu link title为链接名称;Parent item是指定显示在哪个菜单集合中。Drupal中默认的有Primary links(主要链接)以及Secondary links(次要链接)等,根据主题模板的不同显示在不同的位置。如果将Menu link title置为空,则不增加菜单项。

图4-8下方的Weight代表权重,表示菜单项所在位置。权重值大的菜单项将排在后面。权重是Drupal中最常用的属性,用于对一组项目自定义排序。

4.输入格式(Input format)

为了安全方面的考虑,对于用户的输入要进行一些处理,比如过滤HTML标签,或对一些URL链接进行屏蔽等。Drupal中提供三种默认的输入格式,这三种输入格式表示了对用户输入内容的处理方案,分别为:过滤HTML、完全HTML和PHP代码。默认情况下,普通用户只有使用过滤HTML输入格式的权限。
如图4-9所示为节点的输入格式配置,每个类型的下方给出了此输入格式下可以使用的HTML标签的说明。可以通过后台管理的输入格式设置增加或减少允许的HTML标签。

图4-8 节点菜单信息

如果要显示复杂的HTML内容,如列表、超链接等,需要使用完全HTML(Full HTML),此时Drupal将保留输入的全部HTML标签。哪些用户角色可以使用何种输入格式也是可以通过后台进行设置的。



图4-9 输入格式的选择

5.版本信息(Revision information)

Drupal可以为每次节点内容的修改保存一个副本,如图4-10所示。管理员可以选择以哪个版本为最终发布版。当为某个节点创建了一个新的revision后,节点显示页面将会出现一个新的链接——Revisions,如图4-11所示。进入后可看到此节点的所有历史版本,并标有修改时间和操作日志。其中,显示为“current version”的版本为当前用户看到的版本。每个版本后面的“revert”链接用于将此版本设置为当前版本。“delete”可以删除之。

6.评论设置(Comment Settings)

Drupal有两个地方可以设置节点是否开启评论:一个是在当前的节点发布页面;另一个是在内容类型设置页面。在此页面设置只针对本节点,而内容类型的设置是针对此内容类型下所有节点的默认设置。

 

图4-10 版本管理

Drupal为每个节点提供三种评论选项:

Disabled:关闭评论;

Read only:用户只能查看评论列表,不能发表评论;

Read/Write:用户可以查看,也可以发表评论。

只有具有“管理评论(Administer comments)”权限的用户才可以设置内容。如图4-12所示为节点评论设置。

 

图4-11 节点版本历史

图4-12 设置节点评论

7.编著者设置(Authoring information)

当保存一个节点时,会将编辑节点的用户存为此节点的编著者,但也可以手动更改。如图4-13所示为节点的编著者设置部分,在此部分中可以更改节点的编著者和默认的发布时间。当改为其他发布者后,更改后的用户具有了修改此节点内容的权限。

8.发布选项(Publishing options)

如图4-14所示为节点发布选项。在Drupal中,每个节点都有三个状态:

Published:是否已发布状态。可以将点设置为“未发布”状态,则Drupal的默认节点列表中不显示此节点;

Promoted to front page:在首页显示。Drupal在首页没有指定的情况下,默认显示所有最新发布的节点列表。如果不选择此项,那么在首页将不显示此节点;

Sticky at top of lists:在列表中置顶。同样是针对默认首页列表的情况有效。

图4-13 编著者设置

图4-14 节点发布选项

这三种状态在对节点进行程序级操作时,可以灵活地用其作为不同状态的标记。比如:一个论坛的中的帖子,如将其设置为“Sitkcy at top lists”,就等于将其“置顶”。