迁移到 Drupal
在关于博客工具或基于 Web 的论坛软件的讨论中,Drupal 经常被提及。当然,您可以使用 Drupal 运行博客或在线论坛,但这只是 Drupal 功能的一部分。Drupal 最好被描述为一个框架,它为在线协作和社区提供基础设施。它可以用于运行企业网站、内联网、新闻门户网站和许多其他类型的网站。
Drupal 项目起源于安特卫普大学学生 Dries Buytaert 为他的学生宿舍构建的内部留言板系统。2001 年,Dries 以 Drupal(发音为 “droo-puhl”)为名发布了该软件,作为一个开源项目。其他人开始使用 Drupal 并开始为该项目做出贡献。Drupal 是使用开源技术构建的:PHP 编程语言和 MySQL 或 PostgreSQL 数据库。Drupal 在 GNU 通用公共许可证 (GPL) 下获得许可,可以免费下载和使用。与许多成功的开源项目一样,Drupal 由一个蓬勃发展的用户和开发社区维护和开发。Drupal 于 2006 年 1 月满五岁,已经发展成为一个强大的内容管理平台。
在我们工作的 Web 开发公司,我们已经成功地为我们的客户构建了许多基于 Drupal 的网站。在本文中,我们分享了我们所学到的知识,并讲述了我们迄今为止最复杂的 Drupal 项目的故事。
Planetizen 是一个面向城市规划师、建筑师、开发商、环保主义者和其他专业人士的社区网站。它提供每日新闻摘要、社论、职位和许多其他服务。Planetizen 于 2000 年推出,现已发展成为一个拥有庞大国际受众的受欢迎的网站。为了管理像 Planetizen 这样不断更新的网站,内容管理系统 (CMS) 是必不可少的。我们在 2000 年使用 PHP 和 MySQL 构建了自己的自定义 CMS。随着 Web 的发展,我们想添加新功能,但这样做意味着昂贵的内部开发。因此,我们开始寻找替代方案。
到那时,许多开源 CMS 项目已经成熟,并提供了我们想要添加的许多功能。迁移到预构建的开源 CMS 是有道理的。我们可以缩短开发时间,添加我们需要的功能,并受益于使用开源软件带来的所有优势。因为我们已经有使用 PHP 和 MySQL 的经验,所以我们搜索了使用这些技术构建的开源 CMS。在评估和测试了几个不同的软件包后,我们选择了 Drupal。(请参阅在线资源中的“选择开源内容管理系统的七个标准”。)
Drupal 具有您期望从现代 CMS 获得的许多功能,例如用户管理;访问控制;工作流程;内容、演示和逻辑的分离;以及基于 Web 的编辑和管理。Drupal 因许多原因吸引了我们——以下是前五个原因
5) 合理的 URL 和 URL 别名:许多 CMS 生成冗长、复杂的 URL,这些 URL 难以通过电子邮件或电话共享。Drupal 可以说是 CMS 世界中生成最简洁 URL 的。大多数 Drupal URL 的格式为 http://www.planetizen.com/node/156。此外,Drupal 的 URL 别名功能可以轻松创建对读者有意义的 URL。使用 URL 别名,上面的 URL 可以映射到 http://www.planetizen/about/faq。
4) 联合和聚合:像 Planetizen 这样的社区网站受益于信息的流入和流出站点。存储在 Drupal 中的内容可以使用 RSS 提要轻松地联合到读者或其他网站。此外,Drupal 中内置了一个新闻“聚合器”,用于通过 RSS 提要提取联合内容。
3) 模块化架构:Drupal 的功能被组织成可以打开和关闭的模块。这种方法使得可以使用 Drupal 构建不同类型的网站。如果我们打算投入大量时间学习 CMS,那么最好是能够适应其他项目的 CMS。
2) 对开发者友好:我们预计需要自定义我们选择的任何 CMS。我们对 Drupal 精心设计的架构和代码的一致性感到满意。相对容易理解一个功能并开始进行修改。诸如 devel 模块之类的功能,该模块显示每个页面的数据库查询和变量,后来被证明在迁移到 Drupal 时非常宝贵。
1) 分类法:我们选择 Drupal 最重要的原因在于其强大的分类系统,用于对内容进行分类。可以创建一组描述性术语并将内容与这些术语关联起来。分类系统使得可以使 Drupal 适应各种内容管理需求。
您可以从 Drupal 网站下载最新的稳定版本软件包。安装 Drupal 是一个相当简单的过程。它涉及创建 MySQL 数据库、导入表、复制文件、设置文件权限和编辑配置文件。大多数 Drupal 选项可以使用其基于 Web 的管理界面进行配置。有关详细的安装说明,请参阅下载软件包中提供的 INSTALL.txt 文件。其他配置说明可在 Drupal 网站上找到。
在 Drupal 中,大多数内容都存储为节点。节点可以是页面、投票或多种节点类型之一。例如,页面节点具有标题、正文、作者、日期和一些基本属性。某些模块提供自己的节点类型,这些节点类型可能具有其他属性。
内容的视觉呈现由主题控制。Drupal 附带了一系列主题,并且很容易创建自己的主题。大多数主题都有一个中央内容列和左侧和/或右侧边栏列。边栏可以包含信息块。过滤器控制用于在节点或块中存储文本的输入格式。例如,您可以存储过滤后的 HTML 中的内容,这限制了可以使用的 HTML 标记。您甚至可以存储 PHP 代码片段。
基本的 Drupal 安装为您提供了一个可用的网站,您可以立即开始向其中添加内容。但是,安装后您看到的内容只是核心功能。Drupal 提供了更多功能。在大多数情况下,您会希望根据您的特定内容管理需求定制 Drupal。这就是 Drupal 的灵活性变得令人难以置信的地方。在使用 Drupal 构建了多个网站后,我们认为创建成功的 Drupal 实施——如果您愿意,可以称之为“食谱”——的关键在于理解五个 Drupal “成分”的相互作用:模块选择、配置、访问控制、分类法和主题。
模块是扩展 Drupal 功能的附加代码。Drupal 附带了一组核心模块,并且可以根据需要下载和安装其他模块。Drupal 网站列出了社区创建的大量贡献模块。如果您需要特定功能,请查找提供该功能的模块。几个模块可能提供类似的功能,甚至提供单个功能的不同实现(图 1)。
通过更改各个模块和站点设置的配置选项,您可以大大改变 Drupal 的行为方式。许多模块在节点边栏中出现的块中添加功能。通常,您需要的特定 CMS 行为或工作流程可能只是以某种方式配置模块的问题。准备花一些时间尝试不同的设置(图 2)。
帐户允许您控制用户可以在 Drupal 网站上看到和执行的操作。第一个用户帐户被认为是具有完整管理权限的根帐户。对于其他用户,您可以通过将他们分配到角色来设置他们可以做什么。Drupal 附带两个角色:匿名用户和已验证用户。您可能想要添加其他角色,例如编辑或管理员,并指定这些角色可以做什么。用户可以与一个或多个角色关联(图 3)。
Drupal 的分类系统使您可以将节点与一个或多个描述性术语关联起来。您可以创建多组称为词汇表的术语。词汇表可以是平面列表或分层列表。对于每个词汇表,您可以指定它适用于哪种节点类型。这种组合可以帮助您为内容创建分类系统,以满足您的特定信息架构需求。许多其他功能和模块都依赖于分类法。例如,您可以生成导航元素、控制对内容的访问或根据分类法切换视觉呈现。花时间开发良好的分类词汇表并设计它们,以便您将来可以轻松扩展它们(图 4)。
Drupal 允许您使用可扩展的主题系统轻松自定义页面布局。为您的网站构建自定义主题的一种便捷方法是将其基于 Drupal 附带的主题之一。您可以为某些用户或与分类法术语关联使用不同的主题。
以上五个成分的各种组合将产生出人意料的多样化解决方案。在 Drupal 网站上搜索“食谱”。如果您仍然无法实现您需要的功能,您可以自定义 Drupal 或构建自定义模块。
我们通过列出我们需要的所有功能并确定哪些 Drupal 模块可以提供该功能来开始 Planetizen 的迁移。这需要测试不同的模块和配置设置。我们确定了无法使用 Drupal 模块满足的要求。这些功能将需要自定义开发。然后,我们开发了分类法,定义了用户角色和权限,并确定了工作流程。为了在基于 Drupal 的版本中保持原始的外观和感觉,我们开发了一个自定义主题。迁移到新的 CMS 也是重新思考当前业务逻辑并改进它的好时机。我们借此机会精简了不太受欢迎的网站功能。
最大的迁移挑战是将五年多的数据(超过 15,000 篇新闻报道)拉入 Drupal。Drupal 故事和页面节点类型仅为节点提供了基本的标题和正文属性。Planetizen 中存储的每个新闻项目都有几个其他属性。我们需要的是我们自己的自定义内容类型。Drupal 的 flexinode 提供了一种无需编程即可轻松创建自定义内容类型的方法。不幸的是,事实证明 flexinode 路线对我们来说是一种效率低下的解决方案。由于 flexinode 存储数据的方式,使用 flexinode,每个 Planetizen 新闻报道将需要多达八个单独的表插入,而不是标准的单个插入。
Drupal 丰富的第三方模块解救了我们。我们发现图书评论模块与我们需要的功能非常相似。通过检查其代码,我们能够自定义图书评论模块以创建我们需要的内容类型。然后,我们创建了自定义脚本,将 Planetizen 的数据直接插入到 Drupal 的 MySQL 表中的相应字段中。
我们确实遇到了 Drupal 的一些局限性。一个局限性是 Drupal 中维护时区和夏令时的机制。我们的解决方法是仅使用 PST/PDT 时区,并在夏令时更改时手动更新时区。这是一个已知问题,开发人员正在解决。
Flexinode 使您无需编程即可创建自定义节点类型,但正如我们发现的那样,它有其局限性。另一种选择是将自定义节点类型开发为模块。Drupal 为创建您自己的模块提供了坚实的基础,但这需要编程经验。Drupal 团队正在使用内容构建套件 (CCK) 解决此问题,CCK 是当前正在开发中的一项工作,旨在使创建自定义节点类型变得更容易。
我们遇到的一个问题与 Drupal 无关。我们的生产 Web 服务器正在运行旧版本的 PHP,由于一些托管限制,无法升级。这导致搜索模块失败;但是,我们能够通过修改搜索模块来规避此问题。我们再次感谢自己正在使用开源 CMS。
Drupal 的安全补丁和核心代码更新会定期发布。这是一件好事,但升级自定义的 Drupal 安装可能会很麻烦。我们建议将自定义限制在特定模块或开发自定义模块。此外,使用版本控制系统(例如 CVS 或 Subversion)可以帮助跟踪您对官方 Drupal 版本的自定义。
我们于 2005 年 9 月推出了新的基于 Drupal 的 Planetizen 网站,并收到了读者的积极反馈。自推出以来,我们能够添加新的部分和功能,而无需从头开始开发它们(图 5 和 6)。
在我们撰写本文时,Drupal 的下一个版本 4.7.0 正在 beta 测试中。改进包括更好的默认主题引擎、改进的搜索功能、改进的 PostgreSQL 支持、可主题化的表单、Ajax 增强的管理界面和更好的升级脚本。同样有希望的是 CCK 的开发,CCK 可以与 actions、workflow 和 views 模块一起使 Drupal 更加灵活和强大。
Drupal 社区中的一些人预测,2006 年值得关注的趋势是特定于应用程序的 Drupal 发行版的出现——重新打包的 Drupal 版本,以满足特定需求。CivicSpace 就是这样一种发行版,这是一个社区组织平台,在基层组织、非营利组织和政治竞选网站中很受欢迎。CivicSpace 提供了一个基于 Web 的安装程序和一个配置向导,用于为常用场景设置网站。它包括一系列与运行社区组织网站相关的 Drupal 模块,因此您无需研究、下载和安装单个模块。CivicSpace 还包括 CiviCRM,这是一个基于 Web 的选民关系管理应用程序,提供在线筹款、联系人管理、跟踪志愿者、捐赠者和客户等功能。目前正在努力为教育工作者和艺术家开发类似的发行版。
我们已将 Drupal 用于几个不同类型的项目,包括企业、协作、内联网和学术网站。是什么让 Drupal 如此通用?
根据其创始人 Dries Buytaert 的说法,Drupal 旨在提供“扩展和实施自定义内容管理解决方案的坚实基础”。这可能是其受欢迎的原因之一。它力求成为一个内容管理平台,使开发人员和用户能够基于 Drupal 的核心引擎自定义他们自己独特的解决方案。Drupal 的模块化架构催生了几个有趣的社区贡献模块。这些模块通常将 Drupal 连接到其他流行的程序或服务,从而开启了有趣且意想不到的可能性。
的确,非程序员只需调整可配置的选项就可以用 Drupal 实现很多功能。那些具有适度 HTML 或 PHP 经验的人可以自定义主题和布局,或者使用 Drupal 网站上社区共享的代码片段。当然,PHP 专家可以创建他们自己的自定义模块并根据需要调整 Drupal。
然而,它的可扩展性和灵活性也使 Drupal 更加复杂。您正在寻找的解决方案可能在模块的特定组合中找到,以某种方式配置,使用精心设计的分类法和仔细考虑的用户权限。Drupal 能够满足复杂的内容管理需求,但要发挥其潜力,确实需要深入了解其工作原理。
Drupal 令人钦佩的地方在于,它有可能——在一定程度上,无需编写任何代码——塑造基于同一核心内容管理平台构建的各种 Web 解决方案。并且,它在实现这一目标的同时,仍然忠实于其既定的标准合规性和协作开源开发原则。Drupal 可能没有针对每个问题的完美解决方案,但它可以相当好地满足许多不同的内容管理需求。最终,重要的是 Drupal 帮助人们,无论是程序员还是非程序员、大型组织还是个人,挖掘 Web 的协作潜力。
本文资源: /article/9264。
Abhijeet Chavan 是 Urban Insight, Inc. 的首席技术官,该公司是一家 Web 开发咨询公司。他还是 Planetizen 的联合创始人兼联合编辑。
Michael Jelks 是 Urban Insight, Inc. 的高级开发人员,拥有超过 37 年的狗龄经验,使用 Perl、PHP 和 MySQL 技术实施基于 Web 的应用程序。