内容管理
还记得网络的美好旧时光吗?那时,网站管理员是万事通,从平面设计到数据库编程再到 DNS 表格操作,无所不能?然而,随着网络的成熟,单人网站变得越来越罕见。诚然,对于个人来说,创建和维护一个简单的网站仍然相对容易,但即使是最小的组织通常也会在程序员、设计师和内容提供者之间分配责任。此外,许多组织希望不同的人负责不同类型的内容,每个人对特定部分拥有最终权威。
当然,这对于出版界来说是老生常谈。当我编辑我的大学报纸时,我们使用了一种名为 Atex 的排版和排版系统。Atex 因许多原因而备受喜爱,但主要是因为它以报纸的工作方式运作。使用 Atex 系统的记者会通过按下大型专用键盘上的“发送”按钮将文章发送给他们的编辑。编辑可以查看等待他们注意的文章列表、编辑文章、将文章发送回撰写它的记者或将文章发送到排版部门。按照设计,禁止所有人查看、修改或检索他们已发送给流程链中下一个人的文章。“停止印刷!”的记者形象可能既浪漫又鼓舞人心,但在当今世界,报纸是具有严格期限的企业,这也不现实。
随着网站变得越来越像报纸,我们不应该惊讶地看到它们采用软件(称为内容管理系统或 CMS)来工作,这与 Atex 过去所做的大致相同。但是组织文档、人员和工作流程是一项艰巨的任务,特别是如果您尝试将每个人的需求都放入一个软件包中。因此,即使内容管理对于越来越多的网站至关重要,CMS 销售人员也因销售臃肿、昂贵的软件而臭名昭著,这些软件承诺很多,交付很少。
内容管理的问题之一是每个网站都有不同的需求。因此,专有 CMS 软件通常分两部分出售。客户首先支付基本软件的费用,然后至少支付相同数量的咨询和支持服务费用。因此,CMS 软件不仅昂贵,而且需要大量的实施和测试时间。换句话说,CMS 通常更接近工具包而不是完成的应用程序。这些工具包中的大多数都包含以下功能
用户:如果网站上的每个人都将被授予不同的权限,显然每个用户都需要不同的登录名。因此,CMS 配备了用户管理软件,允许您在系统上创建、删除、编辑和禁止用户。大多数系统还允许用户检索忘记的密码。
权限:正如 Linux 允许您设置不同文件的读取、写入和执行权限一样,CMS 软件通常允许站点管理员为系统上的每个用户定义不同的权限。回到我们的报纸类比,记者被允许输入内容,编辑可以修改内容(或将其返回给记者),出版商可以使内容公开可用(或将其返回给编辑)。
组:虽然理论上您可以为单个用户分配权限,但这很快就会变得乏味。因此,大多数 CMS 软件允许您将用户分组在一起,以便分配权限。例如,您可以指示 Tom、Dick 和 Harry 可以编写和编辑但不能发布,或者您可以将这些权限分配给规范名称组,效果相同。
模板:存在许多模板系统,包括 JSP、HTML::Mason 和 PHP。最好的模板系统将设计、内容和编程逻辑彼此分离,以便设计师、作家和程序员可以同时在一个站点上工作,而不会互相妨碍。
发布:Web 最大的双刃剑是它的即时性。您修改服务器上的 foo.html 的那一刻,每个人都可以看到您所做的更改。如果您犯了错误怎么办?如果您想事先测试文件怎么办?CMS 解决方案是将每件内容标记为已发布,以便外部世界查看。在文章发布之前,它是不可见的。
暂存或预览:正如报纸和杂志出版商希望在开始印刷实际副本之前看到成品的样子一样,网络出版商也希望在网站上线之前预览他们的网站。因此,许多站点运行暂存服务器,这些服务器在大多数方面与其生产服务器相同,只是它们对外部世界隐藏。测试在这些预览服务器上完成;当编辑或出版商满意时,内容将被推送到生产服务器。CMS 几乎肯定会让您以这种方式设置您的系统。
工作流程:暂存是从作者工作站到生产 Web 服务器的漫长旅程中的最后一步。内容如何通过系统的方式称为工作流程,而 CMS 的大部分工作是允许您定义和管理该工作流程。是否应该允许记者从他们的编辑那里撤回稿件?您想要多少级别的编辑?设计师在哪里适合?谁最终发送内容?所有这些问题都由 CMS 的工作流程部分处理。
发布日期:关于 Web 的好消息是事情是即时发布的。但是,如果您的公司宣布股票分割,并且必须等到星期一上午 9:00 才能透露该信息怎么办?您可以坐在电脑旁,等到时钟敲响 9:00,然后按下 Enter 键,向所有人显示文档。或者您可以使用 CMS,它通常允许您指定文章何时出现以及何时过期。
基于 Web 的编辑:虽然 Web 浏览器是用于严肃文本编辑的最糟糕的程序之一,但大多数 CMS 系统允许您使用浏览器编写部分或全部文档。公平地说,几乎每个 CMS 也允许您从本地计算机上传文件。当您在旅途中或想要润色一两件事时,基于 Web 的编辑会派上用场。当然,任何提供此类编辑功能的 CMS 也会检查尝试编辑页面的人是否被授权这样做。
搜索:大多数 CMS 包都提供某种搜索工具,因此您可以在系统中查找文档。
虽然此列表绝非详尽无遗,但它应该让您了解 CMS 尝试解决的问题类型。但是您可以想象,每个 CMS 都提供略有不同的功能集以及不同的解决这些问题的方法。
由于 CMS 大部分时间都在存储、检索和跟踪内容,因此数据库几乎对 CMS 必不可少也就不足为奇了。商业 CMS 包通常希望您使用专有数据库系统,例如 Oracle 或 Microsoft 的 SQL Server。正如您可能期望的那样,开源 CMS 软件通常被设计为与开源数据库(例如 MySQL 或 PostgreSQL)配合使用效果最佳。Zope 的内容管理框架 (CMF) 是用于创建自定义 CMS 的工具包,它也使用数据库,但在这种情况下,它是内置的 Zope 对象数据库 (ZODB),而不是外部关系数据库。
如果您曾经开发过严肃的 Web 应用程序,您会立即看到 CMS 提供的功能与您对 Web 应用程序服务器期望的功能之间存在很大程度的重叠。大多数 CMS 软件都位于 Web 应用程序服务器之上,使用其底层基础架构来处理 HTTP 连接、用户、组、权限甚至数据库 API。在某些方面,CMS 是第一个在 Web 上部署的流行应用程序类别,就像电子表格是个人计算机上使用的第一个应用程序一样。
总的来说,CMS 软件编写在应用程序服务器之上是一件好事,尤其是在开源世界中。这意味着您可以向核心 CMS 添加新模块、处理新类型的文档、更改模板、扩展数据库以及添加新类型的权限和工作流程规则。但重要的是要记住应用程序服务器和 CMS 之间的区别。前者为创建应用程序提供基础架构,后者是您可以自定义的应用程序。
因此,如果您希望创建一个基于 Web 的报纸、杂志或公司新闻站点,那么 CMS 无疑是适合您的软件类型。但是,如果您想创建一个基于 Web 的应用程序来跟踪对您最喜欢的慈善机构的捐款,那么 CMS 可能无法提供您需要的灵活性。Web 应用程序和 Web 出版物之间的区别一直很模糊,但随着 Web 应用程序变得越来越复杂,CMS 软件将被公认为您可以在 Web 平台上运行的一种产品。
由于内容管理系统通常在应用程序服务器之上运行,因此您对 CMS 的选择可能取决于其运行的服务器类型。许多公司已转向 J2EE(Java 2 企业版)作为其底层平台。事实上,著名的 Vignette CMS 最初旨在与 Tcl 一起使用,但在围绕 J2EE 的热议变得不容忽视时迁移到了 J2EE。由于 J2EE 是一种标准,而不是产品,因此客户可以分别选择应用程序服务器和 CMS 软件。您可以使用开源 Tomcat/JBoss 二人组或 BEA 或 IBM 等公司的专有产品。
如果您不喜欢 Java,或者您的开发团队更熟悉另一组技术,您可以考虑非 J2EE CMS。此类产品确实存在,我们将在未来几个月内研究其中的几种产品,例如 Zope 的 CMF、基于 CMF 的 Plone、Bricolage (Perl/PostgreSQL)、PHPNuke/PostNuke/Xoops (PHP) 和 Midgard (PHP)。
无论您决定使用哪种技术,CMS 对于制作网站都越来越必要和有用。即使您是网站上唯一的员工,迁移到 CMS 也可能是一个明智之举,即使只是为了帮助标准化您网站上内容的外观、感觉和交付。而且,如果您决定添加新类型的内容,CMS 可能也能够处理它,尽管您可能需要稍微修改一下。
CMS 软件可能是为 Web 设计的第一种应用程序类型。大多数内容管理解决方案都是昂贵且专有的,但对于那些想要更大自由度和更低成本的人来说,越来越多的开源选项可用。鉴于内容管理系统通常需要大量的自定义和调整,这又是开源工具非常适合的另一个领域。
Reuven M. Lerner (reuven@lerner.co.il) 是一位专门从事开源 Web/数据库技术的顾问。他和他的妻子 Shira 最近庆祝了他们的第二个女儿 Shikma Bruria 的出生。Reuven 的著作《Core Perl》于 2002 年初由 Prentice Hall 出版,第二本关于开源 Web 技术的书将于 2003 年由 Apress 出版。