Zope CMF

作者:Reuven M. Lerner

在过去的几个月里,我们总体上研究了内容管理,并特别研究了开源的 Plone 内容管理系统 (CMS)。Plone 肯定是一个功能强大的 CMS,人们几乎可以在安装后立即使用它。Plone 的主要优点是它的简单性——它易于安装、易于使用且易于定制。

但是,定制 Plone 或任何 CMS 都只能到此为止。如果您不喜欢 Plone 呆板的外观,您无疑可以更改它以支持不同的模型。但是,如果您想要与 Plone 提供的完全不同的工作流程,那么尝试进行这种更改可能是浪费时间和精力。相反,编写您自己的 CMS 或定制一个旨在在该领域具有灵活性的 CMS(如果更复杂)是有意义的。

事实上,大多数 CMS 供应商都认识到,如果他们的产品要有用,就需要可定制。如果您购买基于 J2EE 的 CMS——并且很大一部分商业 CMS 产品都是基于 J2EE——您可以期望能够编写新的 Java 对象来描述您的内容及其发布方式。在某种程度上,定制 CMS 和在现有基础设施上编写您自己的 CMS 之间的界限变得有些模糊。

进入 Zope 的内容管理框架 (CMF),旨在为您创建自己的 CMS 提供足够的基础设施。由于 Zope 开发相当快速且容易,并且由于您可以使用 Zope 提供的现有基础设施,因此创建 CMS 至少应该比使用商业 CMS 实现更快(也更便宜)。Plone 是在 CMF 之上而不是在其自身之上实现的,这意味着每次 CMF 得到改进,Plone 都会从这些更改中受益。

本月,我们将关注 CMF,它正成为 Zope 应用程序服务器的中心焦点。事实上,尽管 CMF 的最新稳定版本是 1.3.1,但 CMF 2.0 的 alpha 版本现在已经可用。而且,如果说 Zope 未来的发展方向在此之前还是个谜,那么现在很清楚,CMF 2.0 是“Zope3 的轻量级重新打包的 head checkout”。

安装和配置 CMF

几个月前,我们介绍了如何安装 CMF [请参阅《锻造车间》,《LJ》,2003 年 5 月],因此我在这里不再赘述。简而言之,从 cmf.zope.org 下载最新版本,并将 tar 文件解压到 Zope 主目录下的 lib/python/Products 中。然后,从 Products 目录到 CMF 目录为 CMFCore、CMFDefault、CMFTopic 和 CMFCalendar 创建符号链接。重启 Zope,您应该会在 Zope 管理屏幕内的“添加”菜单中看到许多与 CMF 相关的产品。

在我们创建任何 CMF 对象之前,我们首先需要创建一个容器,我们的 CMF 站点可以在其中存在。您可能会注意到,创建 Plone 站点和 CMF 站点之间存在明显的相似之处。要创建新的 CMF 站点,只需从基于 Web 的 Zope 管理界面中的“添加”菜单中选择“CMF 站点”即可。系统会要求您命名 CMF 站点,并提供描述。

当您创建 CMF 站点时,系统还会询问您是否希望在该 CMF 站点内创建一个新的用户文件夹,或者是否要使用现有的用户文件夹。现在,使用现有的用户文件夹,这意味着在顶级 Zope 站点中定义的用户也是 CMF 站点内的用户。如果您希望使您的 CMF 站点成为一个独立的单元,而不参考外部世界(站点所有者除外),您可能需要创建自己的用户文件夹。

当您完成创建 CMF 站点后,您将被带到主页,该主页会告诉您访问基本配置表单。由于 CMF 最初被称为 Portal Toolkit (PTK),因此许多屏幕都引用门户而不是 CMF 站点。您在此表单中输入的信息本质上相当通用,允许您设置例如从中生成电子邮件的电子邮件地址以及站点的 SMTP 服务器。

如果您按照说明并转到 CMF 管理界面,事情会变得更加有趣,这实际上是 CMF 站点的 Zope 管理界面。换句话说,如果您的 CMF 站点被称为 /cmfdemo,您可以使用 /cmfdemo/manage 查看站点的内容。与往常一样,Zope 中的管理屏幕由左侧的小导航栏组成。但是,正如我们上个月所见,左侧包含许多门户工具,允许我们配置和修改我们的 CMF 站点。

单击门户目录会显示一个词汇表,Zope 用语中索引的术语,它解释了 CMF 站点如何在无需站点管理员付出任何努力的情况下提供全文搜索。单击门户类型会显示内容对象类的列表。这些类构成了 CMF 的核心。我们将在下面更详细地查看内容类型,并将在下个月研究如何创建我们自己的内容类型。

最后,单击 portal_workflow,您可以在其中输入要用于每种内容类型的工作流程对象的标题。工作流程描述了内容如何从编写到发布的过程,确保只有适当的人员被授予执行某些任务的权限。例如,作者可以编写故事,但无法将其发布到站点。一个好的工作流程系统允许您自定义这些规则以反映您组织的需求。

一个简单的 CMF 站点

现在我们已经检查了 CMF 控制面板,是时候检查我们的站点了。进入一个裸 CMF 站点后,我们会在中间看到一个主要内容区域,在不同的位置有几个工具栏和框。最上面的菜单具有用于移动到站点顶部、成员页面、新闻页面以及搜索站点内容的主要导航链接。在该菜单下方,但在右上角,是一个用户特定菜单列表,从“我的偏好设置”开始。这允许登录用户设置自己的偏好设置,将链接添加到他们的个人收藏列表并注销。尚未登录系统的用户会被邀请登录(如果他们已经有帐户)或作为会员加入系统(如果他们还没有帐户)。左侧是一个导航菜单,列出了可用的文件夹,并允许您设置某些功能,例如联合和本地角色。

如果您习惯于查看 Plone 站点,则默认的 CMF 站点可能看起来有点简朴但很大程度上很熟悉。这是因为默认的 CMF 站点旨在在自定义 CMS 中使用;即使它功能齐全,但它并非旨在在现实生活中使用。通过定义新的内容类型和修改显示皮肤,您几乎可以在瞬间运行 CMS。并且由于显示逻辑与系统的其余部分是分开的,因此可以相对快速地更改外观。

CMF 站点的每个成员都可以分配到一个或多个角色:成员、审阅者、管理员或所有者。除了审阅者之外,所有这些角色对于经验丰富的 Zope 用户和管理员来说都应该很熟悉。额外的角色对于处理工作流程是必要的,在工作流程中,审阅者必须在内容发布到 Web 之前批准内容。

管理员在屏幕左侧看到一个扩展菜单,允许他们查看当前文件夹的内容视图,这使他们可以查看或修改现有内容或在文件夹中创建新内容。当您创建一个新对象时,您不仅要为其分配 ID(传统 Web 系统称之为文件名)和内容,还要分配描述内容的元数据。尽管您无法在实例化对象后更改对象的类型,但您可以通过返回内容视图并在其中打开内容来更改其所有参数。

每条内容都必须先发布才能对其他人可见。默认情况下,新内容的状态为私有,但可以通过单击左侧菜单栏上的“发布”链接来发布。使用相同的界面,站点管理员可以从站点的已发布列表中撤销文章。与我们删除链接或删除文件的传统网站相比,这是一个很大的改进。

此外,大多数内容类型都可以选择附加讨论。这类似于 Weblog 上流行的“对此帖子发表评论”功能,允许站点访问者将他们的评论添加到官方站点管理员编写的内容中。当您添加一段内容时,您可以决定是否要接受讨论的默认站点定义,或者是否要专门为一个片段覆盖站点范围的设置。

内容类型

我们可以实例化的这些内容类型到底是什么?它们中的大多数都在 CMFDefault 产品中定义,在 lib/python/Products/CMFDefault 中的单个 .py 文件中。该产品定义了我们之前在 Zope 管理界面中看到的配置工具,以及基本内容类型,例如 NewsItem、Portal、Image 和 Link,我们可以从 CMF 中实例化这些内容类型。

如果您和我一样,您会对 CMF 中定义的大多数默认内容类型的小尺寸感到惊讶和印象深刻。它们的范围从 NewsItem 的低端 100 行到 Portal 的不到 350 行。这不仅意味着如果出现问题,可以轻松调试和更改这些内容类型,而且添加新的内容类型也相对容易。

事实上,已经开发了许多新的 CMF 内容类型,并且这似乎是一个不断发展的领域。例如,如果您访问 CMF Collective Project collective.sf.net,您可以看到最近几个月发布的一些与 CMF 相关的产品。例如,新兴的 CMF 产品可用于电子商务、相册和 Weblog 创建。随着 CMF 变得越来越流行,您可以预期 CMF Collective 的受欢迎程度也会随之增长。

结论

由于 Zope Corp. 多次表示 CMF 是 Zope 的未来,并且由于安装 CMS 可能非常昂贵,因此很明显 Zope Corp. 正在认真尝试压低价格并优于其专有竞争对手。但是,由于 Zope 和 CMF 是开源的,我们可以在我们自己的项目中使用它们,既可以了解内容管理,又可以编辑和发布不同的项目。下个月,我们将深入探讨如何编写您自己的示例 CMF 内容类型。

Zope's CMF
Reuven M. Lerner (reuven@lerner.co.il) 是一位专注于开源 Web/数据库技术的顾问。他和他的妻子 Shira 最近庆祝了他们的第二个女儿 Shikma Bruria 的出生。Reuven 的著作《Core Perl》于 2002 年初由 Prentice Hall 出版,另一本关于开源 Web 技术的书将于 2003 年由 Apress 出版。
加载 Disqus 评论