出处
http://www.ibm.com/developerworks/cn/web/i-osource1/

管理 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. 一些内容管理框架的软件需求



决定使用 Drupal
因为我们需要让这个 Web 站点的设计对于我们自己和接受这个解决方案的任何人都很容易,所以安装框架的简便性和掌握其使用方法所需的时间就成了关键因素。尽管 Ruby on Rails(ROR)很吸引人,但是我们认为从头编写 CMS 需要花费的时间太多了,所以从考虑的范围中去掉了 ROR。
如果我们能够有效地控制对每个人的信息的访问,那么具有健壮且灵活的会话管理和用户管理会使实现更容易。当然,如果具有健壮的可插入基础结构,还有活跃的社区为现有框架提供高质量的扩展,那么实现的速度也会提高。
另一个关键因素是,随着并发用户数量的增加,可能需要很高的可伸缩性。
能够轻松地调整内容的显示方式,这一点也很重要;我们需要在开发的迭代过程和未来的任何调整期间保持灵活性。对于语义 xHTML、CSS 和可访问的设计,使用 Web 设计当前的最佳实践还需要所谓的 “可主题化”。
图 3 显示了候选解决方案在哪些方面满足我们的需求。显然,我们需要的一些东西是 blog 引擎无法提供的。

图 3. 候选解决方案与需求的匹配程度


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 管理研讨会和议题的创建,帮助完善管理界面
  • 为成员信息及其搜索提供扩展的视图和管理界面
  • 以边栏形式显示额外的信息块,从而根据成员的角色和他们拥有或创建的数据显示上下文数据
  • 用电子邮件向对特定内容领域感兴趣的成员发送每周信息摘要
其他内容管理框架

有许多内容管理框架。您应该根据自己的需求对它们进行评估。在本文中,您已经了解了以下系统的优点和缺点: