使用开源软件设计、开发和部署协作型 Web 站点,..
时间:2007-05-25 来源:woaixiang
简介
现在,Web 站点已经成了业务的重要部分,而用来创建和部署 Web 站点的工具也变得更灵活和容易使用。但是,复杂 Web 应用程序的开发并不轻松,它们需要的不只是标准的交互方法(比如 blog)。组织中的每个应用程序常常需要进行定制。
在这个系列中,我们通过一个虚构的组织,International Business Council(IBC),来展示如何更有效地尽可能扩展 Web 站点的功能。IBC 让它的职员在一个协作型社区中与外部业务伙伴进行交流;但是,目前的 Web 站点无法满足当前的业务需要,这个站点必须进行重新设计。这个新的定制 Web 站点必须有文档存储、讨论组、专门的工作组、研讨会日程安排、日程议题描述、会话过期和其他任务。
用户的角色是通过改进战略和战术决策来改进公司提供的产品。用户社区是按照工作组的核心问题进行组织的。社区每年举办数次研讨会,以当面会晤。在研讨会上 提出问题,然后在会晤的间隔解决这些问题。Web 站点用来提供关于社区活动(比如研讨会)的信息,并跟踪会晤中所提出问题的解决进度。
现有的 Web 站点基于一个文档存储库,这个库用来交换文档、更新关于即将举办的活动的信息。但是,这个 Web 站点不足以促进社区的交互,尤其是缺乏 Web 2.0 站点的那些新功能,比如 Weblog、讨论组、RSS 提要等等。团队的目标是鼓励社区的交互,并提供一个发布框架来支持社区活动。
问题
因为这应该是个安全的 Web 站点,我们需要进行会话管理来支持过期,以及在授予访问权之前对条款和条件文档进行确认。还需要支持一种直接的操作方法来进行内容编辑 —— 如果要对内容进行操作,我们希望交互控件放在它所影响的内容旁边。
现有 Web 站点的其他问题涉及不一致的可视语言、导航和信息体系结构。内容常常隐藏在文档中,而文档放在存储库中;直到下载并查看文档之前,没有任何线索能够表明文 档中有什么内容。根据我们的分析,团队认为文档存储库采用了错误的模型。我们需要一个能够完成更多任务的内容管理系统。
设计过程
我们的设计过程是迭代式的,首先进行分析,然后是原型设计,然后是评估。我们利用调查表、备选设计和不同精度的原型让最终用户尽早参与进来。我们希望将决 策集中于业务目标和最终用户的需要。我们发现,在着手处理一组功能需求或开发之前,用户参与得越早,我们就越能了解什么特性是有用的以及怎样的决策是正确 的。我们没费多大的力气就收集了一些非常有价值的反馈,同时使用户感觉他们是设计过程的一部分。我们还获得了用户社区的高度信任。
理解设计还需要理解信息体系结构。例如,根据用户调查的发现,最重要的需求之一是对三种主要信息的访问能力:
* 关于工作组的信息
* 关于以前的和即将召开的研讨会的信息
* 关于所有成员的信息
用户反馈还清晰地表明,需要一种清洁、整齐且简单的体系结构。
我们的分析表明,访问这个站点的有三类用户:顾客、工作组负责人 和管理员。这些人影响了我们的设计和决策过程。通过了解哪些信息是重要的以及这些信息与主要用户群的关系,我们能够确定一个内容体系结构、它的层次结构、 呈现方式以及各类用户与此种信息的交互方式。例如,研讨会信息可能包括议程(即会议议题)、这些议题的日程安排、跨多次研讨会的主题以及在研讨会之间已经 解决的议题。
本系列中的 下一篇文章 将更详细地讨论我们的设计过程。
随着分析的深入,需要增加的特性也逐渐明朗化。例如,为了支持一个活跃的社区,我们希望支持对内容进行讨论和评论的功能,并支持与上下文相关的反馈和在线 协作。另一个重要的客户需求是使用惟一的中立的品牌(即可视化标识)。因为这个 Web 站点是一个中立的场所,具有不同背景的用户在这里进行协作,与任何一家公司或任何一种背景有关的强烈视觉关联都会造成不必要的障碍。
开发环境
为了简化开发过程,我们希望使用一个现有的内容管理系统来帮助生成一个及时的解决方案。大多数内容管理系统都支持我们需要的基本功能,但是都需要进行详细 的定制。开箱即用的实现不足以满足需要。我们希望以开放源码社区中已经取得的成果为基础进行开发。我们最终使用的工具就是按照这一原则选择的。
我们对开发环境有几项要求,比如能够在不依靠网络的情况下编写和测试代码的修改。在对修改进行充分测试之后,我们希望与开发团队共享代码。这个迭代式的开发循环导致我们选用一种远程版本系统 CVS,从而可以与团队成员保持同步并维护一个所有人共享的代码基。
我们选用 Eclipse 来支持这个项目,并在一个集成开发环境(IDE)中使用所有技术。Eclipse 提供了许多扩展并可以非常轻松地与 Concurrent Versions System(CVS)进行集成。Eclipse 透视图提供了几个支持当前活动的视图和编辑器。在我们的情况中,活动就是编辑 PHP 模块和 HTML 片段。Eclipse 还跟踪对代码的修改。所以,即使没有将文件签入 CVS,仍然可以从本地机器恢复文件的先前版本。Eclipse 的这个特性有助于确保不会丢失代码。我们创建了一个集中的开发和测试环境,这样就可以顺畅地处理代码并与团队的其他成员进行协作 —— 您的时间应该花费在编写和测试代码上,而不是管理文件和系统上的其他资源。
对内容管理系统的选择影响到需要使用的其他工具。对于 Drupal,这意味着用 PHP、HTML 和层叠样式表(CSS)来开发页面,用 MySQL 进行后端存储。
需求
我们建立了一套需求,这将指导我们选择内容管理系统。如果某些特性不存在,我们希望系统能够轻松地扩展以包含这些特性。这些需求包括:
* 内容与表示的分离
* 对内容进行就地(in-place) 评论
* 对内容进行就地 编辑
* 按线索组织的讨论组(Threaded discussion group)
* 控制访问特权
* 搜索内容
* 在查看任何内容之前进行身份验证
* 会话控制,包括过期以及合法条款和条件的签名
* 支持通过讨论进行社区交互
* 内容管理系统要便于学习
* 提供给客户的内容管理系统的管理界面要简单
图 1 显示了来自这个 Web 站点的最终设计的一个典型页面。在我们讨论设计和实现的不同方面时,将会详细描述这个页面。
图 1. 来自 IBC Web 站点的典型页面
典型页面
开放源码内容管理解决方案
管理 Web 站点内容有许多方法,从简单的 Web log(blog)引擎系统(只支持有限的内容发布功能)到完整的内容管理系统框架,再到应用程序框架(可以在其上构建自己的定制内容管理系统)。由于在 开放源码领域中存在众多的选择,所以很难选择适合自己需要的解决方案。
最终,我们选择了 Drupal。但是,描述一下我们进行决策的基本原则是有好处的。下一节描述一些候选系统,包括 Drupal、Mambo、Typo3、Ruby on Rails、Movable Type、WordPress 和 TextPattern。
内容管理解决方案的对比
Drupal
“Drupal 软件允许个人或用户社区轻松地发布、管理和组织 Web 站点上的各种内容。数以万计的个人和组织已经使用 Drupal 建立了不同类型的 Web 站点,包括
* 社区 Web 门户和讨论站点
* 公司 Web 站点/内部网门户
* 个人 Web 站点
* 爱好者站点
* 电子商务应用程序
* 资源目录
Drupal 支持内容管理系统、blog、协作型编写环境、论坛、时事通信、图片库、文件上载和下载等等。Drupal 是采用 GPL 许可协议的开放源码软件,由一个包括数千用户和开发人员的社区来维护和开发。Drupal 可以免费下载和使用。”(来源:CMS Matrix)
与其他内容管理系统(CMS)相比,Drupal 还相当 “年轻”。但是,我们感到这个框架编写得非常好,既健壮又非常灵活,而且有一个兴旺的开发社区,这意味着会有大量用户采用和支持它。
与其他 CMS 一样,这个框架有很强的可扩展性。我们需要的许多特性已经以模块的形式提供了,可以轻松地将这些模块与 Web 站点的核心功能集成起来。
这个框架和模板(主题化)系统完全是用 PHP 编写的;我们不需要学习另一种标记语言。如果需要摆脱这个框架,可以非常容易地做到。(当然,不建议这么做,但是这提供了最大的灵活性。)
会话管理内置在核心功能中,这是其他 CMS 没有提供的。这免去了后面的许多麻烦。
Drupal 以其可伸缩性而闻名,也就是可以支持 Web 站点从少量用户发展到企业级。这个框架还能够对站点的某些区域进行 “节流”,可以避免这些区域在高流量期间造成潜在的问题。
学会用 “Drupal 方式” 创建站点仍然需要一个学习过程,但是其难度与其他 CMS 相比低多了。为了在业务逻辑层和表示层之间自由地移动(使用 PHP 模板引擎),还需要掌握 PHP。
有人认为 Drupal 的访问控制粒度应该更细,但是我们认为可以利用灵活的可扩展性应对这方面的问题。Drupal 4.7 刚刚发布,它对 4.6 版本做了许多改进。
Mambo
“Mambo Open Source 是当今最出色的开放源码内容管理系统之一。Mambo 的默认安装很容易设置和维护。设置实用程序使用一个分 4 步的向导,允许用户安装整个系统而不需要掌握高级技术知识。安装之后,系统包含许多可供选择的模板和大量现成的功能。用户不必掌握 HTML、XML 或 DHTML,也能够添加、编辑和操作内容 —— 只需使用一个友好的编辑器输入内容并点击 Publish。更高水平的用户可以以适合自己技能的层次控制这个系统。核心文件是用 PHP 编写的 [Mambo 基于 Linux™、Apache、MySQL 和 PHP、Perl 或 Python(LAMP)],而且很容易修改。这个系统既健壮又可靠,而且由一个包括用户和专业开发人员的大社区提供支持。(到 2006 年初,Mambo 已经有 5 年历史了!)”(来源:CMS Matrix)
目前,Mambo 很流行,它提供了非常容易的安装和吸引人的容易使用的管理界面。常常被忽视的一点是,如果客户需要在您交付系统后管理 Web 站点,而您希望它能很好地工作,那么 CMS 系统的后端就会变得非常重要。
轻松的安装似乎意味着我们需要的几乎所有功能都已经就位了,可以开始主题化了。但是,与许多 CMS 一样,模板受到一个标记系统的限制,这使您无法控制标记的质量。如果标记是有效的,其结构符合语义,而且充分地设置了 CSS ID 和 class 属性以支持样式化,那么很不错。但是,如果不是这样,您就必须探索应用程序的核心,了解如何纠正生成的输出。
Mambo 只提供了有限的会话管理功能,但是仍然比其他 CMS 提供的功能多。
Mambo 的开发路径似乎有点儿混乱,而且对于这个解决方案的未来我们也没有把握。Mambo 的开发划分成几个解决方案。Miro 是一个商业产品,而 Joomla 似乎是从 Mambo 衍生出来的一种新的 CMS。Mambo 仍然存在,它的当前开发路径似乎比较稳定了。
Typo3
“TYPO3 是一种在 GPL 之下发布的企业级开放源码内容管理系统。它运行在全世界超过 122,000 台服务器上。这个应用程序已经转换为 43 种语言,正在包括 60 个国家中的超过 27,000 位用户的社区中进行积极的开发。它的用户包括 BASF、DaimlerChrysler、EDS、Konika-Minolta、Volkswagen、UNESCO 以及许多大学、政府机构和非盈利组织。”(来源:CMS Matrix)
Typo3 很大。大应用程序。大社区。有大量用户采用它。它的扩展特性和代码贡献清单很大。但是,学习它的过程也很漫长。毫无疑问,Typo3 可以完成我们需要的所有任务,但是除了复杂性之外,似乎还有其他问题。
大量核心模块和贡献的模块所生成的标记使用了 90 年代中晚期遗留下来的结构,包括大量的表格布局,没有很有效地设置 CSS ID 和 class 属性,而且有时候会有无效的结构。我们希望使用当前的最佳实践来保持设计迭代的灵活性,所以 Typo3 不适合及时开发。这个模板系统与其他解决方案相比似乎太复杂了。花费在了解如何对 Web 内容进行主题化方面的时间太多了,这个模板系统提供的好处不足以抵消这一花费。
管理界面看起来也很笨拙和陈旧,尤其是与 Mambo 相比。这是一个重要的考虑因素,因为我们最终需要将站点的管理任务交给别人。
如果我们有更多的时间,Typo3 可能是一个选项。但是,看起来它需要进行重写才能跟上潮流,才能与新兴的其他 CMS 进行竞争。在 Typo3 的新版本中,似乎将解决使用基于 xHTML 和 CSS 的标准的问题。
Ruby on Rails
“Ruby 是一种纯粹的面向对象编程语言,它具有非常简洁的语法,使编程更加优雅和有趣。Ruby 成功地结合了 Smalltalk 在概念上的优雅、Python 的易用性和 Perl 的实用性。Ruby 在上世纪 90 年代早期诞生于日本,在其后的几年中,随着更多的英文图书和文档的出现,Ruby 开始在全世界范围流行起来。Rails 是一种开放源码的 Ruby 框架,它用来开发以数据库作为后端的 Web 应用程序。Rail 的主导方针是:更小的软件和约定优于配置(convention over configuration)。更小的软件意味着实现应用程序所需编写的代码行更少。使代码更小就意味着更快速的开发和更少的 bug,这使代码更容易理解、维护和改进。稍后您会看到 Rails 如何减轻代码负担。
约定优于配置意味着不再需要冗长的 XML 配置文件 —— Rails 中没有任何配置文件!Rails 应用程序并不使用配置文件,而是使用几条简单的编程约定,从而允许通过反射和发现来查明所有配置。您的应用程序代码和运行的数据库已经包含了 Rails 需要知道的所有东西!”(来源:Rolling with Ruby on Rails)
典型的内容管理系统允许经过身份验证的用户创建内容,内容形成的页面会成为 Web 站点的一部分。但是,Ruby On Rails(ROR)并没有直接提供这个特性。它提供了一个 Web 应用程序框架。可以使用 ROR 从头构建一个定制的 CMS。
在我们的项目开始时,围绕着 ROR 掀起了一股热潮,这主要是由 37Signals 推动的,它的在线 ROR 应用程序(比如 Base Camp)给人们留下了深刻的印象。
我们喜欢这种通过框架绑定到数据库的方式。这有助于加快与数据库表列相关联的开发的重复性部分。
在我们进行研究时,这个框架还是以 blog 为中心的。其稳定性还成问题,但是我们认识到它可能可以用在未来的项目中。
创建定制的 CMS 是有意义的。例如,可以利用定制的解决方案创建一个可主题化的管理界面。但是,由于时间限制,我们需要在一个 CMS 的基础上进行构建。
blog 引擎
我们考虑使用一个现有的发布系统,它主要支持创建 blog。我们以前使用过这种系统,通过重新定义使用类别和数据的方式来支持非 blog Web 站点的内容。这些类型的解决方案无法与 Drupal、Mambo 和 Typo3 这样的系统进行竞争。例如,通常不支持 Drupal 和 Typo3 提供的那种会话管理。但是,它们提供了一种创建简单 CMS 的非常简单且快速的方式。
这些解决方案是以 blog 为中心的,下面是一些可供选择的方案:
Movable Type
“Movable Type 是一种强大的可定制的平台,它允许用户在个人发布系统中创建有吸引力和表现力的 Weblog,这个系统可以无限地定制,可以说是万能的。Movable Type 作为基于服务器的软件运行。由于提供了丰富的特性、开放的体系结构和健壮的第三方插件库(用来扩展系统的功能),Movable Type 已经被个人和公司广泛采用。全世界的开发人员创建了数以百计的插件,以此为基础,可以在熟悉的经过测试的 Movable Type 系统上构建出全新类型的应用程序。”(来源:CMS Matrix)
作为当前比较流行的 blog 发布系统之一,这个 Perl 实现拥有很大的贡献者社区和良好的支持结构。主要的障碍是其创建者 Six Apart 创建了一个收费结构来支持它的产品开发。因为我们希望创建一个开放源码的解决方案,所以很早就打消了使用 Movable Type 的念头。
WordPress
“WordPress 是一种很有新意的语义性个人发布平台,它主要关注美观、Web 标准和易用性。WordPress 既是免费的,又是无价的。简单地说,在您考虑 blog 软件时,WordPress 就是您需要的东西。通过简单易用的插件体系结构,很容易改进 WordPress 的默认功能以及添加新的功能。”(来源:CMS Matrix)
在我们的项目开始时,WordPress 正在逐渐走向成熟。与 Drupal 相似,支持这个解决方案的 wiki 风格的文档系统很有用。核心代码很干净而且容易扩展,用户界面也非常容易使用。
模板系统是一个典型的基于选项卡的系统,它完全可以与其他 blog 发布平台相匹敌。从这个系统生成的输出支持当前的最佳实践,而且内容布局和可访问性的开发也很容易。
WordPress 的不足之处是它缺乏缓存功能,我们认为这可能会限制可伸缩性。
TextPattern
“这是一种免费的、优雅的、容易使用的内容管理系统,适用于所有类型的 Web 站点,甚至是 Weblog。涉及到在互联网上发布时,新手和专家同样会遇到了一个令人烦恼的悖论:字处理程序和图形应用程序使任何人都可以很好地管理个人计算机上的文 本和图形,但是要使这些文本和图形在全球性的 Web 上可用,情况一下子就复杂化了。这个文档和目标环境表面上与本地系统相似,但实际上差别很大。在其中使用文本和图形要求开发人员具备多语言编程技能,精通 基于计算机的图形设计,而且具有圣人般的耐心。原本自信满满的开发人员在 Web 固有的编写语言的不灵活性面前大受挫折,即便处理最简单的文本也会遇到困难,使用 WYSIWYG Web 编辑器却产生出乎意料的结果,这一切都会让他们心灰意冷。设计 TextPattern 这个 Web 应用程序的目的正是为了克服在线发布的这些障碍,并简化结构良好、符合标准的 Web 页面的开发过程。”(来源:CMS Matrix)
与 WordPress 相似,TextPattern 看起来是另一个精美的 blog 发布系统。它具有干净的管理界面,似乎很容易使用。但是,它缺乏我们需要的许多特性,包括会话控制和缓存。
图 2 显示了上面讨论的产品的一些软件需求。
图 2. 一些内容管理框架的软件需求
CMS 的软件需求
决定使用 Drupal
因为我们需要让这个 Web 站点的设计对于我们自己和接受这个解决方案的任何人都很容易,所以安装框架的简便性和掌握其使用方法所需的时间就成了关键因素。尽管 Ruby on Rails(ROR)很吸引人,但是我们认为从头编写 CMS 需要花费的时间太多了,所以从考虑的范围中去掉了 ROR。
如果我们能够有效地控制对每个人的信息的访问,那么具有健壮且灵活的会话管理和用户管理会使实现更容易。当然,如果具有健壮的可插入基础结构,还有活跃的社区为现有框架提供高质量的扩展,那么实现的速度也会提高。
另一个关键因素是,随着并发用户数量的增加,可能需要很高的可伸缩性。
能够轻松地调整内容的显示方式,这一点也很重要;我们需要在开发的迭代过程和未来的任何调整期间保持灵活性。对于语义 xHTML、CSS 和可访问的设计,使用 Web 设计当前的最佳实践还需要所谓的 “可主题化”。
图 3 显示了候选解决方案在哪些方面满足我们的需求。显然,我们需要的一些东西是 blog 引擎无法提供的。
图 3. 候选解决方案与需求的匹配程度
候选 CMS 与需求的匹配程度
Mambo 在安装的简便性和 UI 方面很突出,但是开发跟踪很不够,而且在支持方面也让人不放心。
Typo3 看起来有一个庞大的社区,而且其成熟度也是我们所需要的。但是,与 Drupal 相比,学习使用 Typo3 要困难得多。
我们只需花少量时间来学习 Drupal 方式,而且这个框架看起来很有意义。我们还觉得 Drupal 提供了框架和灵活性的恰当组合,在需要摆脱框架时也可以做到。考虑了所有方面之后,我们决定使用 Drupal。开放源码 CMS 领域的形势还在不断地变化,在未来我们会重新研究这些系统和任何新系统。
Drupal 的详细情况
Drupal 包含许多内置的特性,并可以在活跃的社区支持下轻松地扩展,能够添加额外的特性组合。基本特性包括:
* 使用 Apache 的 mod_rewrite 功能提供友好的 URL
* 使用 Drupal 的模块框架轻松地进行扩展(社区开发了许多有用的模块,它们提供了分类显示、jabber 身份验证、私有消息、书签等功能)
* 个性化的环境,可以根据用户的首选项对内容和表示方式进行管理
* 基于角色的权限系统,可以控制对内容的查看和编辑权限
* 内容完全编入索引以支持搜索
* Drupal 是在数据库抽象层上编写的,所以框架可以轻松地扩展到其他数据库后端
* 支持其他内容形式,比如投票、按线索组织的评论以及讨论和内容联合
* 在一个使用 HTML、CSS 和 PHP 的模板系统中分离内容和样式
* 对日志、分析和基于 Web 的管理的支持
* 在线帮助
扩展 Drupal
我们使用 Drupal 的模块框架来添加支持 Web 站点所需的扩展特性。扩展特性包括:
* 创建一个外部网环境 —— 一个完整的站点,它要求先进行身份验证,然后才能看到信息
* 基于用户与 Web 站点的交互的会话过期机制
* 条款和条件策略实现
* 对现有的内容编辑界面进行扩展,提供 “就地” 编辑(例如,向经过授权的用户显示在 Web 页面中他们可以编辑哪些内容,允许他们选择这些内容并在原地进行编辑)
* 管理公告,发布所有成员都应该看到的信息
* 管理工作组任务、当前状态、议题等等
* 使用 Ajax 管理研讨会和议题的创建,帮助完善管理界面
* 为成员信息及其搜索提供扩展的视图和管理界面
* 以边栏形式显示额外的信息块,从而根据成员的角色和他们拥有或创建的数据显示上下文数据
* 用电子邮件向对特定内容领域感兴趣的成员发送每周信息摘要
本系列中的后续文章会讨论其中的许多扩展。
我们在 Drupal 4.6 中开发了这个 Web 站点,但是 Drupal 4.7 现已发布。本系列文章将基于 4.7 实现进行讨论。
其他内容管理框架
有许多内容管理框架。您应该根据自己的需求对它们进行评估。在本文中,您已经了解了以下系统的优点和缺点:
* Mambo
* Typo3
* Ruby on Rails
* Movable Type
* WordPress
* TextPattern
结束语
IBM Internet Technology Group 的这个文章系列将介绍如何使用开放源码软件设计、开发和部署一个协作型的 Web 站点。本文概述了这个项目和我们的需求,并对比了我们分析过的几个内容管理系统。还解释了选用 Drupal 的原因,以及如何对 Drupal 进行扩展来满足需求。
下一篇文章将描述一种灵活的设计方法,以此解决应用程序的设计过程中的问题。这个过程可以用来为 Web 站点或应用程序设计用户体验。然后介绍开发过程的技术方面,分步指导您安装开发工具和所有支持技术。然后讨论定制开发环境的其他方面。这些主题包括:
* Drupal 入门
* Drupal 与其他软件工具的交互,比如 MySQL、PHP、CSS 和 Ajax
* 构建定制的 Drupal 模块
* 对安装进行部署和调优
我们希望帮助您尽可能快速地安装和运行一套健壮的内容管理工具,使您能够高效地对 Web 应用程序进行定制。
现在,Web 站点已经成了业务的重要部分,而用来创建和部署 Web 站点的工具也变得更灵活和容易使用。但是,复杂 Web 应用程序的开发并不轻松,它们需要的不只是标准的交互方法(比如 blog)。组织中的每个应用程序常常需要进行定制。
在这个系列中,我们通过一个虚构的组织,International Business Council(IBC),来展示如何更有效地尽可能扩展 Web 站点的功能。IBC 让它的职员在一个协作型社区中与外部业务伙伴进行交流;但是,目前的 Web 站点无法满足当前的业务需要,这个站点必须进行重新设计。这个新的定制 Web 站点必须有文档存储、讨论组、专门的工作组、研讨会日程安排、日程议题描述、会话过期和其他任务。
用户的角色是通过改进战略和战术决策来改进公司提供的产品。用户社区是按照工作组的核心问题进行组织的。社区每年举办数次研讨会,以当面会晤。在研讨会上 提出问题,然后在会晤的间隔解决这些问题。Web 站点用来提供关于社区活动(比如研讨会)的信息,并跟踪会晤中所提出问题的解决进度。
现有的 Web 站点基于一个文档存储库,这个库用来交换文档、更新关于即将举办的活动的信息。但是,这个 Web 站点不足以促进社区的交互,尤其是缺乏 Web 2.0 站点的那些新功能,比如 Weblog、讨论组、RSS 提要等等。团队的目标是鼓励社区的交互,并提供一个发布框架来支持社区活动。
问题
因为这应该是个安全的 Web 站点,我们需要进行会话管理来支持过期,以及在授予访问权之前对条款和条件文档进行确认。还需要支持一种直接的操作方法来进行内容编辑 —— 如果要对内容进行操作,我们希望交互控件放在它所影响的内容旁边。
现有 Web 站点的其他问题涉及不一致的可视语言、导航和信息体系结构。内容常常隐藏在文档中,而文档放在存储库中;直到下载并查看文档之前,没有任何线索能够表明文 档中有什么内容。根据我们的分析,团队认为文档存储库采用了错误的模型。我们需要一个能够完成更多任务的内容管理系统。
设计过程
我们的设计过程是迭代式的,首先进行分析,然后是原型设计,然后是评估。我们利用调查表、备选设计和不同精度的原型让最终用户尽早参与进来。我们希望将决 策集中于业务目标和最终用户的需要。我们发现,在着手处理一组功能需求或开发之前,用户参与得越早,我们就越能了解什么特性是有用的以及怎样的决策是正确 的。我们没费多大的力气就收集了一些非常有价值的反馈,同时使用户感觉他们是设计过程的一部分。我们还获得了用户社区的高度信任。
理解设计还需要理解信息体系结构。例如,根据用户调查的发现,最重要的需求之一是对三种主要信息的访问能力:
* 关于工作组的信息
* 关于以前的和即将召开的研讨会的信息
* 关于所有成员的信息
用户反馈还清晰地表明,需要一种清洁、整齐且简单的体系结构。
我们的分析表明,访问这个站点的有三类用户:顾客、工作组负责人 和管理员。这些人影响了我们的设计和决策过程。通过了解哪些信息是重要的以及这些信息与主要用户群的关系,我们能够确定一个内容体系结构、它的层次结构、 呈现方式以及各类用户与此种信息的交互方式。例如,研讨会信息可能包括议程(即会议议题)、这些议题的日程安排、跨多次研讨会的主题以及在研讨会之间已经 解决的议题。
本系列中的 下一篇文章 将更详细地讨论我们的设计过程。
随着分析的深入,需要增加的特性也逐渐明朗化。例如,为了支持一个活跃的社区,我们希望支持对内容进行讨论和评论的功能,并支持与上下文相关的反馈和在线 协作。另一个重要的客户需求是使用惟一的中立的品牌(即可视化标识)。因为这个 Web 站点是一个中立的场所,具有不同背景的用户在这里进行协作,与任何一家公司或任何一种背景有关的强烈视觉关联都会造成不必要的障碍。
开发环境
为了简化开发过程,我们希望使用一个现有的内容管理系统来帮助生成一个及时的解决方案。大多数内容管理系统都支持我们需要的基本功能,但是都需要进行详细 的定制。开箱即用的实现不足以满足需要。我们希望以开放源码社区中已经取得的成果为基础进行开发。我们最终使用的工具就是按照这一原则选择的。
我们对开发环境有几项要求,比如能够在不依靠网络的情况下编写和测试代码的修改。在对修改进行充分测试之后,我们希望与开发团队共享代码。这个迭代式的开发循环导致我们选用一种远程版本系统 CVS,从而可以与团队成员保持同步并维护一个所有人共享的代码基。
我们选用 Eclipse 来支持这个项目,并在一个集成开发环境(IDE)中使用所有技术。Eclipse 提供了许多扩展并可以非常轻松地与 Concurrent Versions System(CVS)进行集成。Eclipse 透视图提供了几个支持当前活动的视图和编辑器。在我们的情况中,活动就是编辑 PHP 模块和 HTML 片段。Eclipse 还跟踪对代码的修改。所以,即使没有将文件签入 CVS,仍然可以从本地机器恢复文件的先前版本。Eclipse 的这个特性有助于确保不会丢失代码。我们创建了一个集中的开发和测试环境,这样就可以顺畅地处理代码并与团队的其他成员进行协作 —— 您的时间应该花费在编写和测试代码上,而不是管理文件和系统上的其他资源。
对内容管理系统的选择影响到需要使用的其他工具。对于 Drupal,这意味着用 PHP、HTML 和层叠样式表(CSS)来开发页面,用 MySQL 进行后端存储。
需求
我们建立了一套需求,这将指导我们选择内容管理系统。如果某些特性不存在,我们希望系统能够轻松地扩展以包含这些特性。这些需求包括:
* 内容与表示的分离
* 对内容进行就地(in-place) 评论
* 对内容进行就地 编辑
* 按线索组织的讨论组(Threaded discussion group)
* 控制访问特权
* 搜索内容
* 在查看任何内容之前进行身份验证
* 会话控制,包括过期以及合法条款和条件的签名
* 支持通过讨论进行社区交互
* 内容管理系统要便于学习
* 提供给客户的内容管理系统的管理界面要简单
图 1 显示了来自这个 Web 站点的最终设计的一个典型页面。在我们讨论设计和实现的不同方面时,将会详细描述这个页面。
图 1. 来自 IBC Web 站点的典型页面
典型页面
开放源码内容管理解决方案
管理 Web 站点内容有许多方法,从简单的 Web log(blog)引擎系统(只支持有限的内容发布功能)到完整的内容管理系统框架,再到应用程序框架(可以在其上构建自己的定制内容管理系统)。由于在 开放源码领域中存在众多的选择,所以很难选择适合自己需要的解决方案。
最终,我们选择了 Drupal。但是,描述一下我们进行决策的基本原则是有好处的。下一节描述一些候选系统,包括 Drupal、Mambo、Typo3、Ruby on Rails、Movable Type、WordPress 和 TextPattern。
内容管理解决方案的对比
Drupal
“Drupal 软件允许个人或用户社区轻松地发布、管理和组织 Web 站点上的各种内容。数以万计的个人和组织已经使用 Drupal 建立了不同类型的 Web 站点,包括
* 社区 Web 门户和讨论站点
* 公司 Web 站点/内部网门户
* 个人 Web 站点
* 爱好者站点
* 电子商务应用程序
* 资源目录
Drupal 支持内容管理系统、blog、协作型编写环境、论坛、时事通信、图片库、文件上载和下载等等。Drupal 是采用 GPL 许可协议的开放源码软件,由一个包括数千用户和开发人员的社区来维护和开发。Drupal 可以免费下载和使用。”(来源:CMS Matrix)
与其他内容管理系统(CMS)相比,Drupal 还相当 “年轻”。但是,我们感到这个框架编写得非常好,既健壮又非常灵活,而且有一个兴旺的开发社区,这意味着会有大量用户采用和支持它。
与其他 CMS 一样,这个框架有很强的可扩展性。我们需要的许多特性已经以模块的形式提供了,可以轻松地将这些模块与 Web 站点的核心功能集成起来。
这个框架和模板(主题化)系统完全是用 PHP 编写的;我们不需要学习另一种标记语言。如果需要摆脱这个框架,可以非常容易地做到。(当然,不建议这么做,但是这提供了最大的灵活性。)
会话管理内置在核心功能中,这是其他 CMS 没有提供的。这免去了后面的许多麻烦。
Drupal 以其可伸缩性而闻名,也就是可以支持 Web 站点从少量用户发展到企业级。这个框架还能够对站点的某些区域进行 “节流”,可以避免这些区域在高流量期间造成潜在的问题。
学会用 “Drupal 方式” 创建站点仍然需要一个学习过程,但是其难度与其他 CMS 相比低多了。为了在业务逻辑层和表示层之间自由地移动(使用 PHP 模板引擎),还需要掌握 PHP。
有人认为 Drupal 的访问控制粒度应该更细,但是我们认为可以利用灵活的可扩展性应对这方面的问题。Drupal 4.7 刚刚发布,它对 4.6 版本做了许多改进。
Mambo
“Mambo Open Source 是当今最出色的开放源码内容管理系统之一。Mambo 的默认安装很容易设置和维护。设置实用程序使用一个分 4 步的向导,允许用户安装整个系统而不需要掌握高级技术知识。安装之后,系统包含许多可供选择的模板和大量现成的功能。用户不必掌握 HTML、XML 或 DHTML,也能够添加、编辑和操作内容 —— 只需使用一个友好的编辑器输入内容并点击 Publish。更高水平的用户可以以适合自己技能的层次控制这个系统。核心文件是用 PHP 编写的 [Mambo 基于 Linux™、Apache、MySQL 和 PHP、Perl 或 Python(LAMP)],而且很容易修改。这个系统既健壮又可靠,而且由一个包括用户和专业开发人员的大社区提供支持。(到 2006 年初,Mambo 已经有 5 年历史了!)”(来源:CMS Matrix)
目前,Mambo 很流行,它提供了非常容易的安装和吸引人的容易使用的管理界面。常常被忽视的一点是,如果客户需要在您交付系统后管理 Web 站点,而您希望它能很好地工作,那么 CMS 系统的后端就会变得非常重要。
轻松的安装似乎意味着我们需要的几乎所有功能都已经就位了,可以开始主题化了。但是,与许多 CMS 一样,模板受到一个标记系统的限制,这使您无法控制标记的质量。如果标记是有效的,其结构符合语义,而且充分地设置了 CSS ID 和 class 属性以支持样式化,那么很不错。但是,如果不是这样,您就必须探索应用程序的核心,了解如何纠正生成的输出。
Mambo 只提供了有限的会话管理功能,但是仍然比其他 CMS 提供的功能多。
Mambo 的开发路径似乎有点儿混乱,而且对于这个解决方案的未来我们也没有把握。Mambo 的开发划分成几个解决方案。Miro 是一个商业产品,而 Joomla 似乎是从 Mambo 衍生出来的一种新的 CMS。Mambo 仍然存在,它的当前开发路径似乎比较稳定了。
Typo3
“TYPO3 是一种在 GPL 之下发布的企业级开放源码内容管理系统。它运行在全世界超过 122,000 台服务器上。这个应用程序已经转换为 43 种语言,正在包括 60 个国家中的超过 27,000 位用户的社区中进行积极的开发。它的用户包括 BASF、DaimlerChrysler、EDS、Konika-Minolta、Volkswagen、UNESCO 以及许多大学、政府机构和非盈利组织。”(来源:CMS Matrix)
Typo3 很大。大应用程序。大社区。有大量用户采用它。它的扩展特性和代码贡献清单很大。但是,学习它的过程也很漫长。毫无疑问,Typo3 可以完成我们需要的所有任务,但是除了复杂性之外,似乎还有其他问题。
大量核心模块和贡献的模块所生成的标记使用了 90 年代中晚期遗留下来的结构,包括大量的表格布局,没有很有效地设置 CSS ID 和 class 属性,而且有时候会有无效的结构。我们希望使用当前的最佳实践来保持设计迭代的灵活性,所以 Typo3 不适合及时开发。这个模板系统与其他解决方案相比似乎太复杂了。花费在了解如何对 Web 内容进行主题化方面的时间太多了,这个模板系统提供的好处不足以抵消这一花费。
管理界面看起来也很笨拙和陈旧,尤其是与 Mambo 相比。这是一个重要的考虑因素,因为我们最终需要将站点的管理任务交给别人。
如果我们有更多的时间,Typo3 可能是一个选项。但是,看起来它需要进行重写才能跟上潮流,才能与新兴的其他 CMS 进行竞争。在 Typo3 的新版本中,似乎将解决使用基于 xHTML 和 CSS 的标准的问题。
Ruby on Rails
“Ruby 是一种纯粹的面向对象编程语言,它具有非常简洁的语法,使编程更加优雅和有趣。Ruby 成功地结合了 Smalltalk 在概念上的优雅、Python 的易用性和 Perl 的实用性。Ruby 在上世纪 90 年代早期诞生于日本,在其后的几年中,随着更多的英文图书和文档的出现,Ruby 开始在全世界范围流行起来。Rails 是一种开放源码的 Ruby 框架,它用来开发以数据库作为后端的 Web 应用程序。Rail 的主导方针是:更小的软件和约定优于配置(convention over configuration)。更小的软件意味着实现应用程序所需编写的代码行更少。使代码更小就意味着更快速的开发和更少的 bug,这使代码更容易理解、维护和改进。稍后您会看到 Rails 如何减轻代码负担。
约定优于配置意味着不再需要冗长的 XML 配置文件 —— Rails 中没有任何配置文件!Rails 应用程序并不使用配置文件,而是使用几条简单的编程约定,从而允许通过反射和发现来查明所有配置。您的应用程序代码和运行的数据库已经包含了 Rails 需要知道的所有东西!”(来源:Rolling with Ruby on Rails)
典型的内容管理系统允许经过身份验证的用户创建内容,内容形成的页面会成为 Web 站点的一部分。但是,Ruby On Rails(ROR)并没有直接提供这个特性。它提供了一个 Web 应用程序框架。可以使用 ROR 从头构建一个定制的 CMS。
在我们的项目开始时,围绕着 ROR 掀起了一股热潮,这主要是由 37Signals 推动的,它的在线 ROR 应用程序(比如 Base Camp)给人们留下了深刻的印象。
我们喜欢这种通过框架绑定到数据库的方式。这有助于加快与数据库表列相关联的开发的重复性部分。
在我们进行研究时,这个框架还是以 blog 为中心的。其稳定性还成问题,但是我们认识到它可能可以用在未来的项目中。
创建定制的 CMS 是有意义的。例如,可以利用定制的解决方案创建一个可主题化的管理界面。但是,由于时间限制,我们需要在一个 CMS 的基础上进行构建。
blog 引擎
我们考虑使用一个现有的发布系统,它主要支持创建 blog。我们以前使用过这种系统,通过重新定义使用类别和数据的方式来支持非 blog Web 站点的内容。这些类型的解决方案无法与 Drupal、Mambo 和 Typo3 这样的系统进行竞争。例如,通常不支持 Drupal 和 Typo3 提供的那种会话管理。但是,它们提供了一种创建简单 CMS 的非常简单且快速的方式。
这些解决方案是以 blog 为中心的,下面是一些可供选择的方案:
Movable Type
“Movable Type 是一种强大的可定制的平台,它允许用户在个人发布系统中创建有吸引力和表现力的 Weblog,这个系统可以无限地定制,可以说是万能的。Movable Type 作为基于服务器的软件运行。由于提供了丰富的特性、开放的体系结构和健壮的第三方插件库(用来扩展系统的功能),Movable Type 已经被个人和公司广泛采用。全世界的开发人员创建了数以百计的插件,以此为基础,可以在熟悉的经过测试的 Movable Type 系统上构建出全新类型的应用程序。”(来源:CMS Matrix)
作为当前比较流行的 blog 发布系统之一,这个 Perl 实现拥有很大的贡献者社区和良好的支持结构。主要的障碍是其创建者 Six Apart 创建了一个收费结构来支持它的产品开发。因为我们希望创建一个开放源码的解决方案,所以很早就打消了使用 Movable Type 的念头。
WordPress
“WordPress 是一种很有新意的语义性个人发布平台,它主要关注美观、Web 标准和易用性。WordPress 既是免费的,又是无价的。简单地说,在您考虑 blog 软件时,WordPress 就是您需要的东西。通过简单易用的插件体系结构,很容易改进 WordPress 的默认功能以及添加新的功能。”(来源:CMS Matrix)
在我们的项目开始时,WordPress 正在逐渐走向成熟。与 Drupal 相似,支持这个解决方案的 wiki 风格的文档系统很有用。核心代码很干净而且容易扩展,用户界面也非常容易使用。
模板系统是一个典型的基于选项卡的系统,它完全可以与其他 blog 发布平台相匹敌。从这个系统生成的输出支持当前的最佳实践,而且内容布局和可访问性的开发也很容易。
WordPress 的不足之处是它缺乏缓存功能,我们认为这可能会限制可伸缩性。
TextPattern
“这是一种免费的、优雅的、容易使用的内容管理系统,适用于所有类型的 Web 站点,甚至是 Weblog。涉及到在互联网上发布时,新手和专家同样会遇到了一个令人烦恼的悖论:字处理程序和图形应用程序使任何人都可以很好地管理个人计算机上的文 本和图形,但是要使这些文本和图形在全球性的 Web 上可用,情况一下子就复杂化了。这个文档和目标环境表面上与本地系统相似,但实际上差别很大。在其中使用文本和图形要求开发人员具备多语言编程技能,精通 基于计算机的图形设计,而且具有圣人般的耐心。原本自信满满的开发人员在 Web 固有的编写语言的不灵活性面前大受挫折,即便处理最简单的文本也会遇到困难,使用 WYSIWYG Web 编辑器却产生出乎意料的结果,这一切都会让他们心灰意冷。设计 TextPattern 这个 Web 应用程序的目的正是为了克服在线发布的这些障碍,并简化结构良好、符合标准的 Web 页面的开发过程。”(来源:CMS Matrix)
与 WordPress 相似,TextPattern 看起来是另一个精美的 blog 发布系统。它具有干净的管理界面,似乎很容易使用。但是,它缺乏我们需要的许多特性,包括会话控制和缓存。
图 2 显示了上面讨论的产品的一些软件需求。
图 2. 一些内容管理框架的软件需求
CMS 的软件需求
决定使用 Drupal
因为我们需要让这个 Web 站点的设计对于我们自己和接受这个解决方案的任何人都很容易,所以安装框架的简便性和掌握其使用方法所需的时间就成了关键因素。尽管 Ruby on Rails(ROR)很吸引人,但是我们认为从头编写 CMS 需要花费的时间太多了,所以从考虑的范围中去掉了 ROR。
如果我们能够有效地控制对每个人的信息的访问,那么具有健壮且灵活的会话管理和用户管理会使实现更容易。当然,如果具有健壮的可插入基础结构,还有活跃的社区为现有框架提供高质量的扩展,那么实现的速度也会提高。
另一个关键因素是,随着并发用户数量的增加,可能需要很高的可伸缩性。
能够轻松地调整内容的显示方式,这一点也很重要;我们需要在开发的迭代过程和未来的任何调整期间保持灵活性。对于语义 xHTML、CSS 和可访问的设计,使用 Web 设计当前的最佳实践还需要所谓的 “可主题化”。
图 3 显示了候选解决方案在哪些方面满足我们的需求。显然,我们需要的一些东西是 blog 引擎无法提供的。
图 3. 候选解决方案与需求的匹配程度
候选 CMS 与需求的匹配程度
Mambo 在安装的简便性和 UI 方面很突出,但是开发跟踪很不够,而且在支持方面也让人不放心。
Typo3 看起来有一个庞大的社区,而且其成熟度也是我们所需要的。但是,与 Drupal 相比,学习使用 Typo3 要困难得多。
我们只需花少量时间来学习 Drupal 方式,而且这个框架看起来很有意义。我们还觉得 Drupal 提供了框架和灵活性的恰当组合,在需要摆脱框架时也可以做到。考虑了所有方面之后,我们决定使用 Drupal。开放源码 CMS 领域的形势还在不断地变化,在未来我们会重新研究这些系统和任何新系统。
Drupal 的详细情况
Drupal 包含许多内置的特性,并可以在活跃的社区支持下轻松地扩展,能够添加额外的特性组合。基本特性包括:
* 使用 Apache 的 mod_rewrite 功能提供友好的 URL
* 使用 Drupal 的模块框架轻松地进行扩展(社区开发了许多有用的模块,它们提供了分类显示、jabber 身份验证、私有消息、书签等功能)
* 个性化的环境,可以根据用户的首选项对内容和表示方式进行管理
* 基于角色的权限系统,可以控制对内容的查看和编辑权限
* 内容完全编入索引以支持搜索
* Drupal 是在数据库抽象层上编写的,所以框架可以轻松地扩展到其他数据库后端
* 支持其他内容形式,比如投票、按线索组织的评论以及讨论和内容联合
* 在一个使用 HTML、CSS 和 PHP 的模板系统中分离内容和样式
* 对日志、分析和基于 Web 的管理的支持
* 在线帮助
扩展 Drupal
我们使用 Drupal 的模块框架来添加支持 Web 站点所需的扩展特性。扩展特性包括:
* 创建一个外部网环境 —— 一个完整的站点,它要求先进行身份验证,然后才能看到信息
* 基于用户与 Web 站点的交互的会话过期机制
* 条款和条件策略实现
* 对现有的内容编辑界面进行扩展,提供 “就地” 编辑(例如,向经过授权的用户显示在 Web 页面中他们可以编辑哪些内容,允许他们选择这些内容并在原地进行编辑)
* 管理公告,发布所有成员都应该看到的信息
* 管理工作组任务、当前状态、议题等等
* 使用 Ajax 管理研讨会和议题的创建,帮助完善管理界面
* 为成员信息及其搜索提供扩展的视图和管理界面
* 以边栏形式显示额外的信息块,从而根据成员的角色和他们拥有或创建的数据显示上下文数据
* 用电子邮件向对特定内容领域感兴趣的成员发送每周信息摘要
本系列中的后续文章会讨论其中的许多扩展。
我们在 Drupal 4.6 中开发了这个 Web 站点,但是 Drupal 4.7 现已发布。本系列文章将基于 4.7 实现进行讨论。
其他内容管理框架
有许多内容管理框架。您应该根据自己的需求对它们进行评估。在本文中,您已经了解了以下系统的优点和缺点:
* Mambo
* Typo3
* Ruby on Rails
* Movable Type
* WordPress
* TextPattern
结束语
IBM Internet Technology Group 的这个文章系列将介绍如何使用开放源码软件设计、开发和部署一个协作型的 Web 站点。本文概述了这个项目和我们的需求,并对比了我们分析过的几个内容管理系统。还解释了选用 Drupal 的原因,以及如何对 Drupal 进行扩展来满足需求。
下一篇文章将描述一种灵活的设计方法,以此解决应用程序的设计过程中的问题。这个过程可以用来为 Web 站点或应用程序设计用户体验。然后介绍开发过程的技术方面,分步指导您安装开发工具和所有支持技术。然后讨论定制开发环境的其他方面。这些主题包括:
* Drupal 入门
* Drupal 与其他软件工具的交互,比如 MySQL、PHP、CSS 和 Ajax
* 构建定制的 Drupal 模块
* 对安装进行部署和调优
我们希望帮助您尽可能快速地安装和运行一套健壮的内容管理工具,使您能够高效地对 Web 应用程序进行定制。
相关阅读 更多 +