Drupal如何工作
从概念来讲,Drupal堆栈如图1-5所展示一样,Drupal是一种介于后端和前端的中间层。后端运行,前端显示。
在底层,操作系统、网络服务器、数据库以及PHP等操控这一切。操作系统维护通道以让网站正常运行:如处理一些诸如网络连接、文件、文件权限等低级别任务。网络服务器让计算机与网络连接并且保证能通过http://www.example.com访问。而数据库则负责保存数据:把站点上的所有内容、用户账号、配置信息保存在中心以备系统随时检索使用。PHP作为一个程序语言它负责动态生成页面并从数据库中向网络服务器推送信息。
Drupal本身又由多层组成。在它的最底层,在PHP基础之上,通过增加一些诸如用户会话处理和用户验证、安全过滤和模板渲染等子系统,为系统增加新的功能。在这之上,是模块层,模块是一种可自定义功能的插件系统,下面将会讨论到。模块添加功能和并生成任何给定页面内容,但当这些页面展现给用户之前,它需要先通过主题系统。主题系统允许修改和精确的调整,它能满足即使是最挑剔的设计师的需求。第十一章我们将会讲到主题系统。
主题系统一般情况下以XHTML形式输出内容页面,当然其他渲染方式也是支持的。CSS用来控制布局、颜色和字体。Javascript被加入进来处理一些动态元素,如表单中的可折叠字段和Drupal管理界面的拖放表格行。
我们已经讲了网站建设的三段史,从一开始的用HTML静态文件建站,到脚本使用的过渡,再到全功能应用程序建站的新路。而这第三代方法——也即Drupal建站之法,建立在一套新的概念之上。任何一个Drupal建立的站点都会用到它们。
图1-5
模块
几乎可以说整个Drupal都是围绕着“模块”(modules)而展开的。模块是一些包含PHP代码和一系列Drupal知其用法的功能文件。Drupal所有的管理和终端用户功能,从基础的登录、发布内容到动态图库、到复杂的投票系统,都来自于模块。例如联系模块,提供全站联系表单,还有用户模块,用来处理用户认证和权限检查。在其他一些CMS程序中,模块也被称为插件或者扩展。
模块有两种:一种是核心模块,为Drupal自带,一种是“贡献”模块,由Drupal社区提供并且可以单独下载和开启。除少数必要的核心模块,所有模块都可以开启或关闭,这取决于您的网站的确切需要。
尽管有这么多在功能上可以"随取随舍"的模块,但在过去的这么多年,Drupal社区通常更加注重如何让模块在一点上做好,那就是让模块与其他模块的结合。这就意味着你对你网站的外在展示和内在运行有着几乎是全盘的控制力。你的图库将不限于初始开发者想象的那样,你可以给它添加评价、评论以及让图片按相机类型排序而不是按日期排序,只要你喜欢。当然,要实现这个,你需要组合各种模块和糅合各种选项,而不仅仅是在”图库“那里打个”√“就万事大吉了。Drupal的强大功能也带来了一个其他很多CMS程序所没有的学习难题,面对着这么多的模块,要决定选用哪个模块实属不易。附录B专门为你提供了如何选择胜任并且适合你项目需求的模块的方法和窍门。
用户
下一个Drupal建站的基石就是用户概念。对于一个简单的手册式网站,只需要单一管理员来更新内容供用户浏览,那么你可能只需要创建一个用户即管理员就可以了。但是对于一个社区论坛网站,你得允许用户自己注册并且创立他们自己的账户。

新站的第一个用户——User 1有点特殊。类似于UNIX服务器的根用户,User 1在全站拥有全部权限。正因为User 1能够忽略一般安全检查,所以当你用这个账号去做日常的编辑工作时,很容易意外的删除些内容或者中断网站运行。因此建议把这个账号限定于仅用来做管理和配置工作,然后另外设立一账户用来发布内容。
每一个新增加的用户都可以归为某一设定角色,如”编辑“、”付费用户“或者”VIP“。每个角色在站内拥有不同的权限:访问特定网址,查看特定类型的内容,发表评论,完善用户资料,甚至创造更多的用户和控制他们的权限。默认情况下, Drupal有两个预定的角色:认证用户和匿名用户。只要注册账号就自动取得认证用户角色,没有注册账号的访客(或者未登录用户)则为匿名用户。
内容(节点)
节点是Drupal又一个并且是最重要的构件之一。任何一个Drupal站点规划的很重要的一部分就是看你准备采用哪一内容类型。一般每一站点,其内容类型是不同的。
所有节点,不管储存何种内容类型,都有几个共同的属性:
- 作者
- 创建时间
- 标题
- 内容
你想发布一个有关你公司隐私政策的页面吗?这就是节点。你想你的用户在你的站上发布博客吗?每篇博客就是一个节点。你想用户会发布一个连接到其他网上的有趣故事的连接吗?那么,你猜对了,这每一个连接都将保存为一个节点。
除了节点的这些基本的、共同的属性之外,所有节点还能利用某些内置的特性,如用标志(flag)来表明哪些是发布了的,哪些是未发布的,并且设定每种节点的显示方式。允许创建或者编辑某类节点的权限也能根据用户角色分配。例如,博客用户可以发布博客,但仅允许管理员或者编辑创建”新闻“节点。
图1-6。所有节点有着基本的共同属性;节点也能定义另外的、专门的域;模块也可以给节点添加额外的特性。

节点还能保存版本信息,详细记录它们自创建以来的每次变动。如果你出错了(比如删除了”关于我们“页面中一个重要的段落),这个可以让你很容易恢复到前一个版本。
Drupal预设有两种节点类型:”页面“(page)和”故事“(story)。它们之间没有多大的区别——它们除有着所有节点的标准特性外,没有什么。唯一的区别在于两者的默认设置。”页面“默认状态下不显示作者及发布时间等信息,比较适用于那些原始作者无关紧要的类似”关于我们“或者”服务条款“等内容。而”故事“则显示那些信息,并且一般在发布后就默认显示在首页。其结果有点类似博客的最新故事列表。
您可以使用Drupal的内容管理工具,自己来创建其他“简单”的节点类型。许多管理员创建一个“新闻”或“公告”节点类型来发布官方公告,而其他人则用故事节点投稿。但是,如果你需要保存除了”标题“和”内容“之外的更多信息,怎么办?插件模块可向Drupal的内容体系中添加包含更多特性的节点类型。例如(Drupal已有的)“调查”模块。当用户创建新的“调查”节点时,他们创建一个调查问卷清单,而不是通常的“内容”主体。调查节点显示给访问者的是投票的表单和对每个问题的投票情况的自动统计。
另外,还有其他的模块可以给节点添加诸如评论、评价、文件上传域或更多的属性。在控制面板里面,你可以指定哪类节点使用这些特性。如图1-6所显示。
通过模块给节点系统添加属性的思路意味着所有Drupal的内容都是建立在相同的底层框架之上,这正是Drupal最为强大之处。类似搜索、评价、点评等所有的特性都变成了一种你所定义的节点类型的即插即用组件,因为在底层,Drupal知道如何(让它们)与节点这个最基本的元素协作。
通过插件模块来添加新的节点类型——或者在既有的节点之上添加新的域,这在Drupal是一项非常常见的工作。本书,我们将接触到数以百计的这类插件模块,你也将学会用这些基本工具来创立一些新的复杂的内容类型。
内容组织方式
另外一个重要的构件,确切的说应该是一个告诉你如何去组织你站点内容的工具集。第一代网站通过文件夹和目录给页面分组,第二代则用脚本来管理和显示不同的内容。而Drupal则把所有内容存为一个节点。你如何来把你的站点内容区分为专题,博客或其他组织形式呢?
首先,每一节点都对应有自己的网址,默认情况下,网址类似为http://www.example.com/node/1。Drupal内置的路径模块(Path module)可将其转换成用户喜欢的路径形式,如http://www.example.com/about。为内容组织需要,所有的节点被视为是一个专一的内容库。其他的每个页面如专题概述、最近新闻等等都是从这里按照一定的标准调用一系列节点然后分别在不同地方显示出来而已。下面举几个例子:
首页
默认情况下,首页是个类似博客的包含10条最新内容的概览页面。要实现这个,Drupal在内容库中查找标志为“发布”(Published)的节点,然后查找标志有“推送到首页”(Promote to front page)的节点。另外,那些标志为“置顶”(Sticky)的节点任何时候都排列在顶部位置,这个特征对发布那些每个用户都应该看到的热点新闻和公告内容很有用处。
分类模块
我们前面说过,插件模块可以给节点添加新的信息,分类模块正是如此。通过分类模块,站点管理员可以为这些关联的主题设立分类,如同博客中的自由标签关键字。也可以用它预设“区域”,使新的内容归类其下,如同博客发布者手动输入的“标签”一样。分类模块把所有这些称之为“检索词”,并且为每个检索词提供一个页面。当用户访问其中一个页面时,Drupal把标记于这个检索词的所有节点列表出来。
博客模块
Drupal内置的博客模块仅做三件事就实现了一个多用户博客系统的功能。一、新建“博客主题“节点类型;二、在 http://www.example.com/blog提供一个显示所有已发布博客节点的页面(如果博客在发布时选择”推送到首页“的话,它将同时在首页显示。Drupal从来不会因为一个内容在别的地方显示了就隐藏它);三、为每个用户所发布的博客提供一个专门的页面。如:http://www.example.com/blog/1,显示所有为User 1——即管理员所发布的博客文章。
Drupal有好多个其他的模块可以用来以多种方式组织节点内容,并且有不少可供下载的插件模块同样为你提供了选择。但是最需要记住的是,Drupal中的这些”页面“是下列二者之一:专门的内容节点或有着相同属性的节点列表。
辅助内容
除了内容和内容列表,页面中还有多种内容补充形式。Drupal核心中带有的两个辅助内容是评论和区块。
评论仅是用户对某一内容的回复,而且仅与该内容关联。用户通常通过评论对节点中主题内容反馈自己的想法,特别是在博客或论坛中那些有争论性的主题中。跟节点一样,但达不到节点的程度,评论也可以通过贡献模块来扩展功能特性,如使自己带有评价或者上传文件的功能。
评论还可带有很多的选项:评论可直接列表显示也可以连接到其他地方显示,评论可以按发布时间的先后倒序或者顺序排列,也可以设定匿名用户是否可以发表评论,如果允许匿名用户发表评论,又可以设定用户发表评论时用户联系信息是必填还是选填。
区块是一些嵌入边栏、页脚、页头等区域中的组件。它们一般用来显示一些连接或一些类似“热点内容”或“最新评论”的动态列表,或其它类似的东西。用户构件控制用户登陆和用户信息,节点主要显示内容,而区块则提供一些关联站点结构的内容。
很多情况下,区块显示的内容会因登陆用户的不同而不同:比如“好友评论”区块,显示当前用户好友所发布的评论。很显然,每个登陆用户看到的内容是不一样的。另外,区块还能设置成仅在某些页面显示,或者仅在某些页面不显示。



Comments
Post new comment