Drupal-博客创建指南-全-

Drupal 博客创建指南(全)

原文:zh.annas-archive.org/md5/9b9ff3824b56d13e46612b8cfb032ff6

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

互联网可以说是人类历史上最深刻的成就之一。它已经渗透到我们的生活中,以至于我们几乎都没有注意到它——除非它恰好不可用!它是那些让你坐下来想,在没有它的时候人们是如何度过的那些事情之一。没有上网订购杂货、进行银行业务、预订航班和安排旅行、结识朋友、寻找合作伙伴、下载音乐和视频、学习、经营业务、交易股票、开展活动、表达观点、分享想法、了解其他人……我们将何去何从?

在这样一个人口众多、社会规模巨大到阻碍沟通的世界里,互联网站了出来,让每个人都更近一步。利用遍布全球的令人惊叹的技术,互联网简单地消除了时间和地理距离的障碍,将整个世界变成了一个社区中心。

最近,互联网上商业的全面关注开始略有转移。成千上万的人开始意识到,通过博客(简称博客)这种媒介与他人分享他们的生活和经历的可能性。其他人只是想要一个在线存在来展示他们的工作、艺术或音乐。还有一些人有着重要的原因,需要互联网来传播信息或为志同道合的人提供一个聚会点。无论需求如何,互联网都必须找到一种方法来高效地满足这些需求,否则在未来可能会被其他东西取代。

互联网需要的是让人们在不需要投入智力资源去理解互联网所基于的技术时,能够轻松地做他们想做的事情。而互联网所拥有的正是这个——Drupal!

Drupal 是你需要用来构建从静态主页到多语言、完全定制和交互式网站的工具,拥有遍布全球的成千上万的用户。假设你处于这两个极端之间,这本书就是指引你前行的指南。

本书将帮助你通过提供你在需要时所需的确切信息来缩短学习时间。它将有助于减少学习任何新技术时伴随的试错,并为你提供一个系统而高效的学习过程,让你成为一个知识渊博、能力出众的网站创建者和管理员。

本书涵盖的内容

第一章 介绍了 Drupal 的世界,并探讨了 Drupal 的起源、发展方向以及它能为你提供什么。由于理解即将到来的任务性质很重要,它还讨论了如何规划和构建你的网站,在这个过程中提前预览了本书的演示网站。最后,我们审视了 Drupal 社区,并学习如何充分利用 Drupal 作为有组织、有生命的实体,而不仅仅是软件的一部分。

第二章 讲述了如何在开发机器上启动并运行你需要的一切,并简要介绍了所有必需技术如何结合在一起以产生你的工作 Drupal 网站。一旦一切启动并运行,并在查看了一些常见的安装问题之后,本章将简要介绍 Drupal,以便你了解可以期待什么。

第三章 探讨了所有 Drupal 管理员都需要应对的最一般设置。从确定你的网站名称到处理缓存或文件系统设置,所有这些内容都在我们查看即将到来的章节中更专注和复杂的问题之前得到处理。

第四章 讲述了如何向新创建的网站添加功能。本章的重点实际上是模块以及如何添加和启用它们,以及如何获取标准发行版之外的模块。本章以讨论如何控制块结束。

第五章 关注访问控制的主题。Drupal 拥有复杂的基于角色的访问控制系统,这对于控制用户如何访问你的网站至关重要。本章将为你提供所需的信息来实现你需要的任何访问控制。

第六章 通过开始对内容的介绍来深入主题。处理内容、可用的内容类型、内容管理,甚至是一些常见的内容相关模块的讨论,为下一章更高级的内容相关主题奠定了基础。

第七章 在创建引人入胜和动态内容方面为你提供了优势。虽然本章不需要你成为 HTML、PHP 和 CSS 的专家,但它介绍了基础知识,并展示了如何凭借一点知识,创建出极其强大和专业的内容。这只是故事的一半,因为稍后它还将探讨分类以及 Drupal 的这一特定功能如何使其与众不同。

第八章通过使用主题向您展示了如何创建吸引人的界面。此外,它简要讨论了在规划您的网站时必须考虑的一些因素,并在最后探讨了如何对您选择的主题进行重要修改。

第九章通过探讨一系列更高级的主题真正为这本书增添了亮点。从创建灵活的内容类型和通过广告赚钱,到使用 AJAX 构建动态内容,您将找到一些可以增强您的网站并添加一些特别之处的技巧。

第十章从实用主义的角度探讨了您需要熟练掌握的任务类型,以便成功运行和维护 Drupal 网站。无论是设置 cron 作业还是备份您的数据库,在运行您新创建的网站过程中需要做的所有事情都将在这里得到涵盖。

附录 A 处理了至关重要的部署主题。由于所有主要工作都应该在开发机器上您网站的副本上完成,因此本附录提出了一种将成品发布到您的托管网站上供公众消费的合理流程。

习惯用法

在这本书中,您会发现许多不同风格的文本,用于区分不同类型的信息。以下是一些这些风格的示例及其含义的解释。

有三种代码风格。文本中的代码单词如下所示:“我们可以通过使用include指令包含其他上下文。”

代码块将如下设置:

<?php
if (module_exist("adsense"))
{
print adsense_display("468x60", 2);
}
?>

当我们希望您注意代码块中的特定部分时,相关的行或项目将被加粗:

<?php
if (module_exist("adsense"))
{
 print adsense_display("468x60", 2); 
}
?>

任何命令行输入和输出都应如下所示:

$ mysql uroot -p drupal < C:\apache2triad\htdocs\drupal\modules\ taxonomy_block\taxonomy_block.mysql

新术语重要词汇以粗体字形式引入。您在屏幕上看到的单词,例如在菜单或对话框中,在我们的文本中如下所示:“点击下一步按钮将您移动到下一屏幕”。

注意

警告或重要注意事项将以这样的框显示。

小贴士

小贴士和技巧如下所示。

读者反馈

我们欢迎读者的反馈。请告诉我们您对这本书的看法,您喜欢或可能不喜欢的地方。读者反馈对我们开发您真正能从中获得最大收益的标题非常重要。

要向我们发送一般反馈,只需将电子邮件发送到<feedback@packtpub.com>,确保在邮件主题中提及书名。

如果您需要一本书并且希望我们出版,请通过www.packtpub.com上的建议标题表单或通过电子邮件<suggest@packtpub.com>发送给我们。

如果你在一个领域有专业知识,并且你对撰写或为书籍做出贡献感兴趣,请参阅我们的作者指南www.packtpub.com/authors

客户支持

现在你已经是 Packt 书籍的骄傲拥有者,我们有一些事情可以帮助你从你的购买中获得最大收益。

下载本书的代码

访问www.packtpub.com/support,从标题列表中选择本书以下载任何示例代码或额外资源。可下载的文件将随后显示。

可下载的文件包含了如何使用它们的说明。

错误清单

尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果你在我们的书中发现错误——可能是文本或代码中的错误——如果你能向我们报告这个问题,我们将不胜感激。通过这样做,你可以帮助其他读者避免挫败感,并有助于改进本书的后续版本。如果你发现任何错误清单,可以通过访问www.packtpub.com/support,选择你的书籍,点击提交错误清单链接,并输入你的错误清单详情来报告它们。一旦你的错误清单得到验证,你的提交将被接受,并将错误清单添加到现有错误清单中。现有的错误清单可以通过从www.packtpub.com/support中选择你的标题来查看。

问题

如果你在本书的某个方面遇到问题,可以通过<questions@packtpub.com>联系我们,我们将尽力解决。

第一章。Drupal 简介

直到最近,新来者为了准备构建网站,最重要的事情是购买一本关于如何学习编程的书,无论是 PHP 还是 Perl 等主要网络语言。然后,学习所选语言的细微差别,达到可尊敬的程度,将消耗相当多的时间和耐心。一旦我们不幸的新手对基础知识有了足够的掌握,将那些知识应用于高效可靠地编程,坚持不懈地完成工作直到网站开发完成,可以说是一项艰巨的成就。

这种情况,对于像您这样的人来说,是完全不可接受的!这就像强迫律师学习建筑、施工和砌筑的复杂性,仅仅因为他们需要一个工作场所。很明显,将网站软件的开发技术任务与该网站的功能职能分开是一个非常明智的做法,主要原因是它允许人们专注于他们擅长的事情,而无需花费时间和精力成为优秀的软件开发者。

因此,近年来,开源社区一直在努力通过为我们提供构建基于网络的企业的灵活框架,将编程世界从软件黑暗时代中拉出来。这些框架解除了网站创建者学习软件开发思想和概念的精神负担,使他们能够更多地专注于以目标/业务为导向的配置和定制任务。

Drupal 是软件开发演变的一个结果,本书旨在为您提供使用它来满足您需求所需的基本信息。由于本书更多地关注 Drupal 管理的入门级方面,您可能会很高兴地知道,其中涉及到的编码将非常少——例如,您不需要学习如何开发自己的 Drupal 扩展模块。但这并不意味着您的入门会很简单;相反,本书将以一种方式教授您,使您能够自信地将您的知识应用于解决超出本材料范围的问题。

在我们开始实际构建任何类似网站的东西之前,我相信您对 Drupal 的如何、什么、哪里和为什么有很多疑问。因此,本章不仅将为本书的其余部分提供背景,还将作为对整个技术的介绍,包括以下讨论:

  • Drupal——概述

  • Drupal 的起源

  • Drupal 提供的内容

  • Drupal 的用途

  • 构建 Drupal 网站

  • Drupal 社区

  • Drupal 许可证

上面的列表中提到的一条是 构建 Drupal 网站—这一部分 包含了对演示网站的查看,该网站作为我们所有实践示例的基础。这一点在这里是必要的,因为,在整本书中,我们将系统地基于每一章的新信息来构建一个功能齐全的网站。以这种方式做事将有助于将你学到的课程与你可以在网站上期望的结果联系起来。这反过来又有助于培养良好的管理、配置和定制方法,这些方法将帮助你发展自己的 Drupal 技能。

让我们开始吧…

Drupal—概述

对 Drupal 最简洁的描述是它是一个 开源内容管理系统。如果你对计算机和 Drupal 都是新手,那么这也许并没有让你更清楚。让我们快速分析这个短语,以获得更好的理解。首先,术语 开源 用于描述 软件的源代码可供用户或其他开发人员使用或修改,通常受某些条件约束。Drupal 可用的具体条件将在本章后面的 Drupal 许可证 部分进行更详细的审查。

此外,对于打算使用 Drupal 的人来说,开源意味着你不必为这款无可争议的软件付费。你还将加入一个大型社区(本章稍后讨论),其中包括 Drupal 用户、开发人员和管理员,他们都订阅了开源理念——换句话说,如果遇到困难,外面的人可能会愿意花时间帮助你。

如果你仔细想想,对于那些还没有完全确信开源技术整体的人来说,这确实是一笔不错的交易——我们不仅不需要自己开发整个网站,而且还能利用成千上万人集体智慧。关于开源,我们还能说什么呢?当然,有一点可以肯定,像 Drupal 这样的活跃社区,开发进步迅速且灵活,因为任何问题都可以及早发现并有效解决。这意味着你可以期待你的网站具有高度的稳定性、安全性和性能。

到目前为止一切顺利,但内容管理系统(CMS)部分究竟是什么意思呢? 我们需要更仔细地研究这意味着什么,以便充分理解我们所要面对的内容。我们可以将内容管理系统定义为一种软件,它促进了以图像、文档、脚本、纯文本(或任何其他形式)的形式创建、组织、操作和删除信息。如果你需要组织和展示相当大量的信息,尤其是当内容可能来自各种不同的来源时,那么内容管理系统无疑是你所需要的。

这基本上就是你需要知道的所有内容。Drupal 提供了一个免费的平台,以及其伴随的社区,以满足各种内容管理需求。确切地说,一个人可以达成什么样的成就,是本章后面标题为Drupal 能提供什么的部分的主题。然而,现在让我们回到过去,看看我们是如何发展到今天所知道的 Drupal 的。

Drupal 是如何诞生的

正如许多现代成功故事一样,这个故事始于一个宿舍房间,有几名学生需要实现一个特定的目标。在这种情况下,安特卫普大学的 Dries Buytaert 和 Hans Snijder 希望共享一条 ADSL 调制解调器连接到互联网。他们通过使用无线桥实现了这一点,但不久之后,Dries 决定开发一个新闻网站,除了学生已经共享的简单连接外,还允许他们共享新闻和其他信息。

随着时间的推移,网站逐渐增长和变化,Dries 扩展了应用程序并尝试了新事物。然而,直到 2001 年稍后,当决定将代码公开发布,希望这能鼓励其他人进行开发时,Drupal 才成为开源软件。显然,将源代码公开发布是正确的选择,因为如今 Drupal 拥有一个组织良好、充满活力的社区,从经过批准的贡献者、论坛、安全团队到全球范围内的存在,以及众多用户,他们通过定期提交错误报告和建议做出了宝贵的贡献。

在短短五年内,Dries 和其他人将一个小型的宿舍房间应用程序转变为一种技术,这种技术正在影响着全球社会通过互联网进行交流的方式。这体现在他们的简短使命声明中,内容如下:

通过建立在相关标准和开源技术的基础上,Drupal 支持和增强了互联网作为媒介的潜力,使不同地理位置的个人和团体能够共同生产、讨论和分享信息和思想。Drupal 对社区和协作的关注和重点使其能够灵活地协作生产在线信息系统和社区。

最终,Drupal 的发展方向以及它是如何形成的,也受到那些负责开发这项技术的人所秉持的哲学的驱动。正如你在本书的整个过程中将会看到的,可以说 Drupal 社区迄今为止已经成功地实现了其宏伟的目标。

Drupal 能提供什么

从你的角度来看,到目前为止,本节的主题是我们需要覆盖的最重要的话题。作为技术和软件的用户,我们绝不应该对我们所依赖的技术要求放松。因此,在这个阶段讨论我们对 Drupal 的期望,以确保它能够满足我们的需求是合适的。

在考虑 Drupal 是否是一般情况下使用的良好技术时,我们需要考虑 Drupal 的三个不同方面。它将是:

  • 可靠且稳健:代码中有很多错误吗?如果我必须永远添加补丁或获取有缺陷代码的更新,这会影响我的网站吗?**

  • 高效:代码是否明智地使用了我的服务器资源?我是否可能会在早期遇到并发问题或速度问题?**

  • 灵活:如果我改变了我对网站的需求,我是否能够在不从头开始重做一切的情况下实施这些更改?**

在 Google 上快速搜索将证实,关于 Drupal 性能的大量好评以及大量赞扬其易用性和灵活性的文章。虽然 Drupal 始终是一个持续改进的项目,但可以肯定的是,你将用于构建网站的源代码已经被精心制作,并且设计得很好。事实上,前面列出的点被 Drupal 的开发者如此重视,以至于它们被写入他们的原则中,你可以在drupal.org/node/21945上阅读这些原则。

虽然目前它对我们影响不大,但以下内容值得关注:

备注

Drupal 的一个巨大优势是代码本身写得非常好,这使得修改它变得容易。这意味着当你尝试更高级的任务时,Drupal 的编写方式将为你带来比其他平台的优势。

我们接下来需要考虑的是作为管理员,Drupal 对我们来说是什么样的?当然,我们希望事情尽可能简单,这样我们就不至于被问题或复杂的设置所困扰,或者更糟糕的是,不得不定期修改源代码来满足我们的需求。理想情况下,我们希望有一个系统:

  • 易于设置和运行:我能否以最少的麻烦开始创建我的网站?在使用 Drupal 之前,我是否必须了解一大堆其他技术?

  • 易于使用:一旦我开始熟悉环境,学习新事物会容易吗?如果我不是一个特别技术型的人,我会不会在管理我的网站时遇到困难?

  • 灵活且易于扩展:我知道我可以创建一个基本的网站,但我真的想创建一个独特而复杂的行业领先者——这可以用 Drupal 实现吗?

再次强调,这正是 Drupal 被人熟知的特点。以下每个项目后面的问题都是每个特性回答的问题示例。如果你对 Drupal 有其他问题,这里没有具体提到,那么尝试将它们与项目点联系起来。如果你仍然有困难,尝试浏览论坛或通过 Google 搜索来找到答案。

最后,也许在某些方面最重要的是,你需要考虑 Drupal 是否为你的网站用户创造了一个良好的环境。显然,一个设计良好、易于管理的科技,如果使用过于复杂,那么即使如此也不会很有帮助。要了解 Drupal 可以提供什么样的环境,最好的办法是直接查看 Drupal 的主页 drupal.org。你可能需要注册一个账户并积极参与社区(相信我,从长远来看这将对你大有裨益)。所以,也许你可以将注册过程视为快速简单地了解网站的一种方式。

如果你可以轻松地使用在 Drupal 中开发的网站,那么反过来,你将能够为你的社区或博客(也称为博客)创建一个易于使用的网站。

Drupal 的用途

从纯粹理论的角度来看,你可能会相信利用 Drupal 的源代码来帮助你创建网站是一个非常好的选择。当然,知道这一点并不能帮助你从实际的角度发现它能做什么。你仍然需要知道通常使用 Drupal 创建哪些类型的网站。如前所述,任何需要大量处理内容的公司都可能是 Drupal 的合适人选。

由于其可扩展性和灵活性,你在决定如何使用 Drupal 时实际上并没有太多的限制。以下列表显示了目前最常用的用途,并来自 Drupal 网站上的案例研究页面(drupal.org/cases):

  • 社区门户网站(术语门户指的是一个网站,它应该是互联网用户的网络入口):如果你想建立一个由观众提供故事的新闻网站,Drupal 非常适合你的需求。新故事会自动由观众投票,最好的故事会浮到首页。坏故事和评论在获得足够负面投票后会自动隐藏。

  • 个人网站: Drupal 非常适合那些只想建立一个个人网站的用户,在这个网站上他们可以保持一个博客,发布一些照片,也许还可以保持一个有组织的链接收藏。

  • 爱好者网站: 当 Drupal 作为门户网站运行时,它能够蓬勃发展,因为一个人可以在这里分享他们对某个主题的专业知识和热情。

  • 内联网/企业网站: 公司使用 Drupal 维护其内部和外部网站。Drupal 在这里表现良好,因为它具有灵活的权限系统,以及易于基于网络的发布。你不再需要等待网站管理员批准你最新的项目。

  • 资源目录: 如果你需要一个特定主题的中心目录,Drupal 是你正确的工具。用户可以注册并建议新的资源,而编辑可以筛选他们的投稿。

  • 国际网站: 当你开始使用 Drupal 时,你就加入了一个庞大的国际用户和开发者社区。多亏了 Drupal 内置的本地化功能,许多 Drupal 网站都实现了多种语言的实施。

  • 教育: Drupal 可以用来创建动态的学习社区,以补充面对面的课堂,或者作为远程教育课程的平台。学术专业组织从其交互式功能和提供公共内容、会员专属资源和会员订阅管理的能力中受益。

  • 艺术、音乐和多媒体: 当涉及到社区艺术网站时,Drupal 是一个极佳的选择。没有其他平台能提供制作多媒体丰富网站所需的稳固基础,这些网站允许用户与他人分享、分发和讨论他们的作品。随着时间的推移,Drupal 将只会对音频、视频、图像和播放列表内容在多媒体应用中的使用提供更强的支持。

我想我应该明确指出,虽然你可以用 Drupal 做很多事情,但你可能应该限制你使用它的范围,只限于那些与其设计相辅相成的事情——就像前面列表中提到的那些。如果你想从你的社区网站零售大量商品,那么你可能希望考虑使用像 osCommerce 这样的专门为此目的设计的软件,即使使用贡献模块从 Drupal 网站上零售产品也是可能的。

构建 Drupal 网站

与建造房屋不同,网站的开发是在网站的副本上进行的,而不是在真实网站上。这意味着在网站建设期间,它对公众在互联网上查看和使用是不可用的。稍加思考,这应该是有道理的。任何遇到你网站的潜在社区成员可能会因为一些不工作的小部件、错误信息、杂乱无章的展示或其他任何可能让人望而却步的东西而感到沮丧。

一些读者可能会在此时 wonder(想知道)如何处理他们已经购买的域名,假设一个域名已经被购买。最佳的解决方案是建立一个所谓的占位符页面,向访问者传达一个简单的信息,即这是正确的网站,工作站点正在开发中,并且建议潜在成员在不久的将来再次访问。

如果你想在进一步学习之前了解如何将页面添加到你的互联网网站上,那么请查看附录 A 中的部署部分,它概述了将一个完全功能性的网站移动到一个实时网络域名的过程。整个网站和单个页面的过程大致相同,但自然地,移动单个页面要简单得多。

规划你的网站

在我们查看演示网站将是什么样子之前,重要的是作为新网站的创建者,你花一些时间收集你试图服务的社区的需求信息。这样做将有助于你长远的发展,因为对网站需求的深入了解让你能够有针对性地开发网站。这反过来又让你对网站的开发有一个更专注和协调的方法。

确定你需要什么最好的方法之一是列出网站必须能够执行的任务清单(我指的是书面清单,而不是心理清单)。实际上,在创建了一系列你需要的东西的清单之后,网站的管理员(很可能是你自己)应该对需求有足够清晰的认识,以便开始工作。不幸的是,仅仅坐下来写下来往往很难准确预测需要什么。一个好的开始是查看类似的网站。你应该继续记录下其他网站上所有有用和期望看到的东西,并将这些添加到你的清单中。

如果你遇到了困难,或者想法用尽,尝试以下的小思考练习可能会有所帮助。将自己分成两个人:

  • 那个知道他或她需要什么的社区成员

  • 需要知道如何构建网站的 Drupal 管理员

使用管理员角色来询问社区成员需要做什么。从两个角度来处理问题通常有助于模仿现实世界中的情况,软件开发者通过在开始工作之前提出探询性问题来试图了解他们的客户到底需要什么。

如果你能够达到一个阶段,感到自己至少理解了网站所需内容的 80%,那么继续前进并开始创建网站可能更有效率,而不是浪费时间去挖掘更多信息。由于 Drupal 设计得非常好,可扩展且灵活,如果你需要,稍后很容易对其进行修改。

我应该关注哪些类型的需求?你可能想知道。以下是一些你需要决定的重要主题列表:

  • 网站的类型——论坛、投票或其他事物

  • 你将如何运行网站——统计信息、日志记录或性能问题

  • 涉及的安全、角色和权限

  • 集成的需求——内容分发、聚合或警报

除了你网站的功能性,你也应该开始考虑你希望网站看起来如何。显然,一个吸引人且独特的用户界面是你的最终目标。使用主题创建一个视觉上吸引人的网站是一个相当重要的主题,我们将在本书的第八章中讨论,但请尽早考虑这个方面。

当然,你不仅想要设计一个看起来很漂亮的界面,你还希望使其直观且易于使用。这一点非常重要,因为研究表明,用户通常会根据网站的使用难度来评价网站,而不仅仅基于其他标准,比如速度。人们常常认为,如果一个网站运行得慢,但用户能够更容易地完成任务,那么这个网站实际上运行得更快。

在本章稍后的“演示网站”部分,本书将简要介绍将要构建的网站的规范。通过观察类似网站并预测你网站用户的需要,你可以为你的 Drupal 网站制定一个规范。在网站开发的世界里,有一个网站大纲或规范去努力是非常有价值的——即使 Drupal 减轻了我们需要自己编写代码的需求。

分析拟议的解决方案

一旦有了可以工作的规范,我们就知道需要什么。现在是时候考虑如何实现它了。凭直觉,你可能觉得一个人只是坐下来,一点一点地按照规范清单工作,直到所有的事项都被勾选。从一个角度来看,这绝对是可行的,并且在某个阶段,所有的事项都应该被勾选。但如果我们稍微仔细一点,画面开始变得有些模糊,因为我们实际上需要回顾所有列出的点,并找出完成每一个点所涉及的内容。了解前方的情况是预防问题的最佳方式!

我们接下来需要讨论的三个主要关注领域。

可行性

拥有一个愿望清单是决定您想要什么的好方法,但这并不意味着它是可行的。为了可行,标准不应涉及与它将带来的收益不成比例的大量努力。例如,如果网站规范要求一个需要一百小时残酷、令人沮丧的编程的功能,那么如果它不会对您的社区产生重大影响,那么浪费时间去实现它可能不是您的利益所在。

最终,可能更好的做法是在众多贡献或第三方软件提供商中寻找一个既便宜又优雅的替代方案。一条古老的编程格言,“做事情不止一种方法!”在这里同样适用。

求助于朋友

仔细审视您的需求。您确定您能提供所有所需的东西吗? 如果不能,花些时间查阅这本书和 Drupal 网站,看看您是否能学到什么新东西。如果您完全卡住了,那么就上论坛和列表请求帮助。Drupal 的一个伟大之处在于它是一个社区驱动的项目,这大致可以翻译为:“通常总有一些人愿意提供帮助”。记住,这不仅仅是一厢情愿的关系,一旦您有一些经验和知识可以分享,总有人会感激您的帮助之手。

临界与期望标准

为了确定您网站开发阶段任务优先级,将所有需求分为两类是一个好主意——那些对您网站成功基本必要的,比如找到服务提供商,以及那些不是的,比如决定您的超链接颜色是深蓝色还是浅蓝色。

这有几个原因:

  • 这样做将帮助您将时间和资源分配给某些任务,同时将其他任务暂时搁置。

  • 您知道那些在时间紧迫的情况下可能根本不需要包含在内的功能。

在这两种情况下,了解什么必须完成,什么可以或许留到另一天或者省略掉是很重要的。考虑到所有这些,让我们来看看演示网站是什么,以及它打算如何满足其社区的需求…

演示网站

为了做一些相对独特的事情,在这本书的整个过程中,我们将建立一个野生动物和保护区社区网站,称为The Contechst Wildlife Community,或 CWC,它将满足从保护与恢复到研究及政策制定等各方面参与者的需求。这个网站的目的在于成为志同道合的人们的中心聚会点,他们希望激发讨论和交流想法及信息,这些可以以几乎任何形式进行。

该网站不仅将通过创建定期的通讯和发布重要事件的信息来培养社区感,而且还将鼓励在论坛中开展公开辩论。希望论坛能成为一个受欢迎的聚会场所,但这绝对不是网站提供的唯一设施。将定期进行民意调查,以收集关于各种重要主题的信息,并邀请行业专家成为网站的博主。

当然,我们自然需要为网站设计一个引人注目且令人愉悦的外观和感觉,最终结果将像这样(实际上,网站还有很多内容,但为了在一页内展示所有内容,它已经被简化了一些):

演示网站

令人遗憾的是,即使这个社区网站非常受欢迎,我们仍然需要从中赚钱来支付有人管理或监督它的成本。我们如何在不向会员收费的情况下做到这一点呢?对于拥有大型关联社区的大多数网站来说,有两种方法可供选择:捐赠和广告。因此,CWC 将利用一些第三方软件和可下载模块来筹集资金。

CWC 旨在展示 Drupal 的大部分默认行为,您将很快看到以下功能将从默认发行版中启用:

  • 博客: 博客,或网络日志,几乎就像一本日记,由一个人维护。在演示网站的情况下,将有一群博客作者定期在网站上发布帖子,以便让公众了解他们在特定关注领域的动向和发展。

  • 书籍: 广泛的用户可以使用几乎任何类型的内容创建书籍。民意调查、页面、网络日志和其他内容都可以轻松添加到书籍中。这是 Drupal 的一个非常有趣的功能,因为它允许创建一本真正独特的在线书籍,利用基于网络的动态内容的力量,为您的故事带来超现代的感觉。

  • 评论: 在任何社区中,人们都会感到有必要对感兴趣的话题进行评论。正因为如此,Drupal 的评论功能允许用户在他们喜欢的任何内容后面添加或附加评论(取决于管理员设置的权限)。实际上,论坛是基于评论的使用,这些评论被添加到网站上已发布的特定论坛主题中。

  • 论坛: 论坛是讨论和表达观点的媒介。在演示网站的情况下,将设置各种不同的论坛,为用户提供一个讨论重要主题和互动的区域。正如您将看到的,如果您愿意,您将能够非常容易地控制论坛的内容——实际上,Drupal 允许您检查试图进入您网站的任何和所有内容。

  • 地区设置: 这允许您以多种不同的语言展示您的网站,以创建一个真正国际化的网站。事实上,Drupal 更进一步,允许单个用户选择他们偏好的语言,以便在登录时自动以该语言查看。

  • 投票: 投票内容类型允许管理员(或拥有足够权限的任何人)创建一个包含问题以及几个选项的内容类型,投票用户可以从中选择他们偏好的答案。这是一个收集各种信息的有用工具,从您用户希望看到您网站上的哪些功能,到人们是否相信在其他星球上存在生命等。

实际上还有许多其他功能将被利用,以便使我们的网站完全运行,但我们不需要在这里详细说明它们,因为其中一些相对简单,而其他一些将在本书后面的部分详细解释。请相信我,还有很多工作要做!

从前面的列表中您可以知道,Drupal 管理员已经有一套强大的功能可用,我们实际上将探讨如何启用、修改和使用所有这些功能以及更多,在适当的时候。

我们不仅限于使用 Drupal 默认提供的功能。Drupal 被设计成让除了开发者之外的人也能轻松地通过更多功能来增强它。Drupal 的模块化设计意味着创建全新的功能通常只需要将几个文件复制到您的 Drupal 文件夹中——尽管,诚然,这可能更复杂,我们还将探讨需要修改数据库等修改的贡献。

CWC 将利用包括但不限于以下一系列贡献模块:

  • 分类访问权限: 允许管理员对谁可以做什么以及可以在哪种类型的内容上操作进行非常细致的控制。正如您稍后将会看到的,将会有一些用户需要他们的帮助来管理论坛,但他们不应拥有任何其他广泛的权力。使用这个贡献使得根据您希望他们处理的内容类型为任何用户概述权限变得容易。

  • Flexinode: 为管理员提供创建自定义内容类型的能力。如果存在无法使用标准内容类型(如页面或博客)轻松满足的特定需求,这将特别有用。

  • 广告服务: 允许管理员整合来自谷歌的广告。通过这种方式,您网站上的流量可以被引导到相关网站,以获得一小笔报酬。如果您网站上的流量足够多,那么这些小额报酬可以累积起来,为您提供一个不错的收入来源。

我们不仅满足于简单地利用各种模块来增加网站的功能,还会通过确保使用 Drupal 提供的分类系统合理地构建网站内容来“亲自动手”。我们还将探讨如何使用第三方脚本甚至 AJAX 为网站添加一些动态内容。

Drupal 社区

在接下来的几天、几周、几个月和几年中,你将需要的重要资源之一是 Drupal 在线社区。与其他有时因缺乏连贯和深入的支撑结构而受到批评的开源项目不同,你会发现 Drupal 做得非常好,而且相当容易学习。有众多类别,从信息、投票、论坛和新闻到支持,都可以在主页上找到:drupal.org

注意

在本书的其余部分,我们将假设你已经花了一些时间熟悉网站的工作方式。

强烈建议你定期使用drupal.org,并不断使用不同的元素和部分,以便熟练地提取你运行企业所需的信息和软件——特别是由于 Drupal 网站会不时发生变化!正因为如此,你也可能注意到这本书与 Drupal 本身之间有一些细微的差异。

网站中包含的所有信息都组织得很好,并且可以从页面顶部的主导航栏轻松访问,如下所示:

Drupal 社区

导航栏中的每个标签页都有自己的链接和页面,尽管有些类别包含相互关联的主题。你应该注意,当我们在这本书中提到社区时,我们是在谈论整个 Drupal 社区,包括所有支持结构、开发者、用户等等——不要与首页上的社区标签混淆,它更多地指的是世界各地的不同 Drupal 社区(稍后将有更多讨论)。

无论如何,让我们快速浏览每一个,看看它们能提供什么。

支持

首先,支持部分可以被视为一种万能页面,实际上包含了许多链接到各种其他社区页面,其中许多页面也可以通过主导航栏中的标签打开。例如,如果你需要查找有关 Drupal 的一些基本信息,可以从在线文档部分导航到Drupal 手册(稍后讨论),如下所示:

支持

简而言之,在本节中:

  • 在线文档部分提供了文档和帮助设施,包括一些常见问题的帮助以及安装和一般信息。

  • 安全部分提供了链接到安全警告和公告,以及订阅安全公告邮件列表或 RSS 源的选择。

  • 论坛和支持部分提供了链接,以防你需要帮助,以及存档和发布到 Drupal 论坛的技巧链接

  • 如果你不是英语语言使用者,或者你的社区主要使用其他语言,那么查看其他语言部分下的其他语言网站是值得的,其中包括德语、法语、西班牙语和南非荷兰语。

  • 专业服务和托管部分提供了与 Drupal 相关的多种专业服务的链接,包括托管和咨询。

  • 可以通过访问错误报告部分提交错误报告。请注意,在提交自己的报告之前,你应该始终检查是否已经报告了该错误。任何提交都会因为有人需要检查而消耗人力,如果每个人都反复报告相同的错误,时间浪费可能会很大。

  • 功能请求部分给你提供了一个查看其他人希望集成到 Drupal 中的功能的机会,如下所示:支持

    当然,你也可以提交自己的请求。

  • 还有一个有趣的选项,可以通过IRC 频道获得支持。IRC,或称互联网中继聊天,允许在互联网上进行实时、文本讨论。加入这样的群体显然是一个巨大的优势,因为它立即让你能够接触到许多其他 Drupal 用户。

  • 有一个你可以加入的邮件列表部分,一个开发者支持部分,以及一个在Drupal.org 问题部分下提出关于实际 Drupal 网站问题的论坛。最近,还增加了一个名为关于 Drupal 的书籍的新部分。

如果不确定去哪里,支持页面可能是你应该开始的地方。然而,通常情况下,你会有一个相当明确的需求,并且可以直接前往。

手册

这个部分是一个信息丰富的宝库,满足各种不同的需求。内容被收集到五个主要部分,如下所示:

手册

每个这些类别都包含一系列链接到信息页面(这些页面通常还包含到其他页面的链接),它们很好地解释了各自的主题。值得注意的是,在这些页面的左侧出现了一个块,其中包含链接到同一类别标题下的相关主题,以便你轻松地浏览信息。以下截图显示了Drupal 适合你吗?页面:

手册

建议您在继续阅读下一章之前至少浏览一下第一部分,以便尽可能多地了解 Drupal。同时使用这些手册与本书结合使用也是一个好主意,这样您就可以将在这里获得的实用建议和经验与网站上提供的参考型材料相补充。

论坛

论坛可能是您解决单个最大问题的资源和信息资产。与其他网站上的信息类型(除 Freenode Drupal IRC 外)相比,这些信息大多是静态的、书面答案或指南,而论坛为您提供了一个互动环境,您可以在这里学习和扩展您的知识。当然,它们也为您提供了一个分享您所学内容的平台。

在撰写本文时,仅支持相关的帖子就有大约 100,000 篇。这应该能给您一个很好的印象,这些论坛是多么广泛地被使用。以下截图显示了论坛主页以及前几个论坛类别。从大量的帖子中可以看出,这已经是一个相当大的知识库,希望您能抽出时间自己添加内容。

论坛

观察整个页面,有三个主要的论坛类别——通用、支持和开发——它们各自有多个子类别,使得导航结构相对容易。您还会注意到,在页面的右侧有一个包含最新帖子列表的块。此外,您还可以使用位于页面右上角的搜索工具,或通过drupal.org/search/node来搜索相关信息或用户。

最后,假设您是注册(并已登录)的 Drupal 用户,您还可以使用页面主标题下给出的链接来在论坛中发布新主题,如下所示:

论坛

在您开始发布大量问题和问候语之前,请务必了解使用这些论坛的某些礼仪,并且应始终遵循。在您开始在该网站上发布任何帖子之前,请先查看以下页面:drupal.org/forum-posting。简要总结如下:

  • 确保您已经搜索了论坛中类似的主题。使用这些帖子而不是创建重复的信息。

  • 请确保您的论坛帖子标题具有信息性和意义。

  • 确保在您的支持查询中提交足够多的系统特定信息——例如,提及您正在使用的 Drupal 版本以及数据库和数据库版本。

  • 请记住,并不是所有使用论坛的人都是英语母语者;因此,即使并非有意为之,某些帖子也可能被视为粗鲁或唐突。

  • 保持礼貌和理性——即使您对某个特定问题感到沮丧。

  • 捐赠一些时间来回复和帮助其他发帖者。

  • 如果您愿意,启用您的联系标签,以便人们可以通过电子邮件提供支持。您可以通过编辑您的联系信息来完成此操作,如下所示:

论坛

一些读者可能已经注意到了上一张截图中的标题为活跃论坛讨论的链接。点击此链接会弹出一个列表,显示最近有帖子的话题,如下所示:

论坛

如果您想查看您个人参与讨论的讨论,请点击我的论坛讨论链接。

下载

在我们开始为您的网站开发设置一切之前,我们将在下一章再次访问这个部分。然而,在我们到达那里之前,有几个有趣的观点需要注意。首先,您需要非常小心地选择您下载的 Drupal 版本,或者确实的模块和主题,因为每个后续版本都会在之前版本的基础上进行更改和改进,但有时也会破坏与其他功能的兼容性。

例如,您可以从以下屏幕截图看到,下载页面为我们提供了一些关于 PHP 兼容性的有趣信息:

下载

正如您所看到的,Drupal 4.5 无法与 PHP 5 兼容。现在,这本身并不是什么大问题,因为您的托管服务很可能在一段时间内仍然使用 PHP 4。然而,在某个阶段,大多数服务提供商将升级到 PHP 5 支持,因为 PHP 5 比其前身要复杂得多。了解这一点后,您可能会立即说这不会让我们担心,因为 Drupal 4.6(以及 4.7)都是可用的。

这完全正确,但如果您决定添加一个模块(我指的是在某个阶段您想要添加一个模块),那么查看drupal.org/project的项目页面,或者点击下载标签会得到:

下载

您可以从此页面上提供的说明中看到,如果您偶然需要为 Drupal 4.5 开发的模块,并且您正在使用 4.6 版本,那么您很快就会体验到不小的挫败感——这一点在此时期尤其有效,因为 4.7 是全新的,因此许多模块尚未更新。

这种问题可能发生,因为模块是独立于核心开发的,这意味着保持与主开发团队任何变化的同步取决于单个模块开发者。

自然地,并不是每个人都会及时更新模块,因为这些开发者通常没有报酬,也没有义务完成这项工作。他们只是在能够提供时,提供他们能提供的最佳代码,我们显然应该为此感到感激。

关于如何使用下载页面,值得注意的是,每个可下载项目框的右下角都提供了三个链接。这些是下载了解更多错误和功能请求。显然,第一个选项相当直观,但在下载任何内容之前,你应该始终查看了解更多选项,以确保你得到你确切想要的东西。

例如,Acidfree项目的了解更多页面包含了关于已知限制更新历史以及大量关于发布、资源、支持开发的材料——如果你一开始不确定 Acidfree 能做什么,这些信息非常有用。

除了这些,本节的目的在于,在开始下载一切之前,你应该仔细思考你想要从你的网站上得到什么。在下一章中,我们将把理论付诸实践,并利用这一部分来获取 Drupal 的副本。

贡献

初看可能会觉得,在你学习软件的过程中,你几乎无法对 Drupal 社区做出有意义的贡献。虽然这并不完全正确,但了解我们有什么可以利用的东西是值得的:

贡献

首先,支持 Drupal 最简单的方式是通过捐款——我几乎能听到你阅读这段话时的叹息和呻吟,但请记住,你得到的是绝对免费的。你还可以通过撰写评论、在你的网站上整合 Druplicon 等方式帮助推广 Drupal。此外,总有需要人们帮助测试、翻译、支持和记录 Drupal 的需求。

最后,一旦你积累了一些经验并感到自信,你就可以开始考虑帮助 Drupal 的开发工作了。无论你选择做什么,你都会发现,为了在社区中变得积极主动,你需要的信息或帮助在贡献部分都可以轻松找到。

联系与社区

这两个部分相当直观,所以我将它们合并在一起。联系页面只是允许你向 Drupal 团队发送电子邮件,你需要记住,这里不会解决任何技术支持查询——你必须使用支持论坛。只需确保从提供的下拉列表中选择最相关的类别,然后就可以开始了。这里有一个示例:

联系与社区

这很简单!接下来是社区页面,你可以看到,这为你提供了访问各种国际 Drupal 社区以及一些你可能感兴趣的聚合资源和标签服务:

联系与社区

顺便说一句,标签服务只是将各种关键词关联到一系列页面上。这使得根据用户定义的分类查找内容变得容易——这样做也非常灵活,因为你不再需要将内容限制在预定义的分类中。你可以在 del.icio.us 网站上找到有关标签和标签化的更多信息:del.icio.us/help/tags

关于 Drupal 社区的介绍就到这里。你应该对自己能够高效地使用该网站并能在需要时找到帮助感到相当自信。然而,在我们继续下一章之前,还有一个重要的问题需要讨论……

Drupal 许可证

自然地,你应当了解在使用他人开发的软件时,你所承担的所有法律义务和责任。为此,你会发现,当你下载 Drupal 的副本时,它将包含一个供你阅读的许可证文件——实际上,这是许可证的一部分,要求包含此副本。

如果你像我一样,面对阅读许可证和其他法律文件的前景时可能会觉得难以保持清醒。因此,为了避免让你逐字逐句地复述整个许可证,我将提供一种释义版本,旨在向你提供关于许可证意图的精髓,特别是它如何适用于 Drupal。

注意

请记住,我这里所说的绝对不是一份法律文件。如果你希望遵循法律条文,你必须亲自阅读整个许可证。

虽然听起来可能有些奇怪,但使用 GNU GPL(通用公共许可证)的一个基本原因是为了保护和帮助你——使用软件的人们。GPL 在本质上与专有软件的许可证不同,后者在很大程度上是为了保护开发和创建软件的企业的权利。

顺便提一下,GPL 并非专门与 Drupal 相关联;相反,Drupal 使用了 GPL,这是一种用于分发开源软件的通用许可证。你可以查看 GNU 主页以获取有关这一运动的更多信息:www.gnu.org/home.html

事物运作的方式是,软件首先被版权保护,然后允许每个人自由使用。一开始这可能会让你觉得有点奇怪,因为如果你只是让任何人都可以使用它,那么版权保护的意义在哪里呢?这样做的原因是,版权保护和软件许可赋予开发者权力,要求使用该软件的人(无论是否进行了修改)向他们分发的每个人提供与原始软件相同的权利。

这意味着,实际上,任何使用此软件的人都不能从中创建专有软件。所以,如果你决定自己构建并改进 Drupal 以将其作为自己的产品出售,那么你将受到相同的条款约束,并将不得不向任何要求的人发布你的源代码。但请记住,GPL 的目标不是通过强迫你以 GPL 的形式发布它来获取你自己的工作的信用。如果你已经开发出可以识别的程序或代码,这些程序或代码完全是你的,并且独立于提供的原始源代码,那么 GPL 不一定适用于你的工作。

许可证中的一些主要要点总结如下:

  • 你可以自由地复制受 GPL 保护的软件以及以你认为合适的方式分发这些副本。最重要的事情是确保你不移除许可证。

  • 你可以修改源代码并创建你想要的任何类型的派生产品。再次强调,你必须传递相同的许可证(正如你收到的),但这次你必须确保你也非常清楚地说明你所做的更改。(这是为了在你引入可能破坏互联网的病毒的情况下保护原始程序员。)

  • 你在任何阶段都不得违反 GPL 的条款,否则你会发现你当前使用该软件的许可证将被终止。

  • 你不必接受许可证的条件。(你可以从你不需要签署任何东西这一事实中看出这一点。)然而,如果你不接受许可证的条款,你就不能使用该软件。

  • 如果你决定自行重新分发软件,那么你不能添加任何限制或以任何方式修改许可证。你也不必确保你分发的软件的各方遵守它。

  • 如果你被法院判决(或任何其他法律程序)强制执行不符合 GPL 要求的条件,那么你根本不能分发该软件。

  • 注意与软件一起分发的许可证版本。如果存在一个版本,那么你必须使用该版本或更高版本,但不能使用更早的版本。

  • 该软件没有任何保修,根据 GPL 修改或分发软件的任何人不对任何事负责——特别是损害或无法运行等问题。

最后,如果你只是打算用 Drupal 来构建网站,你真正需要知道的是,它在价格上和谁可以访问其源代码方面都是免费的。你们中的悲观主义者可能会说:这听起来像是一堆废话。你甚至不能提供保修或保证软件会工作,因为没有人有钱支付真正的开发费用。好吧,你不必担心这一点。开源软件正是世界上最优秀、最可靠的软件之一,正是因为世界上每个人都可以看到代码并对其进行改进。

你唯一需要担心 GPL 精细之处的时候,就是当你决定设立一家企业,用金钱来安装、配置和定制 Drupal 网站,或者修改和重新分发原始源代码的时候。

摘要

本章既为 Drupal 世界提供了一个介绍,也是本书其余部分的一个背景。这里讨论了几个重要的事情,这些事情在你发展技能和知识的过程中将扮演重要的角色。

毫无疑问,成为一名成功的 Drupal 管理员最重要的方面之一是能够高效地利用社区。到现在为止,你应该已经在 Drupal 网站上注册,并且粗略地浏览了大部分内容。随着时间的推移,你可能会与其他成员建立关系,并最终成为整个社区的一大财富。

此外,本章花了一些时间来查看将在本书其余部分构建的演示网站。这表明,即使在入门级别,我们也能创建一个极其强大的基于网络的程序,可以用来驱动整个社区——而且根本不需要学习任何编程。这并不是说没有工作要做——毫无疑问,你发现研究和决定你的网站需要什么相当乏味。但请记住,你现在投入的任何背景工作都将带来回报;所以这绝对值得。

在介绍性材料完成之后,现在是时候开始着手工作了,下一章我们将设置开发环境以及获取和安装 Drupal 的最新版本。

第二章。设置开发环境

究竟什么是开发环境,为什么我需要它? 人们普遍认为,在构建网站的过程中,你不应该让它对互联网用户可用。在你还在进行更改、破坏和修复事物的时候,让你的网站“上线”,意味着人们可能会找到你的网站,尝试使用它,并对你网站开发技能形成极差的印象。在最坏的情况下,你可能会发现,由于安全设置不当,你甚至无意中允许恶意用户获取敏感信息,以及其他一些问题。

与其让公众访问你的工作进度,不如在你的家庭或办公室电脑上设置一个 PHP 启用的 Web 服务器。这个服务器,连同 PHP 和你的数据库,可以用来设计和构建你想要的一切,然后再将最终产品转移到实时网站上。开发环境正是这样一台机器,以及它附带的发展工具和技术,你可以用它来构建你的网站。因此,本章将确保你正确且高效地设置它,以便你可以在接下来的章节中直接开始处理 Drupal。

具体来说,我们将讨论以下重要主题:

  • 涉及技术的简要介绍

  • 获取和安装 Apache、MySQL 和 PHP

  • 获取和安装 Drupal

  • 升级 Drupal

  • 故障排除常见问题

  • Drupal 简介之旅

对于 Apache、MySQL 和 PHP 的安装和设置,我们只会涵盖 Windows 系统,因为我们相信 Linux 用户已经安装了所有必要的软件(或者知道如何安装)。如果你还没有安装所有软件,快速浏览一下软件所在网站上的说明应该足以让你开始操作。Drupal 的安装过程在 Windows 和 Linux 系统上基本相同;因此,使用任一系统的用户都可以跟随“获取和安装 Drupal”部分进行操作。

在我们开始之前,然而,有一项至关重要的建议需要给出:

注意

确保你有一个好,最好是闪电般的快速,互联网连接,因为你将下载相当多的软件。

对于已经安装了各种软件的用户,您可能会发现跳过不需要的部分,只阅读感兴趣的部分很方便。除了提供安装信息外,本章还将包含一个故障排除部分,解决与 Drupal 设置过程相关的一些最常见错误。

还应注意的是,由于 Drupal 的开发是以灵活性为前提的,因此它可以用作 IIS 之外的替代 Web 服务器,同时也可以使用 PostgreSQL 作为替代数据库,因为这些支持正在积极开发中。我们不会展示如何设置每一个组件,而是将重点放在最流行的组合 Apache、MySQL 和 PHP 上。

Drupal 环境

我知道你们大多数人现在都迫不及待地想要开始,可能更愿意直接修改你的 Drupal 网站。在我们这样做之前,花几分钟时间阅读这一部分,了解幕后的一切是如何组合起来的,这对你们来说将是非常有益的。了解各种技术如何合作以提供工作的 Drupal 网站,将极大地帮助你们在长期中。

首先,最好的做法是查看我们将要使用的每个基础技术:

  • PHP:PHP,或 PHP Hypertext Preprocessor,是 Drupal 所使用的语言。最近它经历了一次重大升级,现在几乎是一个完全功能的面向对象语言,具有一些非常强大的功能。PHP 在互联网上被广泛用于各种不同的项目,以其易用性而闻名。当前的 PHP 版本是 PHP 5,这是我们将在本书中用于演示的版本,因为最新的 Drupal 版本与 PHP 5 兼容。然而,你们可以使用版本 4,因为这是目前大多数互联网服务提供商所使用的版本。好消息是,我们不需要深入编程代码来构建我们的网站——Drupal 处理了大多数,如果不是所有,复杂的编程问题。

  • Apache:这是我们将在开发阶段用来提供网页服务的 Web 服务器。Apache 是互联网上最受欢迎的 Web 服务器,每天都有数百万个网站在使用它。事实上,正如 Apache 网站所说:它比所有其他 Web 服务器加起来还要广泛使用

  • MySQL:这是我们用来存储所有保持网站运行所需信息的数据库软件。从客户详情到产品信息以及其他许多东西都将存储在 MySQL 数据库中。遵循流行的趋势,MySQL 也是全球最受欢迎的数据库软件,全球有超过六百万个活跃安装。

现在,由于我们不希望浪费太多时间下载和安装我们需要的各种软件,我们将使用包安装,它只通过一次安装就为我们提供了一切所需。我们将在本书中使用的包叫做Apache2Triad

既然我们已经知道了我们要使用什么,那么快速看一下我们将如何使用它是很重要的。以下图表展示了如何简化地了解一切是如何工作的,其中阴影部分表示包含 Apache web 服务器、PHP 解释器和 MySQL 数据库的 Apache2Triad 软件包,Drupal 已安装在该系统上:

Drupal 环境

因此,每当用户在您的 Drupal 网站上做任何事情(希望是做出有意义的贡献)时,以下是会发生的事情:

  1. 相关信息以 HTTP(超文本传输协议)请求的形式打包发送到服务器。HTTP 请求有两种形式——要么是 GET,要么是 POST。对于我们来说,了解 GETPOST 如何工作并不重要,只要您理解可以通过这些请求从用户那里捕获信息并发送到服务器进行处理即可。

  2. 服务器接收到 HTTP 请求后说:“啊!这是一个请求的 PHP 页面。我需要将其发送给 PHP 引擎进行处理。”然后 PHP 页面被处理并适当地执行,任何由用户请求引起的必要操作都会被执行。

  3. 一旦完成,服务器就会向用户的浏览器返回适当的响应,然后循环继续。

有很多提供动态网页内容的方法,这些方法不依赖于 PHP 服务器请求。相反,处理是在应用程序的客户端(换句话说,在网页浏览器)上完成的。我们将在第九章中稍后讨论如何使用 JavaScript 增强您的网页,但您在这里看到的是一切工作的基本原理,即使有一些例外。

尽管这一节对 Drupal 相关的底层技术进行了一次快速浏览,但这里包含的信息在某些阶段应该非常有价值。例如,了解一切是如何结合在一起的通常有助于您隔离遇到问题的原因,从而更快地解决问题。

目前这一切看起来可能有些令人畏惧,但请记住,Drupal 本身就处理了大多数,如果不是所有,与确保一切顺利运行相关的复杂性。正如您将看到的,我们的工作变成了定制而不是实际的软件开发。有了这个基础,让我们继续进行安装过程。

获取和安装 PHP、Apache 和 MySQL

如前所述,我们将利用软件包安装来简化创建可工作开发环境的工作。您会注意到,大多数软件安装实际上就是学习一个过程,然后为所需的任何软件重复该过程。更常见的情况是,您将:

  1. 前往软件生产商的网站

  2. 找到下载页面

  3. 下载软件

  4. 解压软件或运行可执行文件,具体取决于安装方法

  5. 安装软件

  6. 配置您的安装

  7. 测试您的设置

这听起来很简单;所以前往apache2triad.net/,这是 Apache2Triad 项目的首页,点击屏幕底部左侧框中的下载链接。(您可以随意浏览以了解更多关于这个有用企业信息。)这将带您到 SourceForge 网站上的下载页面:sourceforge.net/project/showfiles.php?group_id=93507

选择您希望使用的软件包——在本书中,使用了版本 1.5.3 的发布包。在撰写本文时,这是最新的稳定版本,但您当然可以使用更晚的版本,这不会影响您在这里的跟随。一旦您为某个软件包点击了下载,您将看到一个下载选项列表。发布包 1.5.3 只有一个选项,如下所示:

获取和安装 PHP、Apache 和 MySQL

这是我们将要下载和安装的软件包。为了做到这一点,只需点击软件包名称.exe文件,这将带您到一个镜像站点列表,您可以从中选择一个来提供下载。镜像只是一个在不同地理位置提供所有相同设施的服务器——这样做是为了减少单个服务器的负载,并为全球各地的人提供更快的下载。做出选择并点击下载以开始。

根据您的 PC 安全设置,您可能会收到以下警告信息:

获取和安装 PHP、Apache 和 MySQL

简单点击运行以继续(或者如果您想保留副本,请点击保存)。在这个时候,如果您连接速度较慢,可能需要花一些时间,您可能想要休息一下,喝杯咖啡或茶。

在设置过程中某个阶段,安装程序将要求您确认几个设置,您可以根据提示随时进行更改。所有可配置的设置都有合理的默认值;所以您实际上不必太在意这一点。然而,您将被要求输入密码。请确保使用一个您能记住且安全的密码。您需要使用 8 个字符或更多,并且最好在密码中使用一些数字。

注意

确保您能记住您的密码,因为它在设置过程中稍后运行初始化任务时是必需的。

一切完成后,您应该会收到以下信息:

获取和安装 PHP、Apache 和 MySQL

在点击确定之前,请确保保存并关闭你打开的所有重要文档。一旦你的机器重新启动,你会发现你有一系列新的和令人兴奋的选项可以探索,这些选项位于开始菜单下的所有程序中的Apache2Triad选项下。例如,以下选项是 1.5.3 版本中提供的:

获取和安装 PHP、Apache 和 MySQL

对于我们当前目的来说,还有很多我们不需要的东西,但为了确保一切按计划进行,点击开始菜单中的打开网站根目录,你应该会在默认浏览器中看到以下网页:

获取和安装 PHP、Apache 和 MySQL

这确认了一切都按预期运行。到目前为止,这很简单!在之前的屏幕截图中需要注意的一点是最后的链接叫做htdocs。在 Apache 服务器中,文件系统中的htdocs文件夹通常被称为文件夹。这意味着为了使 Apache 能够提供,你的网站的所有网页和文件夹都必须放在htdocs内部。如果某个东西不在htdocs中,那么就无法浏览它!

从这里我们知道,为了知道下载后 Drupal 应该放在哪里,我们必须在文件系统中定位名为htdocs的实际文件夹。假设你选择了默认设置,你将在以下目录中找到htdocs,以及设置过程中安装和创建的所有其他内容:(在 Windows 机器上)C:/apache2triad/

在我们继续前进之前,看看 Apache2Triad 安装中提供的内容是值得的,因为随着时间的推移,一些提供给你的设施可能非常有用。你还会发现,许多现场网站的主机套餐提供的功能与你现在在 PC 上拥有的功能几乎相同。

对于我们 Drupal 用户来说,特别有趣和有用的是 phpMyAdmin,这是一个完整的 MySQL 数据库管理工具。随着你变得更加高级并希望对你的数据进行操作,它可以使你的生活变得更加容易。你完全有可能通过使用 phpMyAdmin 来完成大多数任务,而无需学习 MySQL 的命令行客户端。

注意

如果你登录 phpMyAdmin 或网站的任何其他部分有困难,那么尝试使用root作为用户名,并使用你在设置过程中设置的任何密码。

我们现在有一个平台,可以从这里开始构建 Drupal 网站。当然,我们仍然需要 Drupal。

获取和安装 Drupal

第一章已经浏览了 Drupal 网站上的下载页面;因此,目前没有太多问题。前往drupal.org/project/Drupal+project,点击您希望下载的 Drupal 版本号——通常,最新稳定版本是您应该选择的。点击下载以获取最新版本并将其保存到您的C:驱动器或我的文档文件夹(或您想要的位置)。

现在,Drupal 的下载与 Apache2Triad 安装程序不同,我们将自己安装 Drupal;它没有自己的.exe安装程序文件。相反,我们会被告知是否要保存(或打开)一个.tar.gz文件。如果您发现您的 PC 无法识别.gz文件(这是针对 Windows 用户的),那么您需要下载一个 zip 程序,如 WinZip(www.winzip.com),或者更倾向于开源选项,如 7-zip(www.7-zip.org)。

当您确认可以打开并解压缩下载的tar.gz文件后,将其提取到 Apache 安装的htdocs文件夹中。如果您现在查看,您将看到如下内容:

获取和安装 Drupal

我们仍然需要创建一个数据库,并填充所有 Drupal 运行所需的必要表和结构——尽管从技术上讲,您可以尝试浏览 Drupal 页面,因为它们现在位于htdocs文件夹中。有几种方法可以实现这一点,但让我们坚持最基本的方法,以便使本节适用于所有人。

  1. 打开一个命令行外壳。在 Windows 中,可以通过点击开始,选择运行并输入cmd来完成。

  2. 在提示符下输入以下命令:

    C:\ mysqladmin -u root -p create drupal
    
    
  3. 当提示输入密码时,请输入您的密码。(这是您在 Apache2Triad 设置时输入的密码。)

  4. 通过以下命令进入 MySQL 命令行提示符:

    C:\ mysql -u root p
    
    
  5. 再次输入您至今为止一直在使用的相同密码,当提示时。

  6. 为了为 Drupal 特别设置数据库用户名和密码,请输入以下命令:

    mysql> GRANT ALL PRIVILEGES ON drupal.* TO nobody@localhost IDENTIFIED BY
    'password';
    
    
  7. 请记住,用与您相关的值替换此命令中加粗的部分——nobody(您的用户名)和password(您的密码)。之后,您应该会看到一个类似以下屏幕的界面:获取和安装 Drupal

  8. 接下来,输入以下命令以确保这些设置立即生效:

    mysql> flush privileges;
    
    
  9. 输入quit退出 MySQL 命令行客户端,然后通过输入以下命令来加载数据库:

    $> mysql -u drupal -p drupal < C:/apache2triad/htdocs/drupal-4.7.0/
    database/database.4.1.mysql
    
    
  10. 请记住,输入您为 drupal 数据库用户设置的正确密码——在本例中,如上图所示为 ny4thi。加粗的部分可能根据您在之前步骤中定义的用户和您获得的 Drupal 版本而有所不同。

到目前为止,Drupal 的所有数据库设置都已完成,我们只需要处理几个配置任务,以便完成安装过程。对于那些对在设置过程中引擎盖下发生了什么感兴趣的人,请使用以下方法打开 MySQL 命令行提示符:

$> mysql udrupal p drupal

当提示输入密码时,然后在命令行中输入以下内容:

mysql> show tables;
mysql> select * from <tablename>;

第一条命令将列出drupal数据库中现在所有存在的表。下一条命令可以用来查看任何给定表的详细信息,只需将其中一个现有的表名替换为<tablename>。通过查看结果,您应该能够看到已经做了大量工作来确保我们网站所需的一切都已创建。

我们现在可以继续配置设置!

通过导航到C:\apache2triad\htdocs\drupal-4.7.0\ sites\default来访问您的 Drupal 安装——显然您的版本号可能不同。使用您选择的编辑器打开settings.php文件,并修改大约在第 81 行的以下行:

$db_url = 'mysql://username:password@localhost/database';

例如,演示网站的设置现在是:

$db_url = 'mysql://drupal:ny4thi@localhost/drupal';

因为正如您所知,我们创建了一个名为drupal的用户,并给这个用户设置了密码ny4thi,这允许他们访问使用下载中提供的 SQL 脚本创建的drupal数据库。目前我们唯一需要考虑的其他设置是描述您网站地址的基本 URL——填写此信息是可选的;所以如果您在第一次检查网站时发现存在断链等问题,请回到这个设置。

假设您没有在网络上使用其他服务器,只需将额外的文件夹添加到默认地址,并从行首移除井号(#)符号,如下所示:

$base_url = 'http://localhost/drupal-4.7.0';

记得将粗体部分更改为您下载的包的正确 Drupal 版本。

如果您已将文件保存到其他位置,那么您需要相应地调整您的配置设置。完成之后,保存文件中的更改,并准备进行压力测试。如果一切按计划进行,当您在浏览器中导航到基本 URL 时,应该会看到一个全新的 Drupal 网站,如下所示:

获取和安装 Drupal

如果您看到的不是这个屏幕(或者非常接近),那么请不要担心。接下来将很快有一个故障排除部分,以及一个完整的社区,其中包含论坛来帮助解决问题。然而,如果您看到的是这个,那么恭喜您,您现在已经成为了一个自豪的默认 Drupal 网站的管理员。当然,如果您每次想要访问网站时都不想输入drupal-4.7.0,您可以自由地更改这个文件夹的名称。

注意

确保您在settings.php中对$base_url变量进行了相应的更改,以反映地址的任何更改,否则您将得到一个损坏的网站。

实际上,这就是安装 Drupal 所需做的全部事情。从今往后,所有其他的事情都是配置和定制。我们首先需要做的事情之一是设置一个管理员账户,所有关于它的说明都已经在您默认的网页上呈现,如之前的截图所示。在我们进行简要的 Drupal 之旅并在这个过程中设置管理员账户之前,我们需要考虑一些其他问题。

升级 Drupal

有时,为了保持您的网站运行顺畅且无故障,您需要升级您的 Drupal 安装。例如,有时可能会发现安全问题,人们升级以避免成为恶意黑客的受害者是很重要的。不要对此过于恐慌。所有软件,无论是专有软件还是开源软件,都有弱点。弱点是您无法逃避的东西。重要的是一旦发现它们,如何处理它们。在 Drupal 的情况下,有一个庞大的社区在寻找漏洞、报告它们、修复它们,然后免费向所有用户提供解决方案。

因此,如果需要的话,了解如何进行无痛升级是很重要的。正如您所期望的,Drupal 的过程相当简单,但在我们查看它之前,我应该提醒您:

注意

如果您使用的是非默认主题,您的网站可能会出现故障。在升级之前恢复到默认主题可能是最好的选择。

目前,这个注意事项不应该让您感到任何困扰,因为我们甚至还没有讨论到主题——不过将来可能会很有用。让我们继续:

  1. 备份您当前的数据库,以便保留用户添加的所有信息以及您实施的任何配置更改。(备份在第十章中讨论。如果您需要在此期间进行备份,请快速查看那里。)

  2. 备份旧文件,特别是那些包含重要设置,如您的样式表或位于sites/default/directory中的配置文件。这允许您在新网站上重新实施任何重要的设置。

  3. 从您的文件系统中删除所有旧的 Drupal 文件,并且假设您想要从相同的位置运行您的网站,将所有新文件解压缩到相同的文件夹中。

  4. 根据旧配置文件中保存的设置对配置文件进行必要的更改。

  5. 以网站管理员(必须是用户编号 1)的身份登录,然后导航到您的 Drupal 主页,并通过浏览器访问update.php脚本来运行它。例如,演示网站的更新页面将是http://localhost/drupal-4.7.0/update.php。这将显示如下页面:升级 Drupal

  6. 在您点击运行数据库升级脚本链接之前,请阅读这些说明,以确保您执行可能需要的任何特定版本的任务。

  7. 点击链接以打开以下页面:升级 Drupal

  8. 选择要执行的操作更新(仅在您出于某种原因对自动选择不满意时),然后点击更新。如果一切顺利,您应该会看到一个已执行更新的列表,以及这些操作的状态;类似于以下内容:

升级 Drupal

您现在已完全更新,可以继续正常操作。当您需要升级时,还应查看另一个非常有价值的信息来源,即 Drupal 网站本身:drupal.org/upgrade/。此页面包含有用的说明和特定版本的注意事项、问题和说明,可能非常有用。

故障排除常见问题

在本节中,我们将探讨在您的设置过程中最有可能出现的两个问题。我们还将查看它们如何表现出来以及如何快速解决它们。需要注意的是,在这个早期阶段,由于安装程序已经被广泛使用,并且大多数,如果不是全部,的 bug 已经被消除,因此不太可能出现问题。这对我们来说是个好消息,因为任何错误很可能是由于打字错误或其他相当简单的原因造成的,这应该很容易纠正。

不幸的是,我们无法在本节中涵盖所有内容;因此,我们还将概述一个简短的过程,您可以使用它来解决任何问题,而不仅仅是与安装相关的问题。在遇到问题时遵循一个合理的流程是无价的,而不仅仅是展示每个问题的解决方案。在本节结束时,您应该有信心能够安装和升级 Drupal,以及处理可能出现的任何问题。那么,让我们开始吧。

如果您收到的不是默认主页,而是如下信息:

故障排除常见问题

然后,很可能是您在/sites/default/settings.php文件中的连接字符串中犯了拼写错误。请重新检查此文件,以确保您提供的名称和密码是正确的。如果您找不到问题,请在settings.php文件中输入您的 root 名称和密码,看看您是否可以用它登录。如果这可行,那么您就知道问题出在用户和/或他们的权限上,而不是其他地方,所以请再次检查步骤 5 中的GRANT语句,并确保它与settings.php文件中的设置相匹配。

在上一张截图中,settings.php文件中给出的用户名有拼写错误,导致 Drupal 试图用用户名drupa而不是drupal连接到 MySQL。当然,有些人可能已经通过了这一点,却遇到了类似这样的情况:

故障排除常见问题

如您所见,我们几乎就要成功了,但肯定是在某个环节出了问题,这从断开的链接和缺少任何格式和样式可以证明。这个错误最可能的原因是设置了错误的基 URL——在 4.7 版及以后的版本中,Drupal 会自动检测这个 URL,所以这不应该是一个太大的问题。然而,如果您将htdocs中的 Drupal 文件夹名称更改为drupal而不是原始的drupal-4.7.0,那么在不调整基 URL 的情况下浏览该地址可能会引起这类问题。

为了解决这个问题,确保您在浏览器中找到页面的地址与settings.php文件中给出的地址相同,只是没有尾随的反斜杠,如下所示:

$base_url = 'http://localhost/drupal-4.7.0';

哎呀,您可以看到这仍然是旧值;所以我们需要更新它以匹配上一张截图中的地址,如下所示:

$base_url = 'http://localhost/drupal';

一旦您设置了正确的设置,您会发现网站会正确显示。但是,如果其他事情出了问题怎么办? 好吧,在这个时候,可能发生的问题类型不容易隔离;所以您最好知道如何去解决它们。以下要点强调了您在故障排除任何问题时应该使用的流程:

  1. 仔细检查您收到的任何错误消息,并尝试自己解决问题。

  2. 访问 Drupal 论坛并搜索类似的问题。

  3. 查看drupal.org/node/199上的故障排除常见问题。

  4. 查看错误列表(drupal.org/project/issues ),看看您的问题是否是已报告的错误。

  5. 如果您找不到错误、类似帖子或问题,那么请尝试在论坛上发布您的查询,并请求社区中的某个人帮助您。

  6. 作为补充,上 Google 并尝试使用相关关键词查找类似的问题,希望找到一个解决方案。

在这个阶段,你很可能不需要使用所有六个选项,但在未来的某个时候,你可能会发现你需要比在网上搜索更多的专业知识。如果这种情况发生,那么不要绝望,如果你愿意支付费用,有顾问可供选择。不过,现在,你应该准备好继续设置过程中的最后几个任务,这些任务将在下一节中执行。

Drupal 简游

在我们继续讨论定制和配置主题之前,重要的是我们先了解一下 Drupal 的实际样子,并确保它已经启动并且运行正常。为了做到这一点,我们需要查看一些 PHP 设置。一旦这些问题得到解决,我们就需要创建第一个用户,他将控制网站的各个方面。没有对实际 Drupal 页面的讨论,任何 Drupal 之旅都不会完整,因此,我们将在本节末尾完成一些尝试后,查看一个示例。

然而,首先让我们来处理 PHP。

几个重要的设置

我将演示 Apache2Triad 设置所需的更改,但如果你选择了其他任何东西(或者如果你已经安装了所有东西),你可能会注意到布局方式上的细微差异。现在,我们需要做所有这些事情的原因是,我们显然希望 Drupal 发送的任何电子邮件都来自一个我们可以访问的工作电子邮件地址,并且我们需要检查 Drupal 用于发送电子邮件的mail()函数是否有一个 SMTP 服务器可以与之配合。既然我们最终不得不在某个地方设置这个(假设它还没有设置),我们不妨现在就做。

打开你的php.ini文件,在 Windows 使用 Apache2Triad 的情况下,该文件位于C:\WINDOWS。搜索以下行:

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
; For Win32 only.
sendmail_from = admin@localhost
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

你需要为 PHP 提供一个可以在这里工作的 SMTP 服务器。如果你在 Windows 上使用 Microsoft Outlook,可以通过查看工具 | 账户 | 属性菜单中的服务器选项卡来找到你正在使用的 SMTP 服务器。此外,你可能还想设置的不是admin@localhost;因此,请确保相应地做出这些更改。对于演示网站,进行了以下更改:

[mail function]
; For Win32 only.
SMTP = smtp.dsl.<myserver>.net
smtp_port = 25
; For Win32 only.
sendmail_from = staff@contechst.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

显然,你必须能够访问一个可用的 SMTP 服务器——如果你没有服务器可以使用,那么你就无法从你的网站发送电子邮件。这在目前并不是一个巨大的问题,而且,即使你无法从你的开发机器发送,你的实际网站仍然能够发送邮件。

注意

为了让这些设置生效,你还必须记得重新启动 Apache 服务器。

你可以通过双击屏幕右下角的过程栏中的 Apache 图标来重新启动 Apache,然后在菜单中选择重启。你也可以通过开始菜单访问服务器。完成这些后,你可以像平常一样继续使用 Drupal。

创建管理用户

如默认 Drupal 页面所述,你需要点击创建第一个账户链接来开始操作。这将显示注册页面,你可以适当地填写。一旦你点击创建新账户,Drupal 将自动尝试发送欢迎邮件(如果你收到,那么你知道你的 SMTP 设置是有效的)以及打印出如下所示的消息:

创建管理用户

注意到,不仅已经成功将电子邮件发送到了我在注册过程中指定的地址,而且这封电子邮件来自我在稍早前在php.ini文件中指定的地址。

注意

如果你没有互联网连接,你仍然可以设置你的 Drupal 网站,但你将无法使用如这里所示的第三方 STMP 服务器发送和接收电子邮件。

到目前为止一切顺利!下一步是将你的新密码输入到网站上——记得选择一个比目前分配的稍微容易记住一些的东西。完成之后,只需在页面底部点击提交继续——你可能希望先查看一下其他设置并做出任何快速更改(例如添加签名或更改时区)。

使用管理面板

在我们进入下一章更严肃的网站构建问题之前,让我们先轻松一下。一旦你完成了编辑用户设置,点击页面左侧的管理链接,这将显示一个类似这样的页面(已选择模块选项):

使用管理面板

在我们真正开始操作之前,列出每个选项的功能是值得的,因为当你深入其中时,可能会变得有些混乱——主要是因为菜单项的数量很多,并不是因为网站特别难以管理。特别注意的是以下内容:

注意

管理菜单项下可用的部分可能会根据你启用的模块、添加的贡献或用户分配的权限而变化。

这意味着,在你添加并启用了一个新模块之后,你应该始终确保检查该部分是否有新的选项可用。你也应该意识到,并非所有用户都会拥有相同的管理选项,你需要检查他们是否有足够的权限来完成他们打算执行的任务。我们将在稍后更详细地探讨这些问题;因此,在这个阶段,没有必要急于求成。

以下列表概述了核心选项:

  • 访问控制:允许你设置权限以控制用户可以在你的网站上做什么。

  • 块: 启用的块可以在您网站上的多个位置显示。块可以包含各种信息,例如谁在线或最新的论坛帖子。

  • 分类: 允许管理员对网站上的内容进行分类和分类。Drupal 有一个非常复杂的分类系统,即分类模块。

  • 评论: 允许管理添加到网站上的评论。评论与其他内容类型不完全相同,而是附加到其他内容类型上。

  • 内容: 允许管理网站上所有帖子。它提供了各种过滤器,以便快速找到特定内容以及更新选项。

  • 输入格式: Drupal 可以以多种方式查看用户的内容。这从过滤 HTML 到完整的 PHP 代码都有。

  • 日志: 启用记录各种事件,例如使用信息、警告和错误,这些可以在健康网站的常规维护期间使用。

  • 菜单: 允许创建和管理导航结构。从这里可以启用或禁用菜单项,创建新的菜单项,以及处理主要链接。

  • 模块: 提供 Drupal 的功能(标准 Drupal 分发中包含许多核心模块,还有许多需要下载和安装的贡献模块),可以根据网站的需求启用或禁用。

  • 设置: 提供了一个方便的页面,可以从中实施网站的通用配置。

  • 主题: 控制您网站的外观和感觉。默认情况下有各种选项可用。记住,如果您了解一些 PHP、HTML 和 CSS,也可以创建您自己的全新主题。

  • 用户: 从这里您可以添加、删除或编辑您网站上任何和所有的用户。

  • 帮助: 包含指向 Drupal 手册以及各种模块的帮助主题的链接,之后是一个重要术语的简短词汇表。

让我们实际对网站进行一些修改,看看我们能做什么。请前往管理菜单项下的模块部分,勾选启用标题下的相关复选框,然后点击保存配置。您应该会立即注意到页面加载时有一些变化,以博客相关的菜单项的形式出现——在菜单顶部寻找新的我的博客链接。在我们看到实际网站如何改变之前,前往(同样在管理下)并做同样的事情,确保您启用了一些块,并在位置下拉列表中选择右侧栏

目前不必担心具体要做出哪些更改。我们只是快速查看使用管理工具做事情有多容易。下一节将通过一个示例 Drupal 页面截图来查看一些更改的效果。

一个示例 Drupal 页面

完成修改后,点击左侧导航块中的创建内容,然后点击博客条目。一旦打开博客页面,只需添加一些内容,无论是什么,然后点击预览以查看效果,如果满意,点击提交。如果你现在注销,你会面对你新的默认页面。让我们简要地看一下它,以便讨论一些主要功能:

一个示例 Drupal 页面

当有人第一次来到你的网站时,目前的状态,他们可能会看到之前截图中的内容。(正如你可以看到的,我已经启用了一大批新模块,并将一些块设置为在页面右侧显示。此外,你可以看到我输入了一条问候消息作为我的第一条博客条目,Drupal 在主页上尽职尽责地显示了它,而不是初始说明。)此截图中有几个主要区域值得关注,我们应该在这里查看它们,以便了解接下来章节中可以期待的内容:

  1. URL 表示正在访问的页面,并且可以修改以提供搜索引擎友好的格式。

  2. 页面标题包含你的网站标志和标语,以及其他内容。它还提供了一个链接到主页,并且是完全可配置的。

  3. 搜索工具允许用户输入搜索词以在 Drupal 网站上定位内容。

  4. 左侧和右侧边栏包含块,这些块实际上是信息容器,以及导航链接。在这种情况下,几乎所有功能都已启用——这就是为什么页面的两侧有这么多单独的块。请注意,我们现在在右侧也有块,因为我们设置了一些块在右侧边栏中显示。块也可以出现在页面的其他部分,我们稍后也会处理这些。

  5. Drupal 中的所有内容都包含在节点中,如这里所示。这不必是一个博客条目——它可能是一个投票或论坛帖子。当然,显示方式是可定制的,正如我们稍后将会看到的。

  6. 用户可以注册并登录到网站以创建帖子或查看内容。可以分配权限和角色给用户,以便他们执行各种管理任务等。

由于页面过长,此截图没有显示页脚区域。此部分也可以包含块和其他内容,并且像网站的其他部分一样,是完全可定制的。

这就结束了我们对 Drupal 的简要游览。在下一章以及随后的章节中,我们将开始利用 Drupal 核心功能的各个方面(以及寻求一些贡献的帮助)并将其塑造成我们希望创建的网站。同时,我们鼓励你尽可能多地玩转网站,以了解你可以做什么。

摘要

为了提供给你完成所有事情的最有效方法,本章在名为 Apache2Triad 的包中涵盖了 PHP、MySQL 和 Apache 的安装。因此,你现在有了在接下来的几天和几周内建立现场网站的基础。在花费时间设置一个可工作的开发环境后,你可以确信,通过不在现场网站上直接工作,你已经避免了任何不必要的浪费时间,以及可能的不良宣传。

现在你已经在自己的机器上安装了 Apache、PHP 和 MySQL 提供的服务,你可以自由地实验和玩转你的网站,以了解如何操作。当然,安装所需技术的结束并不是故事的终结。我们还学习了如何获取和安装 Drupal 本身——希望你觉得这相当简单!

在此之后,我们注意到,不时地升级 Drupal 是很重要的;因此,我们讨论了如何实施升级以涵盖这一点。毫无疑问,一切都很顺利,但你不能总是保证这一点,所以我们还花时间探索了一些与安装相关的一些更常见的问题,并制定了一个解决问题的流程。

最后,我们通过创建一个管理用户并在网站上发布一些内容,来熟悉了 Drupal 本身。我们花了一些时间通过启用一个或两个模块来对网站进行相当大的修改,以便观察它对实际网站的影响。利用这一点,我们接着讨论了普通 Drupal 页面的主要元素。

如果你已经走到这一步,那么恭喜你,你准备好开始开发你的网站了!是时候动手了……

第三章。基础知识 I:网站配置

当人们刚开始接触时最常陷入的陷阱是,他们假设基础知识很容易掌握,因此不需要太多思考。在现实中事情并不那么简单明了,因为虽然你的网站基本设置通常很容易实施,但更微妙的问题在于知道你想要实现什么,以及你最初想要如何实现它。发现你需要从你的网站中获得什么对于这个原因尤为重要,这也是为什么我们在第一章一开始就讨论了它。

这意味着你只有在确切知道你想要什么的情况下才开始直接在网站上工作吗? 并非如此;就像大多数事情一样,在开始开发 Drupal 网站时,这是一个权衡。这是因为在你使用了一段时间之后,几乎不可能确切地知道你的网站需要什么,以及其功能应该如何提供。通常,你会发现自己根据用户的反馈修改网站的行为。

总之,为了使事情顺利进行,我们需要讨论以下 Drupal 网站配置主题:

  • 通用设置

  • 错误处理

  • 缓存和文件系统设置

  • RSS 源设置

  • 日期设置

  • 网站维护

  • 字符串处理

假设你已经密切关注了你想要你的网站如何运行,以及你如何设想它的使用方式,那么一旦你的基本设置完成,你应该会发现你需要做出的更改数量保持在最低。但记住,Drupal 中的更改相对容易实施。如果你需要根据用户反馈或网站的一般更改回过头来更改东西,请不要担心。

在我们开始之前

在我们动手之前,记下一些重要的事情是有道理的。例如,你应该养成检查在 Drupal 中更改设置如何影响网站的习惯。了解哪个设置做什么以及它如何改变网站的行为,实际上是本章的目标,虽然我们不会对每个小细节都进行详尽的介绍,但你会看到足够的,以对你网站的一般配置有信心。

本章中我们处理的设置实际上只以最广泛的意义影响网站,因为它们修改了其默认行为——比如显示什么错误页面,或者你的网站将使用什么返回电子邮件地址。对于特定关注领域的更复杂或更具体的设置,例如输入格式、访问权限或模块激活,将在接下来的章节中更详细地讨论。

话虽如此,这里的一些主题可能并不适用于你此刻的需求。例如,你可能不太想一开始就处理 RSS 订阅(尽管你可能在稍后想要处理它们)。如果你觉得某些部分对你当前没有直接价值,请随意跳过,因为当你需要时,你总是可以回过头来查看。

此外,有些人可能对不得不逐个设置以获得理想效果的前景感到沮丧。当然,创建一个闪亮的新主题可能会更有趣,但花时间查看并尝试所有可用的设置是成为一名合格 Drupal 管理员的重要步骤。这不仅会教会你如何完成任务,还会让你了解实际上可以完成的事情。相信我,像 Drupal 这样灵活强大的软件,提供的选项多得令人惊讶。

那么我们将精确地查看什么? 如果你以管理员身份登录,并导航到管理,然后设置,你应该会看到如下页面:

开始之前

如你所见,这里有大量的选项可供处理(从页面上呈现的链接数量就可以看出),在本章中,我们将从页面右侧提供的链接开始逐一介绍。在整个书籍过程中,我们将涵盖管理主菜单链接下的每一个项目。

一些读者可能已经意识到,尽管在设置页面中如上图所示 cron 作业确实存在,但它们并未在引言中提及,本章节也没有涵盖。原因是处理 cron 作业或计划任务更多的是一个网站管理任务,而不是专门针对 Drupal 的任务。因此,关于 cron 作业的所有必要信息都包含在第十章的“运行您的网站”部分中。

现在,我们并不总是能够按顺序讨论每个设置,因为通常 Drupal 需要我们在几个不同的地方进行设置,以便实现某些更改。然而,一旦我们走过了整个菜单,并且你对如何工作更加熟悉,这一切都会显得不那么令人畏惧。

常规设置

此页面包含了一系列设置,其中一些相当直观,而其他一些则需要我们仔细思考我们需要做什么。首先,我们看到了几个文本框,它们控制着诸如站点名称、使命宣言等事项。对于演示站点,前六个选项的设置如下:

常规设置

表面上看,我们在这里已经做得差不多了。这些设置并不复杂,我们可以继续进行下一批设置;或者我们应该先检查一下?重要的是要记住,在我们继续之前,总是明智的做法是使用网站来确保所做的任何修改都达到了预期的效果。

保存上述更改后,演示网站现在看起来是这样的:

常规设置

嗯,这并不理想!首先,我们似乎完全丢失了我们的标语,我们在页脚信息部分添加的强有力的诗歌也没有按照我们想要的格式显示。发生了什么事?正如你所见,事情并不总是像看起来那么简单。标语没有显示的原因是某些主题根本不显示标语(或者默认情况下禁用了标语),页脚没有以诗歌格式出现的原因是因为我们没有告诉 Drupal 将其格式化为这种格式。

哎呀,看起来我们已经遇到了一些问题,凭借我们手头的这些信息,这些问题并不能轻易解决。这里的答案是保持耐心,等待我们详细处理了各种其他配置设置和主题之后,这将帮助我们更好地理解如何以更高级的复杂度修改网站的真正展示。

这并不意味着我们没有任何技巧。记住,如果你将 HTML(超文本标记语言)输入到文本框中,Drupal 会对其进行格式化。所以,如果我们不是输入原始的页脚信息文本,而是输入如下内容:

<p align="center"><i>
So tell your children fairy tales,<br />
as the tears fall on the page,<br />
when we killed what made us human,<br />
to embrace an empty age.
</i></p>

页脚信息将在网站上显示如下:

常规设置

这对我们的目的来说更加合适,因为文本既是诗歌,也是一首名为《消失》的诗的引用(因此使用了斜体)。

对于一些人来说,这可能会带来一些问题,因为你对 HTML 不熟悉。如果你在这个阶段对 HTML 知之甚少,那么在你继续之前,自学一点 HTML 可能是有益的——如果是这样,请跳转到第七章中的HTML、PHP 和内容发布部分,了解更多相关信息。

继续前进,我们看到我们还有为匿名用户定义名称的选项。目前这样很好,但如果你有充分的理由想要更改,请随意更改。这唯一会改变的是,将发帖的信用名称从匿名更改为你设置的名称(假设你允许匿名用户在网站上发布任何内容)。在我们进入对这些设置的说明之前,让我们先看看这一节中剩余的设置:

常规设置

如你所见,我们已经将默认主页更改为node/2但改变这个设置会做什么呢? 好吧,让我们假设有一个你希望作为网站默认页面的内容页面——在任何人查看其他内容之前。例如,如果你想显示某种促销信息或介绍页面,你可以通过这个设置告诉 Drupal 显示它。在这种情况下,第二个节点已被指定为默认主页——记住,你必须首先创建这个帖子的内容,然后确定其 ID,然后才能告诉 Drupal 使用它。

可能最好暂时保持原样,直到我们讨论了如何添加内容。如果你急于将内容发布到网站上,只需使用菜单顶部的创建内容链接并遵循那里的说明。你应该能够相当容易地使内容上线。然而,与本节相关的内容的重要之处在于,你需要知道你想要指定为默认主页的节点的 ID。

如果你记住以下几点,这会变得简单:

注意

无论何时编辑内容,正在编辑的节点的 ID 都会出现在 URL 中。

我们还没有完成,因为你可以根据需要指定几个选项。在这种情况下,具有身份编号2的特定节点已被选择,但如果你更喜欢你的网站博客显示,你可以用blog替换node/2(以 node/ID 格式),默认情况下将显示博客列表。

确定你想要显示的前页的确切方式是实际浏览你网站上想要访问的页面。这可能是你博客页面,你的聚合新闻源(本书后面会详细介绍源),或者任何其他页面。一旦你看到了你想要的内容,就注意记录下相对 URL 路径,然后简单地将其输入到提供的文本框中。

相对 URL 路径是页面地址中标准域名之后的部分,该域名由整个网站共享。例如,在这种情况下,设置node/2是有效的,因为 Drupal 将这个相对路径映射到:

http://localhost/drupal/node/2

这个地址的第一部分http://localhost/drupal/基本 URL(回想一下,你在上一章配置 Drupal 时指定了它),之后的一切都是相对 URL 路径。

然而,在继续之前,请确保一切都能正常工作。设置文件路径有时可能很痛苦,因为很容易出错,在这里或那里添加错误的斜杠——如果你像我一样的话。

你也可以通过简单地输入正确的相对 URL 路径以及类别的 ID 号来按类别显示内容——这需要我们在本节有用之前学习如何处理类别,所以它被留作练习。目前,网站的默认页面看起来是这样的:

常规设置

到目前为止一切顺利,但最终的设置意味着什么呢?你们中的许多人可能已经注意到,每次您向 Drupal 发出请求时,您被带到页面的 URL 看起来像这样:

http://localhost/drupal/?q=node/add

这是 Drupal 中 URL 的默认形式,这很不幸,因为显然?q=并不吸引人。更糟糕的是,它可能会干扰搜索引擎对您网站的索引。因此,您可以通过启用清洁 URL选项来从 URL 中删除它。为了使这生效,您必须启用 Apache 的mod_rewrite模块(这可以在您的 Apache 安装中的httpd.conf文件中设置)。如果您已经安装了 Apache2Triad,那么这应该已经完成,但当您将网站部署到您的实时主机时,您必须确保他们也已启用,否则您将不得不禁用清洁 URL

错误处理

本节允许您广泛处理可能出现的错误问题(希望不会太频繁)。特别是,您可能希望创建几个定制的错误页面,以便在出现页面未找到或访问被拒绝问题时显示给您的用户。请记住,已经有一些相当简洁的页面,这些页面是默认提供的,但如果您希望进行任何更改,那么过程与上一节中定义网站默认页面的过程相同。创建将要显示的内容——以下是一个页面未找到错误的示例:

错误处理

现在,我们只需通过点击提交来确定这篇帖子的唯一 ID,然后查看下一页地址栏中显示的 URL——在这种情况下,页面的 ID 是 5。为访问被拒绝错误创建一个类似的页面,并为 Drupal 提供其 ID,就完成了错误页面的处理。所以每当出现问题,用户都会收到一条友好消息,并有机会直接给工作人员发邮件。

请记住,虽然我们将在第六章和第七章中详细讲解添加、删除和操作内容,但您可能会发现,在当前阶段了解您可以通过在内容添加页面上的此下拉列表中选择输入格式来选择输入格式是有用的(如果您需要使用您的帖子进行一些相当高级的操作):

错误处理

如您所见,我选择了默认的过滤 HTML选项,允许我输入一些 HTML 代码,但不能输入 PHP 代码。“他们为什么会有这么多选项?”您可能会问。我们将在稍后详细讨论这样做的原因。现在,除非您有特定的需要添加 PHP 代码或 HTML 标签(否则不允许),否则最好坚持使用过滤 HTML

下一个选项,错误报告,允许你决定是否将错误写入屏幕以及错误日志。当你忙于构建网站时,你可能会发现选择将错误写入日志和屏幕很有用,这样你可以确定出了什么问题以及何时出现问题。然而,一旦到了上线的时间,你应该将其更改为将错误写入日志(在下拉列表中可见),因为你不希望每个人都能够阅读系统的各种错误,因为这可能会向恶意用户泄露信息,他们可能会利用这些信息对你的网站进行攻击。

错误处理部分现在看起来像这样:

错误处理

屏幕截图显示的最后一个选项允许你决定保留登录消息的时间长度。在做出这个选择时,你可能需要边走边摸索,因为这实际上取决于你有多忙,以及网站有多忙。如果有疑问,请将其保留为默认设置,因为这是一个普遍合理的选项。

你需要使用 crontab 来强制执行此设置,如果此时提到 cron 作业使事情变得模糊不清,那么理解以下内容很重要:

备注

Cron 作业(在 Windows 上,这些被称为计划任务)只是根据你设置的运行频率在特定时间运行的命令批处理。crontab 允许你指定各种作业以及它们执行的间隔。

一旦你需要处理控制你 Drupal 网站上所有 cron 相关任务的cron.php脚本,就转到第十章中的cron 和计划任务部分第十章。

一旦你确认已经适当地设置了 cron 作业,你就可以确信你的自动化任务将由 cron 脚本处理。除此之外,让我们来看看这个部分的新设置是如何实际应用的。例如,我尝试访问一个不存在的页面。正如预期的那样,以下友好的信息出现了:

错误处理

需要注意的一个重要点是,你应该记得定期检查日志,作为你确保网站平稳运行的整体策略的一部分。错误信息、警告等实际上是对网站操作的窗口,并且是不可或缺的工具。

为了查看你的日志,只需在管理菜单项下点击日志,你将看到你网站上发生的所有事件的列表。你可以通过在按消息类型筛选标题下的下拉列表中选择一个选项来筛选这些事件,然后点击筛选。如果你想查看任何错误报告的详细信息,只需点击消息列下找到的链接,日志报告的详细信息将像这样显示:

错误处理

这就完成了当前的错误处理。当然,重要的是要认识到这种类型的错误处理并不处理可能存在于你网站实际源代码或文件系统中的错误或缺陷。换句话说,这种类型的错误处理不应与应用程序中的缺陷混淆,它只是用来处理与提供页面相关的网站功能。如果你在系统中遇到缺陷,你需要尝试修复问题,如果失败,你可以寻求 Drupal 社区的帮助。

缓存和文件系统设置

缓存是一个存储位置,其中可以存储网页以便服务器快速访问,而无需每次都从头开始构建。显然,如果网站提供需要每次都进行大量数据检索的页面,这可以显著加快网站的速度。问题是缓存页面提供的是页面的旧版本,而不是最新版本。如果你正在处理偶尔才更改一次的页面,这没问题,但如果用户每次请求页面时都希望看到最新版本,那么你不应该使用缓存。

那么我们什么时候不需要缓存呢? 首先,在你构建网站的过程中,没有必要使用缓存,因为你设置过程中所做的任何更改可能需要等到缓存刷新后才会显示——当你期待更改在页面上体现时,这可能会导致相当多的困惑。因此,你实际上只应该在网站准备上线之前启用页面缓存,以测试其是否正确工作。

缓存设置部分的第二个设置,最小缓存生存期,决定了 Drupal 在缓存中保留页面多长时间。这实际上取决于你内容的特点,你应该能够根据内容更改的速度以及使用频率来决定对你网站最好的设置。如果你将缓存设置为每分钟刷新一次,那么你可以确信你网站上所有内容最多只有一分钟的历史,因为每次调用后页面都会每分钟刷新一次。设置为一天意味着内容可能已经一天没有更新了。缓存保留时间越长,网站的性能越好,但内容就越陈旧。显然,对于注册用户或网站管理员来说,能够查看每个页面的最新版本是很重要的,所以:

注意

只有由匿名用户访问的页面才会被缓存!

你如何处理文件系统设置实际上取决于你打算用你的网站展示哪种类型的内容。建议你立即将下载方法设置为私有,这样你就可以从一开始就正确控制文件下载。如果你知道所有文件都将始终可供任何人下载,那么就保持原样。

假设你确实想要使你的下载方法私密,那么你需要将files目录从文档根目录移出,以便它不能直接通过 Web 访问。如果你这样做,你需要输入该文件夹的完全限定文件路径,而不是相对路径,否则 Drupal 会尝试在正常位置找到它。例如,在演示网站的开发机器上,选择了私有下载方法后,输入了以下文件路径:

C:\apache2triad\files

此外,确保设置的temp目录是合理的,在演示网站上,它是C:\apache2triad\temp

在我们继续之前,我们应该确保我们可以无任何问题地将文件上传到网站上。为了做到这一点,前往管理下的模块部分,启用上传选项(位于模块列表底部),然后点击保存配置。现在当你尝试创建内容时,你会看到一个与实际内容相对应的以下文件附件选项:

缓存和文件系统设置

文件上传完成后,你会看到如下确认信息:

缓存和文件系统设置

在上一幅图中文件附件下方显示的新表格有四列:

  • 删除,它为你提供了从帖子中删除附件的选项

  • 列表,它列出了上传的附件文件

  • 描述,这是文件的名字

  • 大小,这是上传文件的大小

在这种情况下,上传的文件是一个图像,大小为 2.45KB。如果你是为了在页面中显示文件而附加文件,你需要确保它们相对较小。顺便说一下,如果你选择列出你的附件,通过选择列表选项,那么它将像下面这样出现在帖子中:

缓存和文件系统设置

用户可以简单地点击链接来上传文件。显然,如果你是将文件附加到你的帖子中以便在页面内显示,那么你可能想要禁用列表选项。有关文件附件的更多信息,请参阅第七章,它涉及高级内容

RSS 订阅源设置

在未来的某个时候,你可能希望利用网络上可用的众多 RSS 订阅源。当这个时刻到来时,你将需要做出一些选择,关于这些订阅源如何在你的网站上呈现。本节中提供的选项允许你控制每页显示多少个订阅源,以及你是否想只显示标题、标题加摘要,还是显示整个订阅源。这些选项相当直观,目前不会影响任何内容。

当我们在第六章(基本内容)中与内容聚合器一起工作时,我们将更详细地了解 RSS 订阅源(包括讨论它们是什么)。

日期设置

本节中的所有内容都相当直接,涉及网站上的日期和时间值以及格式。请根据您的本地时间选择默认时区——例如,演示网站比 GMT 快两个小时。

在此之后,您可以决定是否允许用户根据他们的位置设置自己的时区。默认情况下,这是设置为启用的,这在大多数用户来自相对较小的地理区域的情况下是相当合理的。例如,如果您在怀俄明州运行一个当地 SPCA 的社区网站,那么该网站不太可能有金沙萨的成员,因此可以禁用可配置时区选项。

在此基础上,有一组与网站显示的日期和时间格式相关的选项,您应该选择与大多数网站预期用户或网站所在地相符的选项。其中没有什么太危险的内容,如果需要,您可以在以后进行修改。

网站维护

Drupal 的开发者应该得到表扬,因为他们通过提供网站维护功能,使你的生活比大多数其他网站管理员的生活更加轻松。不过在我们讨论这个功能之前,我需要明确以下观点:

注意

所有主要开发或对您网站的更改都应该在开发机器上执行,并在实施或移植到实时网站之前进行彻底测试。

然而,有时您可能必须直接对实时网站进行一些更改——即使只是实施已经在开发服务器上测试过的升级。如果这种情况发生,那么与其让用户在维护状态下工作,您可以直接将网站状态切换为离线,然后继续您的工作。

您还可以添加一条简单的消息,解释网站目前离线的原因,这样当用户尝试访问网站时,他们会看到如下内容:

网站维护

如果您确实需要在网站上执行某种重大工作,这个功能将使您的生活变得容易。但在工作时一定要非常小心,因为如果您注销,那么您就将自己锁出了网站。这是因为只有用户 1(即管理员用户)在网站离线时才能进行任何操作。如果您注销并尝试再次登录,您就不再是管理员用户;相反,您是匿名用户。

如果你恰好是网站管理员,这并不很有帮助;所以 Drupal 允许登录页面以正常方式访问。导航到http://localhost/drupal/user,你将能够以管理员身份登录并无障碍地使用网站。非常重要:

注意

确保你在将网站状态设置为离线时不要忘记管理员的密码!

直到网站状态返回到在线,其他人都将被锁定。

字符串处理

目前这里没有其他选项可供考虑,除了了解现有的 Unicode 字符串处理功能。Drupal 使用了PHP mbstring 扩展,这个扩展默认情况下并未启用。只要你确保实时主机已启用此扩展,Drupal 将忠实支持多字节 Unicode 操作,使你的网站能够适应任何你喜欢的语言中的非常规字符。

摘要

本章在设置网站方面已经涵盖了相当多的内容。我们首先查看了一些重要的通用配置设置,这些设置对于使网站的基本功能正常运行至关重要。随着网站的发展,以及你变得更加大胆,许多这些设置将需要重新审视。

然而,你已经学到了一些关于去哪里以及在你需要处理网站整体健康时有什么可用的重要信息。从错误处理到网站维护,你现在应该能够有信心地使用 Drupal。

值得注意的是,在标准的 Drupal 配置中,还有一些相关的技术知识是值得了解的。在这个例子中,花点时间学习一点 HTML 将肯定有助于将你的内容组织得井井有条,并在网站上展示出来。这不仅现在(以及在开发阶段稍后)会有好处,而且当你在一般工作中与网络打交道时,这是一个重要的工具。

当然,如果你愿意,对 PHP 有良好的理解也会有所帮助!花些时间去浏览www.php.net上的 PHP 网站,了解更多关于这门语言的信息。

第四章:基础 II:添加功能

在完成了一般的配置任务之后,我相信你一定非常渴望开始为网站布局和功能工作。但这并不意味着我们马上就要讨论涉及主题的布局类型,因为在考虑字体、颜色和图像等问题之前,还有很多工作要做。虽然我们不会处理像新图像或闪亮的图形那样令人兴奋的事情,但你将发现,本节中我们讨论的很多东西都是关于个人品味的,你可以相当有创意。

那么我们如何构建一个功能齐全的网站呢? 答案是使用被称为模块的独立代码块,这些模块要么是标准 Drupal 下载的一部分,要么是由 Drupal 社区的好心人提供的。模块只是静静地等待,直到你需要它们,这时,Drupal(知道如何使用它们)将调用模块文件(s)提供的所有功能,以满足其所需完成的任务。

在 Drupal 的语境中,术语模块功能是同义的,从模块提供功能的角度来看。你也有可能直接将你自己的功能添加到你的页面上,但这是一个稍微不同的问题,我们将在稍后讨论。现在,关于你网站功能的讨论实际上是对模块的讨论。

因此,在本章中,我们将仔细研究以下内容:

  • 添加模块

  • 第三方模块

  • 配置模块

  • 菜单和主要链接

  • 使用模块

  • 与块一起工作

请注意,我们不会深入讨论一些与内容相关的模块,因为我们在第六章和第七章中将详细讨论内容这一主题。虽然本章的重点是让基本功能投入使用,但我们也会探讨如何将 Drupal 网站中的其他模块包含进来,以展示其强大和灵活的能力。这也会揭示拥有一个完整的开发社区在手以提供帮助的巨大优势。

添加模块

通过启用某些模块,你将能够实现一个多样化、更重要的是,功能丰富的网站。由于有大量的模块可供选择,我无法期望通过详细介绍每一个模块的细节来让你感到厌烦。相反,我们将启用并简要地处理演示网站所需的每个模块,因为这些模块很可能是任何情况下最受欢迎的。

如果你发现你的网站需要某个模块,而这个模块在这里没有涵盖,那么请不要慌张,只需按照本章中你将看到的相同方法来启用和测试模块,并将其应用于特定的模块。你将很快就能投入使用!

在我们开始讨论每个单独的模块之前,前往管理菜单项下的模块部分,根据您网站的预期需求决定您最初想启用哪些模块。请记住,稍后很容易回来添加或删除模块——这是像 Drupal 这样的系统美丽和强大的一个部分。为了演示网站的目的,我们目前需要以下模块(随着我们继续构建网站,我们还需要更多模块):

  • 博客

  • 论坛

  • 地区

  • 投票

  • 搜索

  • 上传

一旦您做出了选择,点击保存配置,然后就可以开始了。不幸的是,事情并没有那么简单,对于至少这些模块中的几个,我们实际上在网站上实施它们之前必须认真思考。特别是,论坛地区需要深入讨论。在我们这样做之前,让我们看看 Drupal 社区为我们提供了什么其他东西。

第三方模块

Drupal 最伟大的事情之一就是它遵循开源范式。这促进了社区发展,反过来又促进了任何给定项目的多样性和增长。由此产生的一个副产品是,克服某些障碍或创造出新颖且有用的事物社区成员可以,并且经常花时间与他人分享。这是大多数,如果不是所有开源项目的一个极其宝贵的特性。

这意味着我们可以悠闲地浏览由他人制作、他人改进或改变成其他事物的各种模块,并挑选出我们最喜欢的内容。当然,反过来,当时机成熟时,你也可以将自己的开发成果供其他人使用。

目前,使用我们即将整合到我们网站中的贡献模块等存在某些问题。重要的是要理解,人们在不强制支付的情况下提供有用的软件。希望您会不时地给开发者发条信息,感谢他们花时间精力为您提供了可能受益的功能。

其次,因为大多数情况下只有一个或一小群开发者,你需要理解没有巨大的预算,有很多计算机专家日夜不停地敲击。这意味着贡献,就像任何软件一样,都可能出现错误或错误,你应该在实施任何更改之前确保你的网站,包括数据库,通过备份得到保护。(有关正确备份网站的更多信息,请参阅第十章) 这与处理软件时的最佳实践是一致的——如果某物破坏了你的代码,那么责任在你,而不是贡献者。

在解决了这两个相当严肃的问题之后,让我们开始吧。

下载模块

Drupal 网站在下载页面的模块标签下提供了一个可供你添加的贡献列表(drupal.org/project/modules)。在模块页面的顶部,你可以选择 Drupal 的版本,然后按名称、分类或日期浏览模块,如这里所示:

下载模块

正如我们在第一章中看到的,获取正确的版本非常重要,因为你不能假设为4.6.x系列开发的模块将与最新的4.7.x系列兼容。事实上,这现在可能比一年后的问题更大,因为 Drupal 刚刚达到4.7.x系列。不幸的是,贡献的升级并不一定与核心开发同时进行;所以可能有些模块只能在 Drupal 的旧版本中实现——希望在你阅读这本书的时候,大多数模块,如果不是所有模块,都将与4.7.x兼容。

为了演示网站的目的,我们很快就需要一个贡献,那就是分类访问控制,你可以在分类部分找到它,假设你是按分类搜索的。前往那里,点击下载,并将压缩文件保存到你的电脑上。你可能发现创建一个目录,比如drupal_downloads,来保存这些文件会更方便。当然,一旦模块安装完毕,你就不再需要 zip 文件了。保留一个副本可能是有用的,但如果你确定不再需要它,一旦一切运行正常,就将其删除。

下载模块就这么简单。在我们继续之前,查看所有可用的模块列表,看看你可以用 Drupal 实现什么功能是个好主意。例如,你知道吗?你可以使用 Drupal 作为一个电子商务网站,包括产品或服务以及购物车。你可以实现所有类型的支付方式,如 PayPal、信用卡以及其他任何完整的在线商店可能需要的或一旦电子商务模块升级到与 4.7 兼容时将能够实现的功能。

现在了解你可以轻松使用 Drupal 模块实现什么,真的可以减少你在开发或寻找问题解决方案上花费的时间。

安装模块

每个模块的下载可能都不同,这取决于它需要如何更改系统才能运行。了解如何安装模块的最佳方式就是直接去做。既然我们已经下载了一个,我们就继续安装它。

打开你保存在机器上的.gz文件(参考上一节)。根据所涉及的模块,你将有一到几十个文件。由于许多文件中可能包含许可信息,确保在使用它们之前花时间阅读这些信息。除此之外,你需要做的第一件事是打开readme文件,因为它很可能包含有关你可以从模块中期待什么以及它是如何工作的详细信息。

假设你满意你找到了适合工作的正确模块,下一个要打开的文件是安装文件,通常像INSTALL.txt这样的东西。这将给你一个列表,你需要遵循这些指示来正确设置。通常情况下,这涉及到对你的数据库进行某种调整,以及将相关的.module文件添加到 Drupal 主目录下的modules文件夹中。

有时候,模块的开发者会添加注释来指导你如何使用贡献。例如,在分类访问控制模块的情况下,我们被建议不要与其他访问相关模块(如OGnode_privacy_by_role)一起使用。这并不意味着你不能这样做——只是你应该确保在违反像这个模块提供的建议这样的建议之前,你确切地知道你在做什么。

另一条可能在未来的某个阶段为你节省很多麻烦的建议是在使用模块之前备份你的数据库或任何重要文件。原因在于 Drupal 正在转向一个更用户友好的、即插即用的设置,你只需将模块文件提取到modules文件夹中,就可以继续操作。模块本身会自动处理对数据库所需进行的任何更改。这使得安装它变得更加容易,因为你不再需要发出如下命令:

$ mysql u<username> p drupal <C:\apache2triad\htdocs\drupal\modules\taxonomy_access\taxonomy_access.mysql>

为了让事情运转起来。当然,并非所有模块都像这样工作,所以使用这里显示的命令来执行安装的任何其他模块所需的任何脚本。请记住,要根据您系统和安装的模块的具体情况更改用户名以及文件路径。

由于一些贡献自动执行自己的数据库修改,现在安装模块变得更容易,但同时也更容易“自食其果”。这是因为这些更改是在幕后进行的,你没有直接控制它们。诚然,这些更改通常是无害的,但你永远不知道。

为了让事情开始运转,我们只需将下载的内容提取到modules文件夹中。一旦完成,现在在modules目录下就有一个名为taxonomy_access的文件夹。

注意

modules文件夹中为每个额外的贡献模块维护单独的文件夹是一个好习惯。这样做可以让你跟踪哪些模块文件已被添加,哪些是核心文件。

背后场景中要做的事情基本上就这些,但我们仍然需要确保我们可以从管理员的角度使用这个模块。

以管理员身份登录您的网站,并转到管理菜单项下的模块部分。向下滚动可用的模块列表,你应该会找到你的新taxonomy_access模块,如下所示:

安装模块

启用模块并点击保存配置。就这样,全部完成!

自然地,我们仍然需要测试这个模块并将其投入使用。然而,它将在下一章中使用,所以我们在这里不再进一步讨论。你应该有信心现在可以选择、下载和安装任何你喜欢的模块。让我们继续,看看如何配置我们之前启用的标准模块。

配置模块

显然,每个模块的设置性质可能与其他模块大相径庭。这是因为模块可以提供几乎任何你可以想象的功能,从简单的投票到搜索引擎,或任何其他东西。相应地,每个模块都与一系列不同的设置相关联。

你还应该记住,由于模块与功能相关的内在广泛性,每个模块的配置和使用也可能有很大差异。这意味着一开始可能会很困惑,不知道去哪里更改设置或简单地使用它们。

我们将从论坛地区设置开始,然后是其他模块,因为这两个模块稍微复杂一些。

论坛

在我们开始查看论坛之前,你应该确保你已经启用了评论分类模块,因为这些是论坛模块正常工作所必需的(这可能会自动完成)。一旦这些都被启用,你就可以转到管理菜单项下的论坛链接,开始使用它。你将看到一个页面,它将立即提出一些有趣的问题:

论坛

"我该如何组织我的论坛(们)?" 可能是你现在正在问的问题。这个答案实际上取决于讨论主题的范围有多广,将有多少人使用论坛,以及讨论的主题性质。你追求的是一个直观、逻辑、易于使用的结构,它将通过允许用户轻松找到信息来促进和鼓励讨论——而不是通过一个糟糕的结构来让他们感到沮丧,这个结构实际上隐藏了主题。

让我们来看看如何组织演示网站的论坛。我们从哪里开始呢? 一个好主意是在开始创建或删除论坛之前先绘制出你的结构,这样你可以看到一切是如何相互关联的,并在开始之前做出修改。例如,根据地理位置划分论坛似乎是有逻辑的,这样美国的人可以直接进入北美论坛,非洲的人可以直接进入非洲论坛。

不幸的是,这有几个缺点,因为你最终会在每个大陆上得到很多重复的主题(因为野生动物问题是全球性的)。更糟糕的是,如果你住在美国,关心南非的猎杀,你将去哪里讨论这个问题,非洲还是北美?看起来,在这个例子中,根据地理位置划分论坛可能不是一个好主意。那么我们使用什么标准来分类我们的论坛内容呢?

最好的方法是按问题来组织。人们想要讨论问题或主题,因此他们自然会寻找基于这些标准的内容。从这个角度来看,添加容器标签的含义变得清晰,因为现在我们可以根据它们共同的问题来组织论坛主题。

例如,野生动物今天关注的重大问题之一就是保护。这反过来又有很多方面,所有这些无疑都会引起演示网站目标受众的兴趣。环境也是一个应该讨论的问题,而且现在每个人都对研究感兴趣。这些都似乎是可以接受的容器,因为它们逻辑上封装了人们使用这个网站将讨论的大部分内容。

沿着这个思路继续前进,每个潜在的容器都有独特的子类别,用户会直观地将其理解为辩论的主题——我们稍后将看到我实际想出的结构。一旦你在纸上记下了良好的结构,就是实际在网站上实施论坛的时候了。让我们先创建容器开始。点击添加容器,将弹出一个页面,允许你指定容器的名称、简短描述、父级和权重。

由于你应该已经决定了结构,所以很容易看出哪个容器或论坛属于哪个父级。顶层容器或论坛显然应该将父级设置为。如果你想以非字母顺序显示它们,可以设置容器或论坛的权重——权重越小,它将越接近顶部。

继续添加容器和论坛,以及有用的描述,直到你完成整个结构。以下截图显示了演示网站最终的样子(毫无疑问,还可以添加或更改更多主题,但这对目前来说已经足够了):

论坛

在这里有几个需要注意的事项。首先,在概念层面上,类别之间的重叠是存在的。例如,全球变暖在逻辑上应该出现在环境影响类别下,那么为什么它有自己的论坛呢? 答案是,你需要考虑哪些问题可能最为重要。由于全球变暖是一个重大问题,它值得提升到自己的论坛。

其次,我只添加了一个父级层级的容器,论坛出现在这个下面。理论上可以在容器内添加容器,等等,但为了便于找到主题,你应该尽可能保持扁平结构,而不是在可能的情况下创建深层导航结构。这是因为人们搜索列表比导航深层层次结构更容易。

最后,有一些配置选项,在完成之前你应该查看一下。大多数默认设置都很合理,但你可能希望点击配置标签,决定诸如你希望将多少帖子视为热门,或者是否按日期或活动顺序排列帖子等问题。完成设置后,点击保存配置,你的论坛就基本可以使用了。

在我们查看如何使用其中一个模块之前,让我们继续设置其他模块。实际上,你应该尝试每个模块,确保它们能让你满意,尽管我们在这里没有足够的空间来做这件事。

地区

启用地区后,你现在可以点击管理下的本地化链接,查看提供的选项。这样做将弹出一个以下页面:

地区

由于有许多欧洲机构和组织处理保护和环境问题,我们希望将意大利语添加到我们的网站上。为了做到这一点,我们只需点击添加语言,从下拉语言列表中选择相关语言,然后点击下方的添加语言按钮。

下一步是将语言实际导入到网站上,以便进行翻译。为了实现这一点,去 Drupal 的翻译页面drupal.org/project/translations找到相关的语言文件。搜索直到找到相关文件,然后下载并解压缩文件到你的文件系统。完成这些后,点击导入标签页,然后从 Drupal 页面浏览到.po文件——你应该会有类似这样的内容(取决于导入的语言):

地区

一旦你确认你已经有了正确的.po语言文件,并且你正在将其导入正确的语言,点击导入。从之前的屏幕截图你可以看出,我们足够合理地将it.po文件(意大利语语言文件)导入到我们网站的意大利语。由于这是一个新的导入,我们不需要担心在模式部分替换任何字符串。如果你正在修改你的语言翻译,那么你可能考虑保留现有的内容,并且只通过选择第二个选项添加新的字符串。

完成后,在弹出的页面上勾选启用复选框,然后点击保存配置。现在你已经在网站上启用了一种新的语言。你可以为用户需要的任何可下载语言重复此过程。

我们接下来应该简要讨论的是如何管理字符串。你可能发现导入的语言翻译并没有像你希望的那样翻译所有内容,在这种情况下,你需要手动进行。点击管理字符串标签页,你将看到一个搜索页面,你可以使用它来定位你想要更改的字符串。同时还有一个选项列表来控制你的搜索。一旦找到你想要的内容,你可以简单地根据需要进行编辑。

请记住,你可以创建一个自定义语言文件,并通过在管理字符串标签页下使用字符串管理工具并手动输入翻译来构建该语言文件的翻译列表——尽管,这项工作相当繁琐。

如果你获得了一套相当完整的翻译,或者对语言文件进行了改进,那么社区普遍会感激你使用导出链接与大家分享你的翻译文件。一旦你通过选择导出语言并点击导出按钮将文件导出为.po格式,你就可以着手将其上传到 Drupal 网站上(在 Drupal 网站的贡献标签页下查看更多信息以获取更多信息)。

评论

由于这个模块默认需要,与论坛模块一起,我们不妨在这里简要讨论一下。正如其名所示,评论允许用户对他们在网站上找到的内容发表评论——就这么简单。如何确定谁可以评论以及评论什么,是用户、角色和权限这一章第五章的主题。

你可以在管理菜单项下找到评论,点击它将显示你网站上所有评论的列表。以下截图显示了在特定帖子中添加了一些评论后的典型评论页面:

评论

从这里你可以看到,我们有一个用于处理评论的综合界面。有几个更新选项可用,这些选项允许我们删除或取消发布评论。如果你永远不想在网站上再次看到某个评论,那么删除选定的评论就是你要采取的方式。如果你只想防止评论显示,而不完全删除,那么取消发布选定的评论是正确的更新选项。

假设你出于某种原因决定取消发布一个评论,你将不得不在审批队列标签页下而不是主页上寻找它。审批队列允许你搜索和编辑因各种原因而出现在这里的帖子——可能是因为你已取消发布,或者可能是因为你决定强制所有评论进入审批队列进行审核。无论评论如何出现在这里,你都会发现有两个更新选项可用,这一次你可以选择删除评论或发布它。

点击配置标签页,你会找到与评论相关的两个重要类别,即查看选项发布设置。浏览可用的选项,并做出任何你想要的更改。例如,在查看选项部分,默认显示模式已更改为“折叠的线程列表”,以便将相关的评论聚集在一起,而不显示每个评论的正文。默认显示顺序也已更改为“按日期最早优先”,以便从页面顶部向下查看评论作为对话。

使用这些设置,页面上的评论现在看起来像这样:

评论

如您所见,较早的评论出现在堆栈的顶部,对这些评论的回复则位于其下方并缩进。当然,这可能不符合您的喜好,这些评论也可能像这样显示:

评论

要弄清楚为了使评论看起来像这样所做的更改可能并不太难(尤其是由于它们在之前的屏幕截图中被显示),所以这被留作您的练习。您决定如何显示评论完全取决于您,并且所做的任何决定都应考虑网站上的评论使用情况。

发布设置部分提供了关于用户如何实际创建评论的一些选项。再次强调,您应该真正考虑您正在工作的网站类型。例如,强制用户预览他们的评论可能看起来很合理,但如果您发现您有一群经常发表评论的常规社区用户,那么每次检查他们的帖子将变得令人厌烦。

假设您打算允许匿名用户发表评论,您必须决定他们是否需要在评论中留下联系方式。从保持您网站评论标准的角度来看,将匿名用户的评论发送到审核队列可能是个好主意,这样您就不会成为垃圾邮件攻击或廉价广告的受害者。这可以通过在管理下的访问控制部分,仅选择评论模块中的发表评论选项来实现,如下所示:

评论

就像任何事物一样,这是一个权衡,因为您通过坚持要求所有匿名用户的评论都经过审核,实际上给自己增加了很多工作。您可能会发现,从长远来看,坚持要求希望成为活跃社区成员的人注册会更好。

内容类型

一些人在此时可能会皱眉,因为评论不是内容类型吗?嗯,是的,它们是,但它们的配置与其他内容略有不同,所以它们被单独分开。我们在上一节中启用的三个内容类型模块具有类似的配置设置,因此在这里一起介绍是有意义的。如果您导航回管理下的设置部分,然后点击内容类型,您将看到所有可用的类型列表,如下所示,这取决于您启用了哪些:

内容类型

点击配置将显示相关的配置页面,由于它们都是相同的,我们这里只详细查看一个。出于兴趣,我们将打开投票配置页面。

此配置页面上的选项分为两个部分:第一部分允许您输入一些解释性文本并选择使内容类型有效的最小单词数;第二部分,工作流程,如下所示:

内容类型

如您所见,评论以及附件已被禁用,因为我们并不真正希望对投票帖子的反馈,而且我们也不介意将文件附加到投票中——它们应该仅仅是直接的问答工具。您需要根据您希望如何利用内容来为每种内容类型做出这样的选择。

您还可以决定某些内容帖子是否应该保持在列表的顶部,以及处理一些稍微复杂一些的选项,如创建新修订版在审核队列中——这些将在第六章基本内容中稍后讨论。目前,您可能最好将这些设置保持原样,并在您拥有所有必要信息后回来修改它们。

搜索

这是一个有趣的配置模块,因为有一些微妙的问题需要考虑,当调整设置时您应该考虑这些因素。首先,用于在数据库中构建搜索的索引过程依赖于 cron(在第十章运行您的网站中讨论)。如果您打算实施搜索功能,您需要确保您的实时站点上 cron 运行正确。有关 cron 作业和与 Drupal 一起提供的cron.php脚本的更多信息,您还可以访问帮助部分下的系统

您可以通过点击搜索页面顶部的重新索引网站按钮手动重新索引您的网站,位于设置菜单项下。这将导致 Drupal 遍历网站的内容并更新其索引,以便任何您特别希望包含在任何搜索中的新内容都将被包括在内。

本节中的大多数其他设置都与系统的性能有关。例如,您选择的每个 cron 运行要索引的项目数量也会影响 cron 作业的速度,如果您遇到超时问题,您可能需要将此设置稍微降低。此外,索引较短的单词会给您的系统增加负载,因为它必须在内容中索引更多的单词。

最后,可以根据三个标准来决定如何权衡站内搜索,即关键词相关性、最近发布评论数量。您需要确定哪个标准更重要,哪个可以安全地降低其重要性。在演示站点的案例中,使用了以下设置:

搜索

这里给出的权重原因是因为我们确实希望搜索结果与搜索词和内容之间存在强烈的关联。实际上,我们是在说,仅仅因为帖子是新的,并不意味着它更有价值,而且仅仅因为某篇内容被广泛评论,并不意味着它更有相关性。根据您的标准,您可能选择完全不同的内容——底线是确保搜索结果尽可能与网站用户的相关性。

上传

假设您将允许将文件上传到网站,那么还有一些设置值得关注。点击管理下的设置中的上传选项,以打开上传的配置页面。在这里,您将能够确定上传图像的最大分辨率,以及是否默认列出文件

根据您使用的 Drupal 版本,您也可能决定允许哪些类型的文件上传到网站。请记住,一些文件可能包含有害或恶意代码,如间谍软件、病毒或特洛伊木马。您可能不希望允许.exe或其他可执行文件被提供,从而冒风险传播它们。此外,您需要考虑有多少磁盘空间可用。您最不希望的是允许人们上传占用大量空间的整个电影文件;因此,确保最大文件大小每个用户的总文件大小保持在合理的限制内。

菜单和主要链接

在我们继续介绍新内容之前,查看网站并确认迄今为止所做的更改是否达到预期效果非常重要。记住:始终以这种方式测试新修改是至关重要的。我们如何测试新模块?最好的方法实际上是在网站上尝试使用它们;因此,导航到主页并查看当前的网站状态。目前我们有一些类似的东西(假设您已登录为管理员):

菜单和主要链接

这当然不是我们希望看到的结果。首先,没有直接的方法可以导航到论坛,甚至查看投票。我们已经启用了这些模块,甚至配置了它们;那么为什么它们没有显示在网站上?答案在于我们还没有编辑我们的菜单或配置主要链接。

您可能已经注意到了屏幕右上角的主要链接链接。点击它以开始操作。以下截图显示了在新页面上拉起的列表的一部分:

菜单和主要链接

上图截图中的高亮部分告诉我们哪些菜单项已被禁用。默认情况下,我们已启用的所有新模块,例如论坛、博客搜索,在菜单项列表中不可用。让我们通过启用论坛(或如果您愿意,所有这些)来纠正这个问题。您将注意到在它们启用之前,您有几个选项需要处理。您可以就这些选项做出一些相当符合常识的决定,以下截图显示了论坛菜单项是如何设置的:

菜单和主要链接

请仔细选择父项,因为您可能并不总是希望菜单项显示在顶级。例如,屏幕右上角(目前)有一个搜索框,因此您可能不希望搜索菜单项与其他主要菜单项并列显示,因为这将是相当冗余的。

路径选项允许您检查此菜单项是否指向正确的内容,允许您点击下面的链接(在本例中,论坛)以查看哪个页面被打开。如果菜单项是手动添加的,并且您不确定项目的目标 URL 是否正确输入,这将非常有用。

完成后,您会发现您已启用的项目现在在左侧菜单中可用。

有可能您需要在某个阶段创建自己的菜单——可能是为了提供一个更集中的可导航区域。在这种情况下,使用菜单页面上的添加菜单标签页输入新菜单的名称,如下所示:

菜单和主要链接

提交此操作后,使用添加菜单项标签页添加新菜单项就变得容易了:

菜单和主要链接

从上图可以看到,我们正在将一个名为聚合的菜单项添加到新闻父项中。我们选择的路径是将菜单项链接到聚合器,这样就会显示网站上可用的所有聚合新闻(假设已设置)。如果您现在还没有启用聚合器,可以将其链接到其他任何内容!一旦完成,您可以在菜单页面的底部查看新的菜单:

菜单和主要链接

如果您希望将此菜单显示在您的网站上某个位置,那么在管理下的主菜单的部分启用它就很简单了。块将在本章后面的与块一起工作部分详细讨论,所以我们不会在这个特定主题上进一步讨论,除了向您展示这个(添加新闻菜单及其左侧边栏的聚合器菜单项的结果):

菜单和主要链接

在处理完这些之后,我们需要看看如何配置主要链接,这些链接默认出现在每个页面的右上角。我们已经点击了这个链接,以便显示我们在本节中使用的菜单部分,但我们还没有查看主要链接可用的配置选项。

直接转到主菜单中设置菜单项下的菜单链接。你会注意到页面分为两部分。第一部分提供了一个下拉列表,用于显示与主要和二级链接相关的菜单选项,如下所示:

菜单和主要链接

如你所见,最新添加到可用菜单中的新闻出现在这个列表中,这应该给你一些关于这个页面如何使用的线索。实际上,我们可以选择我们想在这里显示的任何菜单项。在这种情况下,导航是我们的选择,在保存这些设置后,导航菜单项将显示在每个页面的顶部,如下所示:

菜单和主要链接

现在,回想一下,我们在这个部分的早期已经启用了论坛菜单项,所以它现在与这个菜单项中的所有其他主要链接一起出现。Drupal 并没有就此止步,因为就在第一个下拉列表下面,我们还有一个可以用来显示二级链接的下拉列表。

如下图所示,选择导航

菜单和主要链接

将导致给定菜单项中的所有二级链接显示出来。在这种情况下,管理主要链接与大量二级链接相关联;因此,现在的页眉部分看起来有点拥挤:

菜单和主要链接

能够创建你喜欢的任何菜单,并在任何你想的地方显示它们,是一个非常强大的工具。有无数的不同组合供你尝试。例如,你可能希望创建一个包含你网站上所有不同类型内容的菜单——博客、论坛、故事、投票等等。然后你可以将这个菜单附加到主要链接上,作为用户的一种快速导航工具。非常强大且非常灵活;我相信你会同意的!

使用模块

现在我们有一大堆配置好的模块,正等着被使用。与内容相关的模块应该出现在主菜单中(或者至少是论坛),因为我们已经编辑了主要链接,允许它们显示(或者,你可能已经创建了自己的菜单,以便导航内容)。我们仍然需要快速查看这里的其中一个模块,只是为了证明一切都在正轨上。如何定制 Drupal 的一个更强大的例子,可以通过locale模块非常优雅地展示,让我们来看看它。

假设你是一个注册用户,并且网站配置为允许本地化(通过在管理下的本地化页面中启用多种语言),你可以简单地登录,点击我的账户链接,然后在该页面上选择编辑标签。向下滚动,现在可以找到选择界面语言的选择,如下所示:

使用模块

在选择语言后,例如意大利语,点击页面底部的提交按钮,你会发现,根据翻译的好坏,你的网站或多或少会以你选择的语言呈现。现在,无论何时你注销网站,它都会回到默认语言,在这个例子中是英语,但在登录时,网站会重新渲染为意大利语,如下所示:

使用模块

这是 Drupal 相当令人印象深刻且强大的功能之一,希望无论你是否需要这个特定的模块,你都会对即将到来的许多可能性感到兴奋。

强烈建议你在继续之前,与所有已启用的模块一起工作,并了解幕后发生的事情。你迟早会问自己一个问题我该如何在网站上展示所有我的模块? 这是一个显然相当重要的问题;所以我们现在就处理它…

使用块

正如我们在第二章中简要提到的,块包含在网站各个地方可见的信息或相关数据——这取决于你选择在哪里显示它们。块通常由模块生成,但也可以手动创建。由于许多模块会自动生成块,因此每当启用新模块时,访问部分总是明智的,因为很可能你有一些新的设置可以尝试。

好的,我们知道什么是块,那么我们在本节讨论什么? 嗯,当我们谈论与块一起工作时,我们真正想说的是"我们希望如何向用户展示网站的功能?" 自然,每个人都应该努力打造一个引人注目且独特的网站,布局配置是其中的重要部分——尤其是在它决定了网站界面上功能如何组织的情况下。

请时刻记住,主导你设置网站展示方式的因素都是关于可用性的。确保网站直观易用,并且永远不要为了艺术原因而牺牲清晰度和易用性。

幸运的是,Drupal 默认布局已经相当合理,但这并不意味着没有太多事情要做。你拥有极大的控制权,可以决定一切显示的位置和方式,相应地,也有很多工作要做。

目前,我们只关心功能将在页面上呈现的位置。换句话说,我们正在处理与网站功能直接相关的界面设计部分。例如,主题将与颜色和字体等事物一起工作,甚至背景图像和布局等其他事物(主题的范围实际上非常广泛,但就目前而言,以这种方式看待事物是完全可以的),而无论我们使用什么模板/主题,我们仍然需要启用并添加块到网站的某些部分。

但我们从哪里开始呢? 好吧,了解你想要如何完成事情的最佳方法之一是上网查看其他人如何制作出效果良好的网站。如果你喜欢某样东西,看看它是否可以在你的网站上模仿。

了解你最终如何设置网站的一种方法是实际操作并看看什么有效。本节将专注于这种方法,并将第一种方法留给你去研究。

添加块

管理菜单项下,点击以显示当前网站可用的块列表。请记住,随着你在网站上添加和更改内容,此列表将发生变化——你可能需要多次访问它。查看块页面,你会看到可用的块列表以及每个块的几个选项。Drupal 允许你在页面的任何位置放置这些选项,但你的选择不应如此随意。

努力使网站易于使用。为了做到这一点,将相关信息分组到网站上的同一位置是一个好主意,这样用户就可以感受到他们可能在何处寻找特定类型的内容。为了演示网站的目的,目前做出了以下设置(记住,随着网站的发展,这可能会发生变化):

添加块

有一个关于权重设置的有趣点需要注意。如果你查看之前的截图,你会看到右侧边栏中的块权重为14。如果我想要在这两个块上方添加两个新的块怎么办?幸运的是,权重下拉列表(在下)有负数,这允许你给出小于0的权重,这样你就不必重新调整所有权重来插入一个块。因此,如果你想在上面的右侧边栏中添加两个额外的块,你可以给它们权重为10,而无需更改其他任何内容。

继续往下看,注意在上一张截图的页面底部区域,有关其他用户的信息,如新用户在线用户,都被限制在这个区域。这显然是因为网站的主要关注点不是谁在线,而是与野生动物相关的内容。因此,这些信息被分配到页面底部,这样对周围的人感兴趣的人可以麻烦一下去查看,而不会影响网站的主要内容。将所有这类信息放在页面底部是个不错的想法。

还有什么吗?所有与内容相关的问题都被分组到右侧边栏中。这意味着如果人们想快速查看网站上新增了哪些内容,他们可以通过这里找到。此外,信息结构被组织得如此之好,以至于调查出现在所有其他信息之上(因为我们通常希望鼓励人们花时间回答调查),但我们把搜索表单留在了页面的顶部,因为我们预计这将是内容量增加后最有用的工具。

当然,一些块目前仍然是禁用的,因为网站目前不需要它们。以后随时都可以轻松地添加或删除块。只要你确保各种块有一个良好的逻辑布局,你就可以根据需要随时更改显示的内容。但尽量不要频繁更改,因为这会损害网站的可用性,并且一旦网站上线,可能会使用户感到沮丧。

保存这些更改(通过点击保存块)后,查看你的主页,你会看到各种块已经按照你的要求插入到你的网页中。移动这些内容直到你对页面的外观完全满意是很简单的。

一些用户可能也注意到了,在页面的顶部有一个添加块标签。点击这个标签会弹出一个页面,可以用来将你自己的块插入到网站上,如下所示:

添加块

在这个例子中,我们添加了一小段 PHP 代码,这段代码从文件系统中的drupal文件夹下的(quotes.txt)文件中提取引文,将其拆分成行数组,随机选择一行,然后以特殊字体显示。目前不必担心理解 PHP 代码。这只是为了给你一个将来可能希望向网站添加块的想法。如果你然后查看网站上的新块,你应该会得到类似这样的结果(取决于你添加到quote.txt文件中的引文):

添加块

添加愚蠢的引言当然是一件很有趣的事情,但希望您能欣赏到在您的页面上包含新块是多么容易。当我们开始考虑是否应该允许某些人访问一个块,或者块是否应该显示在所有页面上或仅在某些页面上时,情况变得更加复杂。为了了解如何处理这些问题,我们必须详细查看块配置。

配置块

Drupal 允许我们通过列表中每个块的右侧的“配置”链接来控制块何时显示。这个配置页面被分成三个部分,分别处理:

  • 块特定设置

  • 用户特定可见性设置

  • 页面特定可见性设置

结合这三个部分提供了一种复杂的方法来控制何时显示块以及显示给谁。当然,一些模块可能不需要任何特定的设置;因此,您可能会发现,您通常需要更频繁地做出关于用户和页面的具体决定。

一个配置块的优秀示例可以通过“谁在线”页面来展示。这个页面允许我们决定用户在不再被视为在线之前可以不活跃多久,以及在任何时候显示的最大人数。这很容易处理,实际上取决于网站的需求。接下来的两个选项则给我们带来了一些思考:

配置块

如您所见,上面的设置允许用户编辑他们是否可以看到“谁在线”块的偏好——尽管,它默认是可见的。虽然您可能会发现大多数普通用户并不介意,但经常用户通常会欣赏能够对他们的页面设置有所控制。

在这些设置到位后,编辑账户信息的用户会看到一个复选框,允许他们启用或禁用该块:

配置块

允许用户自己做出选择是一回事,但如果我们不想在某个页面上显示某个块怎么办呢? 好吧,下一节允许我们做到这一点,如果您查看倒数第二个截图,您会看到“除了以下列出的页面外显示”选项已被选中,并且在“页面”文本区域中输入了文本。这意味着无论何时有人访问网站,都不会显示谁在线。只有当他们登录或通过查看内容或添加材料开始使用网站时,这些信息才会变得可用。

更高级的用户可以添加一些代码来决定是否显示该块。这可能的形式是:

if (some_condition_is_true){
return TRUE;
}else{
return FALSE;
}

你可能会发现,你只有在有特定原因显示或不显示信息时才需要回到这一部分。一如既往,建议你尝试在某个页面上显示一个模块,但在其他页面上不显示。例如,你能否只在有人使用论坛时显示一个区块? 答案当然是选择仅显示在列表页面上选项,然后输入forumforum/到文本区域中。确保这是正确的,通过在自己的机器上尝试来实现。

现在你已经知道了如何配置一个区块。这只是一个简单的过程,你需要逐一查看你已启用的每个区块,并做出适当的决定,关于它们何时、何地以及向谁显示。

概述

在完成了一般的配置任务之后,我们着手于添加功能并组织网站上的功能这一至关重要的主题。这是你在开发阶段将要承担的最重要任务之一。选择和实施正确的功能是一项微妙的工作,但希望你已经发现,一旦你决定了在哪里放置什么,Drupal 就会使实施变得相当容易。

此外,我们还体验了拥有一个完整的开发社区来借鉴的感觉,当我们下载并安装了一个贡献模块时。贡献模块是扩展网站功能的无价资源。这个宝贵的设施附带明确的警告,即在实施任何更改之前,你需要通过备份来保护你网站的安全。

当我们谈论如何轻松地自定义网站的菜单和导航时,Drupal 的强大和优雅表现得淋漓尽致。拥有一个强大的工具,结合菜单系统的灵活性,在创建一个设计良好且易于使用的网站时,将提供极大的帮助。希望,在章节的后半部分,你对菜单的创建方式以及它们与模块提供的功能之间的关系有了更清晰的认识。

你可能从本章中学到的一个重要事情是,由于 Drupal 非常灵活和可定制,因此有大量的设置分布在不同的地方。一开始跟踪所有这些可能看起来相当令人畏惧,但随着你在 Drupal 中工作,你会越来越熟悉它们。最终,你将能够轻松地找到自己的方向。

然而,现在请坐下来,快速休息一下,因为你知道你已经完成了任务。在下一章中,我们将开始探讨如何与用户和权限合作——这是作为 Drupal 管理员成功的关键话题之一。

第五章:用户、角色和权限

是时候看看运营 Drupal 网站的一个完全不同的方面了。到目前为止,我们一直专注于添加和组织网站的基本功能。我们还没有考虑过这些功能是如何被访问的,或者由谁访问。随着网站的发展,你很可能会觉得需要将某些责任委托给不同的人。或者,你可能组织一个团队来处理网站的特定方面。无论你的需求是什么,在某个阶段,你将不得不做出关于谁可以做什么的决定,而 Drupal 的好人们已经确保了这一点是可能的。

与上一章类似,Drupal 简化了你的访问控制策略的实施,并不意味着这项任务微不足道。在幕后仍然需要很多思考,以便创建一个复杂且最重要的是有效的策略来控制对网站的访问。因此,我们将花一些时间探讨各种选择的后果,而不仅仅是列出它们。以整体的方法来考虑你的访问控制策略将确保你不会在将来遇到任何令人不快的惊喜。

由于我们已经在 Drupal 上工作了一段时间,我们将开始尝试一些由贡献模块提供的更高级的方法。具体来说,本章将探讨以下主题:

  • 规划访问策略

  • 角色

  • 权限——包括使用分类访问控制模块

  • 用户

  • 访问规则

在我们继续之前,值得指出的是,目前你很可能正在使用管理用户(用户编号 1)来满足所有网站的开发需求。这是完全可以接受的,但一旦你对网站进行了任何重大更改,你应该开始使用只有完成日常任务所需权限的正常管理用户。下一节将强调用户访问背后的总体理念,这将使这一做法的原因变得清晰。

规划访问策略

当你思考你的网站应该如何运作时,你需要专注于自己、其他社区成员或甚至匿名用户需要做什么。换句话说,是否会有一个团队的中介人员来确保网站内容符合良好的品味,避免仇恨言论等材料?是否会有允许创建和维护自己内容的主题专家?匿名访客将被允许参与多少,或者他们是否只能被动浏览而无法贡献?

一些用户可能觉得希望网站的使用能够随着社区的自然增长而发展,因此希望自己的方法非常灵活。然而,鉴于在 Drupal 中更改设置非常容易,你可以认为你的网站和访问政策已经足够灵活。这意味着没有人可以免除制定一个适当的访问控制计划。如果你随着时间的推移需要更改它,那就这么做吧,但至少从开始就会有一套连贯的角色。

那么,我们从哪里开始呢?可以直接应用于我们情况的第一个也是最重要的安全规则是:

注意

授予用户完成预期任务所需的权限,不要更多!

我们的所有方法都将受此规则支配。稍加思考,你应该能够理解为什么这一点如此重要。显然,任何人都不会希望匿名用户能够修改一位受人尊敬的行业专家的个人博客。这意味着每种类型的用户都应该拥有经过仔细控制的权限,以有效地阻止他们超出其角色范围的行为。

这样做的结果是,你会发现创建更多具体的角色比创建一个或两个通用角色,然后让每个人都使用这些万能权限要好。Drupal 让我们能够精细控制用户可以完成的事情,你应该充分利用这一功能。思考以下图示(这并不一定代表你网站上实际的角色——它只是一个例子)可能会有所帮助:

规划访问策略

阴影区域代表网站可用的总权限数量。这个集合中包含了默认存在的各种角色,比如匿名用户角色,或者你创建的以适应网站所需的不同类型用户的角色——在这个例子中,是博客作者用户论坛管理员用户角色。每个角色可以包含任意数量的用户。

从之前的图中可以看出,匿名用户拥有最小的权限集合,因为他们拥有整个图中最小的区域。这个权限集合完全被论坛管理员用户博客作者用户所包含——这意味着论坛管理员和博客作者可以做任何匿名用户能做的事情,还能做更多。

当然,博客作者有一项不同的职责。虽然他们与论坛管理员共享一些共同权限,但他们也有一些自己的权限。作为主要或管理用户,你的权限涵盖了整个集合,因为你不应该有任何无法控制的事情。

由您决定哪些角色最适合网站,但在尝试之前,重要的是要问自己:什么是角色?它们最初是如何被使用的?为了回答这个问题,让我们更详细地看看实际操作的方面。

角色

我们没有从用户讨论开始我们的实际访问控制探讨,这看起来可能有些奇怪。毕竟,这全部关乎用户可以做什么和不能做什么!立即讨论用户的问题在于,单个用户的焦点过于狭窄,通过更广泛地使用角色来控制访问,我们可以学到更多。一旦我们了解了关于角色的一切,实际处理用户就变得微不足道了。

在 Drupal 中,用户角色类似于戏剧中的角色。在戏剧中,演员必须始终忠于自己的角色——换句话说,有明确的行为方式,角色永远不会偏离(无论哪个演员扮演该角色),否则就会打破幻觉。同样,Drupal 允许定义角色,这些角色决定了用户的行为。在 Drupal 中创建角色非常简单!只需点击管理下的访问控制链接,然后选择角色标签,即可打开以下简单的界面:

角色

如您所见,我们默认已经定义了两个角色——匿名用户认证用户。这些角色无法更改,因此操作列永久设置为锁定。一开始,匿名用户(这是指那些未登录就浏览网站的用户)的权限设置非常少,尽管可以赋予他们任何权限,但您很可能希望保持这种状态。

同样,默认情况下,认证用户比匿名用户只有少数更多的权限,也有道理将这些权限保持在最低限度。我们很快就会看到如何决定谁应该拥有哪些权限。

要添加新角色,只需输入角色的名称,然后点击添加角色,任务就完成了!但您想添加什么名称呢?这是一个问题!如果您不确定使用什么名称,那么很可能您还没有清楚地定义该角色想要服务的目的。为了了解如何做到这一点,让我们假设Contechst Wildlife Community需要一个论坛管理员,这个管理员在所有方面都将是普通用户,除了能够直接在保护论坛上工作(从管理员手中分担一些责任)以创建新主题和必要时编辑内容。

因此,为了开始操作,我们输入论坛管理员用户并点击添加角色——实际上,你可能甚至想要更具体一些,在这个例子中使用保存论坛管理员用户,但基本概念是一样的。就这样!我们已经成功添加了角色。现在,当你看到角色页面时,你应该能够查看新角色,页面的右侧显示了编辑选项。你可以点击编辑来更改角色的名称或完全删除它。

我们的工作才刚刚开始,因为现在我们需要授予或拒绝论坛管理员用户角色所需的各项权限,以便成功履行其职责。一开始,新角色根本没有任何权限——如果你这么想的话,这是有道理的,因为我们最不希望的是创建一个角色,结果发现它和行政用户的权限相同。

根据网站的需求,你可能需要添加几个角色。现在,让我们继续前进,看看我们如何通过设置权限来具体化这个新角色。

权限

为了处理权限,点击访问控制页面上的权限选项卡,你应该会看到一个类似于这样的屏幕(注意页面右侧的新论坛管理员用户角色):

权限

如你所见,这个页面列出了所有可用的权限在左侧列,并允许你通过在相关列中勾选或取消勾选复选框来启用或禁用该权限。很容易看出,一个人只需沿着列表选择每个角色所需的权限即可。实际上并不容易确定最初应该启用或禁用哪些权限。

注意,左侧列表中给出的权限与特定模块相关。这意味着,如果我们通过添加或删除模块来更改网站的设置,那么我们也必须更改此页面上的权限。这意味着:

注意

大多数时候,当你添加一个模块时,你需要确保权限设置符合该模块的需求,因为默认情况下不会授予任何权限。

我们从上一张截图所示的权限页面还能学到什么?嗯,每个权限究竟意味着什么? 有很多动词允许执行完全不同的操作。以下列出了一些更常见、更通用的动词,尽管你可能会偶尔发现一两个其他动词来适应特定的模块:

  • 管理:赋予用户影响模块功能的能力。例如,授予本地模块的管理权限意味着用户可以添加或删除语言,管理字符串,甚至导出.po文件。这个权限应该只授予可信赖的用户,绝不应该授予匿名用户。

  • 访问:赋予用户使用一个模块的能力,而不会以任何方式影响它。例如,授予评论模块的访问权限允许用户查看评论,而无法删除、编辑或回复它们。

  • 创建:赋予用户创建某种内容的能力。例如,授予创建故事的权限允许用户这样做,但并不也赋予他们编辑这些故事的能力。

  • 编辑自己的内容:赋予用户使用他们自己创建的内容的能力。例如,授予编辑自己的内容权限给故事模块意味着用户可以随意修改自己的故事。

还有其他特定模块的权限可用,建议你尝试并理解你设置的任何新权限(大多数都很直观)。

现在,由于默认角色赋予的权限相当稀疏,你可能会想在你工作于任何新角色时同时查看那些用户能做什么。很可能,你希望允许匿名用户访问网站的大部分内容,但不允许他们以任何方式修改它。我将这些选择留给你。但我们是怎样设置论坛管理员用户所需的权限呢?

如果我们查看权限页面上显示的权限列表,我们会看到以下与论坛相关的选项(目前,论坛管理员用户的权限在最外一列):

权限

启用这三个选项并测试一下新获得的能力应该会很快证明这并不是我们想要的。

如果你在想如何实际测试这一点,你需要注册一个新用户并将他们分配到论坛管理员用户角色。以下关于用户的部分解释了如何创建新用户并正确管理他们,所以如果你不确定如何操作,快速跳到前面查看,以便你有一个可以工作的新用户。

以下这一点可能会让你的生活变得容易一些:

小贴士

使用两个浏览器来测试你的网站!演示站点的开发机器有 IE 和 Firefox。保留一个浏览器供管理员使用,另一个用于匿名用户或其他用户以测试更改。这将帮助你避免在测试新权限时需要频繁登录和登出。

假设你愿意以某种方式测试新的权限,你会发现论坛管理员可以访问并处理所有论坛,而我们希望将这个特定的用户限制在与保护相关的主题中。我们需要更具体的东西——也许是在其他模块之一

查看剩余的权限,我们可以看到有一个 管理节点 选项——让我们试试。在保存并登出之前,禁用 管理论坛 选项并启用 管理节点 选项供匿名用户使用。你现在应该会发现 论坛管理员用户 可以轻松地通过在主菜单中选择 内容 链接来编辑论坛上的 任何帖子那么问题是什么? 好吧,首先,这个用户现在也可以配置网站上所有不同类型的内容,以及编辑任何类型的内容,包括其他人的博客。这种情况比第一个问题还要糟糕!

哎呀,尽管我们现在对谁做什么有相当大的控制权,但已经有迹象表明,有些事情没有其他地方的协助是难以完成的。为了完成这个任务,我们需要利用我们在上一章下载并安装的 分类访问控制 模块,因为当前问题的解决方案在于迫使 Drupal 定义可以基于其类别访问和操作内容的用户。

使用分类访问控制设置权限

假设你已经启用了这个模块,前往 管理 链接下的 访问控制 部分(你需要再次以管理员身份登录)。你应该会注意到这个页面上有一个新的标签页,标题为 分类权限。这个页面应该包含一个可用角色的列表以及编辑它们分类权限的能力。然而,一开始可能不会工作,因为你需要首先启用该模块。如果是这种情况,以下链接应该会显示:

使用分类访问控制设置权限

他们是老板!前往 设置 下的 taxonomy_access 页面并启用该模块。现在当你查看 访问控制 下的 分类权限 页面时,你会看到一个可供你工作的角色列表。点击列表中的 论坛版主用户 来查看任何和所有类型分类内容的权限(顺便说一句,如果你对内容分类和类别还不确定,不要担心——所有这些内容将在接下来的几章中讨论),如下所示:

使用分类访问控制设置权限

这里有很多东西要考虑!现在在 管理 下的 帮助 中有一个分类访问帮助页面在 taxonomy_access 下,你应该与这个页面一起阅读。让我们快速查看所有这些选项的实际操作。

可用的前三个列选项是查看、更新删除。这些选项相当直观,允许用户分别查看、处理或删除内容。下一个选项创建允许用户将指定的术语固定到帖子中。列表会导致指定的术语在帖子的页面、类别列表中甚至面包屑导航中显示。如果您希望该术语实际上出现在您的页面、页面上或其周围,请确保已启用列表——如果禁用,可能会产生一些意外的结果。

前三个选项有三个设置可供选择:

  • 允许(A):为任何给定类别授予用户相关权限

  • 忽略(I):实际上拒绝用户的相关权限,但可以使用其他允许命令来覆盖

  • 拒绝(D):拒绝用户对任何给定类别的相关权限

列表中的第二个要点引出了一个关于优先级的重要问题:

注意

拒绝指令优先于允许

为什么这很重要? 想想如果在某个阶段,一个帖子被链接到几个类别(这种情况是可能的,我们将在本书后面的章节中遇到这种情况)。如果权限设置得如此,即用户在一个词汇表中的术语上设置了允许指令(词汇表和其他与分类法相关的术语都在第七章的高级内容中详细讨论),但在另一个中设置了拒绝,那么拒绝指令将具有优先权。这就是为什么忽略如此重要的原因,因为它允许您有效地在一个类别中拒绝一个术语的权限,而不会影响其他类别。

注意

只有在您确定某个角色将永远不需要访问该术语时,才使用拒绝

每个词汇表顶部显示的下拉列表允许您做出影响整个列的通用声明。例如,您可能希望允许用户查看词汇表中的所有术语,而不是必须手动更改每个设置。如果是这种情况,只需从下拉列表中选择允许所有即可继续操作。下拉列表下方是默认选项,它会导致该列中任何新的术语自动获得在此处设置的权限——如果您不确定在这里想要什么,请坚持使用忽略

现在,如果您尝试使用默认权限设置的论坛管理员用户访问论坛,您很可能会感到失望:

使用分类法访问控制设置权限

这实际上是可以预料的(尽管我们知道论坛确实存在),因为默认情况下论坛管理员只有忽略指令设置。将您的页面设置为以下样式,并确保您的论坛管理员用户有权创建论坛主题编辑自己的论坛主题(在访问控制页面的权限选项卡上设置):

使用分类访问控制设置权限

点击保存分类权限将捕获这些设置,现在您可以尝试使用新的权限。具体来说,我们需要检查此用户是否可以执行预期的操作。预期的操作是什么?根据设置,我们希望用户只能访问商业捕鱼论坛,该论坛位于保护容器内。用户应该能够在此论坛上发帖,以及编辑此论坛内的任何帖子(即使不是用户自己的帖子)。

从论坛管理员的视角来看论坛页面,我们得到以下结果:

使用分类访问控制设置权限

这太完美了!用户只能按预期访问一个论坛,但真正的测试在于我们是否可以编辑他人的帖子。在这种情况下,我使用我的管理员用户在此论坛上发布了一条笔记,通过论坛管理员用户访问它时,会出现以下页面:

使用分类访问控制设置权限

从这里您可以看到,已启用的列表指令正在正常工作,因为显示出了分类术语商业捕鱼。显然,查看更新指令工作得很好,因为我们可以看到帖子并且可以编辑它。如果您想确认删除指令是否工作,只需点击编辑并检查页面底部是否有删除帖子的选项。

这是一个好消息!在测试了在单个论坛上授予权限的最简单情况后,您现在需要返回并设置所有需要的权限。在这个过程中,您可能会遇到一些其他有趣的问题。我将在下面详细说明其中的一些——最终,您需要练习使用分类和权限,以便能够实现您想要的确切效果。尽管如此,我建议在更详细地介绍分类之前再进行操作。

返回论坛管理员用户的分类权限页面,禁用所有创建指令,并保存您的设置。现在尝试使用论坛管理员用户发布一个新的论坛主题。您应该会看到一个像这样的页面:

使用分类访问控制设置权限

问题是什么? 提交这条消息,然后回到论坛查看。你看到问题了吗? 我们已经禁用了创建,因此我们没有指定这条帖子应关联哪个术语的选项。因此,因为我们只能查看保护容器和商业捕鱼论坛,所以新的内容对我们不可用。*“但我们会最终允许论坛管理员“查看”所有论坛主题”,你可能会反驳。这是真的,这样做确实会使帖子可访问,但这不会帮助论坛管理员实际上发布到他或她负责的论坛中。

这可能已经展示了选择你的设置是一项相当微妙的工作。重新启用创建指令并再次尝试发帖会带来以下额外选项,然后就能解决问题:

使用分类访问控制设置权限

现在这个内容提交后,它会在商业捕鱼论坛中正确显示。我们将保留分类权限在那里,因为我们还没有详细讨论分类,一旦我们讨论了分类的来龙去脉,你将能够更有效地练习。例如,有些人可能会想知道如何将这条笔记发布到论坛管理员职责范围内的所有论坛,而不是一次只发布一个——像这样的任务将在第七章中处理。

一旦你确定可以控制论坛管理员用户,让我们尝试一些稍微不同的事情。点击管理下的访问控制页面中的权限标签页,并确保你的匿名用户已经选择了所有可用的论坛模块权限。保存这些更改并从 Drupal 注销。现在,你已经看到了这些权限的作用;匿名用户很可能会能够管理所有论坛。确实如此,主菜单显示了前往论坛以及管理论坛的链接。点击底部的链接,它会带你到论坛的管理页面。你应该会注意到一些相当奇怪的事情,就像这样:

使用分类访问控制设置权限

嗯,这很奇怪,因为我们知道那里有论坛。让我们尝试主菜单中的另一个论坛链接。这次,跟随那个链接仅仅会弹出一个空白页面。这非常奇怪,我们在论坛上拥有完整的管理权限,但 Drupal 表现得好像它们不存在一样。你能想出为什么吗?

作为管理员,在访问控制部分移除匿名用户论坛模块权限并保存设置。现在,点击分类权限标签页,然后选择匿名用户编辑链接。您将看到与最初为论坛管理员用户看到的相同的未更改的设置页面。现在答案应该很明显。由于匿名用户在这里没有设置任何权限,我们实际上通过说这个用户是论坛管理员,但不允许访问论坛中与分类术语相关的任何内容,向 Drupal 提供了相互冲突的指令。

在我们的情况下,我们希望匿名用户能够查看论坛中的所有内容(尽管,如果您想隐藏任何主题,只需简单地取消选中即可),所以我们从列表下拉菜单中选择全选,并在查看列下拉菜单中选择允许所有并保存设置。以匿名用户身份查看结果。您应该会发现可以像预期的那样查看所有论坛,但您需要登录才能发布任何内容。

这说明了定期彻底测试您网站的需要,以便未预见的变化不会产生灾难性的影响。在讨论权限的某个阶段,您可能已经问过自己:一个用户可以属于多个角色吗? 当然,这个问题紧随其后的就是属于多个角色的用户会收到哪些权限? 为了回答这些非常重要的问题,让我们来看看我们讨论的下一个主题。

用户

您可以通过使用角色来为单个用户账户分配您想要的任何数量或数量的权限。Drupal 用户除非他们已经有一个定义了他们在 Drupal 框架内操作方式的角色的权限,否则实际上什么都不是。因此,我们首先讨论了角色。

用户可以通过两种方式创建。最常见的方式是在网站上注册——如果您还没有,请点击主页上的创建新账户链接,注册您网站上的新用户,以便自己测试一下。请记住提供有效的电子邮件地址,否则您将无法正确登录。这将创建一个经过身份验证的用户,具有分配给经过身份验证的用户角色的所有权限。

第二种方式是使用您的管理用户创建新用户。为了做到这一点,以管理用户身份登录,然后点击管理下的用户。选择添加用户标签页并遵循该页面的说明——您需要向 Drupal 提供用户名、电子邮件地址和密码。一旦您有几个用户可以玩,就是时候开始与他们一起工作了。

管理用户

作为网站管理员,你被赋予了完全访问其他用户账户信息的能力。通过点击在administer下的users页面中每个用户账户右侧显示的编辑链接(位于操作列标题下),你可以对特定用户进行任何所需的更改。

现在,当我们最初在第二章中设置管理用户时,我们已经简要地浏览过这个页面,但现在值得更深入地查看,因为它有一个第一次设置时没有的重要设置。如果你将页面向下滚动一点,你会注意到你现在可以选择指定该用户属于哪些角色。目前演示网站的角色部分看起来如下:

管理用户

在此截图中的复选框下方阅读这些行,你可以看到,每次你将用户添加到另一个角色时,该用户将获得这些角色的合并权限。因此,这就回答了我们在早期关于权限部分提出的问题。但是,这一切的喧嚣究竟是为了什么?通过了解这一点,你应该按照以下方式来委派角色:

  1. 通过设置匿名用户权限来定义网站最基本的使用者。

  2. 为基本认证用户设置权限——很可能是那些已经在您的网站上注册的人。

  3. 通过仅添加该角色所需的具体额外权限来创建特殊角色,不要重新分配认证用户已经拥有的权限。

  4. 通过组合他们职责或需求所需的任何角色来创建新用户。

如果你遵循上述步骤,你将确保始终为每个角色分配正确的权限。这是因为你正在从最基本到最复杂逐步构建用户的权限,而不必每次都分配每个单独的权限。很明显,论坛管理员将拥有匿名用户和认证用户的全部权限,再加上一些额外的权限。所以,如果你回顾章节中的第一个图表,你可以看到在这种情况下,我们会:

  1. 定义匿名用户认证用户的角色权限——认证用户应该拥有匿名用户的全部权限,以及你的基本网站用户所需的其他权限。

  2. 创建仅包含论坛管理员用户博客作者用户所需额外权限的新角色,除了已授予认证用户的权限之外。

  3. 将博客作者分配到博客作者用户角色(他们自动获得授予认证用户的权限),并为论坛管理员及其角色做同样的事情。

除了使用该策略为用户分配角色之外,本节中的信息相当容易直观理解;因此,让我们继续前进。

配置用户

这一节实际上讨论的是网站如何对待用户,而不是讨论用户可以做什么和不可以做什么。然而,你会发现这一节中的一些信息对于网站的外观和感觉非常重要。点击管理链接下的设置,然后点击用户。你将看到一个选项集,从用户注册设置开始,如下所示:

配置用户

根据你对网站功能的设想,你可能需要非常仔细地考虑选择前三个选项中的哪一个。例如,你可能希望允许每个人都能够阅读和发表论坛上的评论,或者做任何事情,而不需要先注册。如果是这样的话,那么可能只需要注册的人是那些将要执行某种管理职责的人,在这种情况下,你可能想要选择第一个选项,或者至少第三个选项。

为了演示网站,第二个选项是可行的,因为我们希望尽可能让更多的人能够参与到社区中来,同时又不允许每个人都发布内容,从而可能引起问题。还增加了一条有用的信息,以解释注册流程给潜在用户。

页面上的下一节讨论了用户电子邮件定制的流程。然而,这里有一个有趣的方面,那就是 Drupal 提供了一些变量,可以在输入的静态文本中使用。让我们看看如何修改一行或几行,以便了解这是如何工作的。

例如,我们将修改欢迎电子邮件的主题文本,从:

%username 在 %site 的账户详情,使其更加活泼:

恭喜 %username,您已在 %date 在 %site 注册!

这里没有太多复杂的事情!以%符号开头的关键词只是其他值的占位符,这些值将根据特定时间如何设置而插入到你的电子邮件中。这让你能够个性化你的通信。在这种情况下,注册为David的用户欢迎电子邮件的主题现在显示如下:

配置用户

如您所见,%username, %site%date占位符已正确更改,以反映该特定设置的变量内容。有几个标准电子邮件的设置可供选择,如密码恢复欢迎(等待管理员批准)。当然,默认值是相当合理且易于更改的。记住,每个文本片段下面都提到了可用的占位符,所以请尝试使用它们,直到你对它们的用法感到舒适。

最后一个部分是关于图片的。现在,如果您希望为用户启用图片支持,则从列表中选择启用,如果您想要一个默认图片,请提供,然后点击保存配置(其他设置相当直观和合理,您可以在任何阶段返回更改它们,如果它们不适合您)。

Drupal 将在您的 Drupal 安装中的files文件夹内创建一个pictures文件夹来存放所有图片。一旦完成所有操作,用户将在他们的编辑标签页的我的账户页面中添加一个新的部分,如下所示:

配置用户

当图片成功上传后,它将出现在我的账户页面,以及用户在该网站的博客和论坛帖子中。

如果图片没有显示,你看到的是一个链接,类似于以下内容:

配置用户

然后,您需要确保在访问控制页面正确设置上传模块的权限,如下所示:

配置用户

记住,由于论坛管理员用户自动接收所有认证用户的权限,因此没有必要为论坛管理员启用查看上传文件的权限,因为这将是多余的,并且会使你的用户目的变得不明确。

允许用户将图片整合到网站中是让人们能够个性化他们贡献的好方法,同时也为每个人提供了与帖子关联的视觉元素。这是培养社区的一个好方法,因为它有助于给不同的用户提供某种身份。

编辑图片很简单!只需在用户编辑页面的图片部分进行修改,如下所示:

配置用户

这基本上就是配置用户的结束。在我们继续之前,还有一些关于安全性的问题需要讨论。

访问规则

到目前为止,Drupal 在确保能够控制网站上谁做什么方面似乎已经做得差不多了。这确实是事实,但还有一些我们尚未讨论的情况,可能会在某个阶段影响网站。例如,如果你发现有一家公司反复在你的论坛上发布广告和营销信息会发生什么? 或者,如果你想只允许特定公司的人访问你的网站会发生什么?

这种性质的问题确实可能成为你心中的刺。访问问题甚至可能导致社区成员流失——除非你有设置访问规则的能力。

有一些技术可以通过在管理主菜单项下的访问控制页面中的访问规则标签页来设置访问规则。要实施任何访问规则,您需要选择添加规则选项,这将打开以下页面:

访问规则

从这里你可以看出,我正在创建一个基于电子邮件地址拒绝访问的规则。在我们继续这条线之前,重要的是要注意,这里既有允许拒绝选项可供选择,并且这些选项将根据在规则类型部分提供的用户名、电子邮件主机地址执行。最后一个选项掩码允许你指定规则将应用的实际用户名或主机名。

在上述情况下,点击添加规则后,电子邮件地址bad_user@contechst.com将创建一个拒绝规则。

继续创建这样的规则,完成后你将看到该规则现在出现在列表标签下。现在已经有了一个拒绝规则,我们如何使用它呢?答案是它已经被使用了。如果有人试图使用规则中提供的电子邮件地址注册,他们将无法访问。目前来看,这可能不是很有帮助,因为你可能无法提前知道要阻止哪些具体的电子邮件地址。

为了应对你不确定具体地址的情况,提供了两个通配符字符,可以作为通用字符串或字符使用。假设你想禁止一个运营小型垃圾邮件业务的人。仅仅阻止他们当前的电子邮件地址并不足够,因为他们可以简单地创建另一个地址并使用它来在 Drupal 上注册。如果你知道这些地址来自一个位置,例如:

<some characters>@irritating_spammer.com

你可以使用%字符来匹配@符号之前出现的任何字符,从而阻止该电子邮件服务器上的任何人注册,如下所示:

%@irritating_spammer.com

如果你有一个 Hotmail 账户或类似的东西,尝试阻止任何以@hotmail.com结尾的地址,然后尝试在该网站上注册账户。你应该会发现 Drupal 会显示以下信息:

访问规则

当你不想在网站上允许使用 Hotmail 地址,除非是那位正在世界各地旅行的亲密朋友,他只能使用 Hotmail 地址时,就会出现一个新的问题。在这种情况下,你也需要设置一个允许规则。如果这个人的电子邮件地址是good_friend@hotmail.com,那么你可以在添加规则页面选择适当的选项来设置允许规则。

你的规则可能看起来像这样:

访问规则

这实际上是在网站上禁止所有 Hotmail 地址。然而,由于允许规则优先于拒绝规则,截图中所显示的单个允许规则中指定的唯一 Hotmail 地址将正常工作。现在,当你的好朋友尝试注册时,一切都会顺利进行。

经过一段时间,你可能会发现现有的规则集可能会变得有些令人困惑,或者,简单地来说,持续不断地尝试注册新名称以确保它们按计划工作变得不可行。在这种情况下,请使用访问规则页面右侧的检查规则标签。这允许输入用户名、电子邮件地址和主机,以检查它们是否有访问权限。只需将这些结果与你的预期进行比较,以确定一切是否按计划进行。

最后需要注意的一点是,如果你使用主机标准拒绝访问,那么这一限制将会在整个网站上实施,而不仅仅是注册页面。对于垃圾邮件发送者的情况,你可能希望一般性地拒绝其访问网站;因此,你会在掩码选项中选择类似以下的内容:主机

%irritating_spammer%

这样就会匹配包含irritating_spammer的任何主机。例如:

www.really_irritating_spammer.com
www.mildly_irritating_spammer.com
www.extremelyirritating_spammer.org
www.unbelievably_irritating_spammer.comms.org.co.sz

等等。请记住检查你添加的所有规则是否对网站的访问策略产生了预期的效果。如果制定了一条规则,阻止了可能对社区有价值的成员访问内容,导致他们去其他地方,那将是一件遗憾的事情。

在结束之前,如果不提及其他一些与用户访问/身份验证相关的模块,我会感到疏忽。Drupal 网站上有很多这样的模块。在http://drupal.org/project/Modules/category/74上查看这些模块可能是有价值的,以防你发现某些特别适合你需求的模块。

特别值得注意的是按角色节点隐私路径访问模块,它们提供了控制内容访问的另一种方法。在看到分类访问模块的工作方式后,你应该有足够的信心去处理这些贡献,前提是你不能完全实现你想要的功能。

概述

本章为你提供了关于控制网站内容访问的基础知识。你看到 Drupal 提供了一系列设施和选项,以确保通过管理员用户保持整体控制,以及通过使用角色将重要任务委托给可信赖的用户,来确保网站的适当维护。

我们探讨了如何规划访问策略。这不仅是一个重要的要求,确保网站顺利运行,而且通过迫使你考虑许多可能情况,有助于巩固网站最终的工作方式。在此之后,我们对 Drupal 中访问控制的基本方面进行了探讨,讨论了角色、权限和用户,并学习了如何根据网站的要求规划和实施访问策略。

关于如何使用基于分类法的访问控制模块的讨论,展示了如何实现对内容访问权限的更细致的控制。然而,你可能也发现,创建一个设计良好且连贯的访问策略需要一些时间。规划,更重要的是,测试,将有助于确保一切按预期工作。

随后,引入了访问规则作为进一步控制谁可以进入网站的方法,并讨论了如何有效地使用通配符字符。至此,我们完成了访问控制,尽管强烈建议你花些时间尝试各种选项,直到你对能够进行更改并了解其效果感到舒适为止。

接下来的两章将深入探讨内容——Drupal 的核心所在!

第六章:基本内容

我们迄今为止处理的所有内容,尽管在创建我们自己的独特网站方面可能很重要,但在 Drupal 的内容和内容管理主题上必须退居次要位置。毕竟,内容就是这一切的核心!随着提供动态内容网站数量的激增,现在提供有意义的、动态的、相关的内容以繁荣发展是绝对必要的。用户对幕后如何操作并不关心,但如果你能让他们浏览体验无烦恼且对他们相关,他们就会继续使用你的网站。

在这个上下文中,“无烦恼”意味着什么? 内容需要易于查找,这反过来意味着它需要很好地组织。它需要很好地展示并且易于互动——换句话说,简单易用。其中大部分已经由 Drupal 处理,而且只需付出很少的努力,我们就可以提供一些非常强大的功能。然而,在我们查看添加更多功能之前,我们确实应该确保我们很好地掌握了如何使用已经到位的工具。

为了这个目的,本章将在探讨 Drupal 的一些有趣和强大的功能之前,提供一个关于内容管理基础的良好基础。具体来说,我们将查看以下内容:

  • 内容类型

  • 与内容工作

  • 与内容相关的模块

一旦我们完成这里的工作,就将是时候看看如何使用 HTML 和 PHP 组合一些整洁的页面,以及至关重要的任务,即弄清楚如何对所有的数据进行分类和分类,以提供一个复杂且直观的内容管理系统。所有这些内容将在下一章中介绍。现在,让我们继续熟悉 Drupal 及其内容。

内容类型

您已经接触到了一些 Drupal 内容类型的结构和用法。这实际上非常有用,因为它意味着我们可以将时间专注于更重要的问题,而不是在 Drupal 的内容和内容管理方面提供一个更广泛的概述。但这并不意味着本节和下一节的所有内容都已经涵盖。

首先,我们需要对 Drupal 中可以创建的内容类型有一个很好的了解,然后我们需要查看这些内容类型可以以各种方式使用的各种方法。了解这一点将帮助您确定实现您网站上的任何功能的最佳方式。

以下表格列出了与 Drupal 默认一起发货的内容类型:

博客条目 博客,或称网络日志,是一种作者特定的内容类型,个人可以将其用作日记或其他用途。在 Drupal 中,每个博客作者可以根据网站的设置和他们的权限,向他们的博客添加附件、HTML 或 PHP 代码。一个很好的博客例子可以在googleblog.blogspot.com/找到,它展示了博客内容格式的有趣应用。
书页 书是由一系列书页类型(实际上现在可以使用任何类型)组成的有序集合,旨在用于协作写作。书页可以由不同的人添加,以组成一本书,然后可以将其结构化为章节和页面,或者采用最合适的任何结构,只要它是层次结构即可。由于几乎任何数据类型都可以添加到书中,因此有大量的空间来创造令人兴奋的内容(想想用 PHP 和 Flash 动画创建的动态书页,以及与之相辅相成的叙述或视觉内容,以创建一个真正独特的基于互联网的书——可能性是无限的!)。一个很好的书页例子是 Drupal 网站上为开发者提供的文档,可以在drupal.org/node/316找到。这些文档是由多位不同的作者随着时间的推移逐步建立起来的。你会注意到,如果你启用了书模块,所有/大多数网站帖子上方都会显示一个额外的轮廓标签。点击此标签允许你将帖子添加到书中——这样,书就可以从网站上发布的内容中构建起来。
评论 评论与其他类型略有不同,因为它们实际上不是节点。换句话说,你不能像创建其他任何内容那样创建评论。相反,你可以将评论附加到其他内容类型上,这些评论作为刺激用户讨论的手段非常受欢迎。你可以通过登录到 Drupal 论坛drupal.org/forum,并在此处发布或查看各种主题上的评论来看到评论的实际应用。
论坛主题 论坛主题是论坛的基本构建块。论坛只能由论坛主题及其评论组成,与书不同,书可以包含几乎任何内容类型。论坛中的信息按层次结构分类,它们在举办讨论以及基于社区的支援和学习方面极为有用。互联网上充满了论坛,你还可以访问 Drupal 论坛来了解它们是如何运作的。
页面 页面类型旨在允许你添加基本、常见的网页,这些网页可以在任何网站上找到。"关于我们"或"使用条款"页面是页面类型的良好候选者,尽管你可以用一些动态内容和 HTML 来美化这些页面。只需查看任何网站即可看到此类页面的例子。
内容类型 描述
--- ---
投票 投票类型提供了提问和提供一系列答案的功能,然后以图表格式展示。许多不同的企业使用投票来收集政治或营销信息,或进行其他研究。投票本质上通常具有有限的生命周期;因此,您将不得不自己寻找例子。许多新闻网站,如《时代》杂志,通过投票来确定公众舆论;因此,这些可能是您看到如何有效使用投票的最佳选择。
故事 故事页面基本上与标准页面类型相同。然而,您可能想通过使用故事类型来区分两者,例如用于短期页面,如新闻或通知。

以下表格查看了一些作为贡献可用的内容类型:

内容类型 描述
Acidfree Acidfree 贡献提供的相册和媒体项类型允许您处理图像和视频内容。该贡献还提供了管理您的媒体文件的功能。
每日 每日贡献提供了两种新的节点类型,称为每日条目和每日容器。这些用于通过日期浏览内容项,甚至控制未来在网站上提供内容项的时间。
Flexinode 此贡献允许用户定义和编辑他们自己的内容类型。
首页 虽然在技术上不是节点/内容类型,但首页确实允许用户创建一个首页,该首页不必符合 Drupal 网站其他部分的常规页面布局。如果您想向您的网站添加一个介绍页面,这将很有用。

每次您为您的网站创建新内容时,都有几个选项可供您做出适当的决定,这些选项显示在帖子正文下方的列表中。根据特定用户的权限,他们也将有一些,尽管希望不是所有,选项可供他们选择。例如,如果为认证用户启用了上传权限,那么他们可以决定是否将文件附加到他们创建的任何内容上。

作为管理员,您的权力更为重大;因此,让我们看看创建标准页面内容类型时默认可用的选项。请注意,不同类型的内容也可能有额外的选项可供选择。例如,如果您创建一个新的投票,您将不得不通过在投票类型的独特设置部分设置投票持续时间来决定投票的持续时间。

下一个部分讨论的内容选项代表了大多数类型。

与内容一起工作

了解在内容方面哪些可用和不可用并不一定意味着您自动知道如何使用内容。因此,本节将更深入地探讨如何编辑和配置内容,以反映网站的需求。我们已经在之前的章节中处理过内容,因此已经熟悉本节的一些部分。然而,这里的目的是提供一个单一的、连贯的参考点,以便学习。

与内容一起工作有几个不同的方面,我们将从探讨在创建新内容时如何设置正确的默认选项开始。在此之后,查看内容管理功能很重要,最后,我们将简要讨论在处理内容时需要注意的一般问题,因为有时与内容一起工作可能会相当复杂。

内容选项

在创建新内容时,我们以如下方式展示输入格式部分(如果输入格式链接被最小化,点击它以显示完整版本):

内容选项

默认情况下,过滤 HTML选项被选中。除非您有充分的理由使用其他选项之一,否则请坚持使用此选项。特别是要小心,不要允许任何用户将 PHP 添加到他们的内容中,因为这可能会使您的网站面临严重风险。记住,即使是过滤 HTML也不是完全安全的,因为用户仍然可以向他们的页面添加指向恶意网址的链接,这相当于在您的网站上拥有它。

以下是一个用户在攻击前如何获取有关您网站信息的示例(假设已启用PHP 代码选项)。在页面正文部分,将以下代码片段添加到您的页面中:

<?
Phpinfo();
?>

确保启用PHP 代码选项,并为页面提供标题后,点击预览。您应该看到如下内容:

内容选项

虽然此截图中的服务器信息可能不够清晰以便阅读,但对于在线查看页面的用户来说,足够清楚以了解有关您服务器的所有信息。在这种情况下,安全总是比后悔好,因此您应该将此类设置的默认选项保留为过滤 HTML。所有这些都再次重申了我们之前讨论的一个观点,当时我们讨论了用户和权限:

注意

确保您只给信任的用户提供足够的权限来履行他们的角色——不要更多!

在继续之前,我应该提到,在下一章中,我们将讨论如何创建自定义输入格式,因为默认选项可能并不总是适合网站的需求。

接下来,作者信息只有两个选项。第一个指出了内容的作者,第二个给出了内容首次创建的日期。当然,修改内容不会改变作者日期。如果你正在修改一个已经创建的页面,那么你会遇到一个日志选项(这可能在内容首次创建时也可用)。

例如,一个典型的日志消息可能如下所示:

内容选项

如果你在想为什么我没有费心给这个日志消息添加日期,那是因为 Drupal 在自动查看内容的修订版本时会明确指出这一点。在我们讨论修订版本之前,再来看看日志消息对其内容的影响。

这个日志功能相当简单,但对于大多数人来说应该足够了。未来可能会为 Drupal 引入一个更复杂、更先进的日志系统,所以请留意这方面的信息。

发布选项可能很难设置正确,这取决于设置的具体情况。目前它们看起来是这样的:

内容选项

正如你在下一节管理内容中将会看到的,你可以决定来自某些用户的某些类型的内容在可以允许其被公众消费之前是否需要经过审核。如果是这样,你或指定的用户将有权通过审核队列来确认所有内容是否符合网站的要求。

在前面的屏幕截图中,正在添加的内容是直接发布的,无需审核。启用第二个选项在审核队列中将强制内容在发布前得到批准。第三个选项已被选中,这将导致创建的内容在首次发布时出现在网站首页上(除非你已经在这里设置了特定的节点显示)。

默认情况下,你可能不希望,例如,新书页面出现在首页上,而优先于行业专家的博客;因此,只为那些应该吸引一些注意力的内容类型启用此选项。

第四个选项在列表顶部固定会使节点无论列表中有多少其他帖子都保持在列表顶部。这对于在论坛上发布重要消息非常有用。例如,如果某个论坛上对如何做某事存在一些混淆,写一个说明如何操作的笔记,并选择此选项将其固定在论坛顶部。这样,你可以确保当人们访问该论坛时,这是他们看到的第一件事。

最后一个选项,创建新修订版,当内容正在更新或修订时,会导致 Drupal 创建内容的新版本。这意味着你不仅保留了旧版本的内容,还创建了一个新版本。如果你想要跟踪对文档所做的更改,这很有用。如果已创建并跟踪了新修订版,那么下次你查看内容时(假设你有足够的权限),你会在页面上注意到一个新的修订版标签,如下所示:

内容选项

使用这个修订版页面,现在可以轻松地处理你的内容。例如,你可以通过点击还原来决定哪个修订版应该是活动的(显示给其他人),或者你可以删除所有修订版。注意,添加到内容类型中的日志消息也会在每个修订版的底部显示。从这一点可以看出,它们对于维护经常修改的内容的良好版本控制实际上非常重要。在这种情况下,修订版的书页内容日志消息提到了标题的变化。

继续前进,下一个部分,评论设置,简单地允许你确定其他用户是否能够对内容添加评论,如下所示:

内容选项

第一个选项,禁用,如果你发布的内容不适合评论,这很有用——也许,像我一样,你不喜欢对你的诗歌提出批评,或者类似的事情。第二个选项只允许具有管理权限的用户对内容发表评论,尽管其他用户可以查看评论,最后一个选项允许所有具有足够权限的用户对你的精彩诗歌(或任何其他内容)发表评论。

以下一组选项涉及将内容添加到菜单中。下一个截图显示了如何将典型的关于我们页面添加到导航菜单中:

内容选项

在这种情况下,我们给这个页面分配了相当大的权重,因为我们只想在内容帖子之后显示它,这样就不会分散网站的主要焦点。如果你现在查看主菜单并将光标悬停在新的关于我们链接上,你会看到以下内容:

内容选项

如果你希望再次删除或编辑此菜单项,只需查看相同的菜单设置部分,那里将有一个新的复选框,可以自动删除它。

最后一个选项涉及文件上传的使用;它易于操作,我们已经在实际操作中看到了它的效果,因此我们在这里不再进一步讨论。这基本上就涵盖了默认内容选项——然而,还有很多东西要学习,所以在我们进入内容管理世界时,请保持你的思考帽。

管理内容

在第四章中,我们看到了在设置部分,在管理下,可以为内容类型设置默认选项。回到那里,禁用所有发布选项,除了待调节队列对于页面内容类型(或任何可以使用认证用户创建的类型)之外,并保存更改。从管理员账户注销并使用标准账户登录,然后创建一个新页面。

假设认证用户在节点上没有启用管理权限,他将没有修改发布选项的权力,而只需点击提交来发送他们的页面进行调节。现在查看网站上所有可用的内容;刚刚提交的页面还没有出现,因为它还没有被发布。为了了解发生了什么,我们需要访问管理下的内容页面,它显示了网站上所有内容的列表,以及一系列选项,以便与之交互,如下所示:

管理内容

注意,在这个屏幕截图中,前两个提交是由用户David发布的(而在演示网站上,管理员是David Mercer)。这两个页面节点都还没有被发布,因为默认设置要求它们首先进行调节。注意,这个词被附加到最新提交上,以区分我们之前已经看到的帖子——当你有大量节点要处理时,这很有用。

现在,页面顶部上方更新选项处显示的内容筛选器是你在管理车间中非常重要的工具。它允许你只显示满足某些要求的节点。提供了三个筛选标准:状态、类型分类。这些允许你筛选整个列表,只显示那些符合所选方法右侧下拉列表中设置的特定要求的项。

如果我们想要定位一个已经发布的节点,我们会检查状态标准,然后从下拉列表中选择已发布选项(如前一个屏幕截图所示),然后点击筛选。此时,显示的列表将被筛选,并且只有相关的结果会显示在页面上。这很容易做到!

这一切都很好,但是调节队列在哪里呢?嗯,如果你查看与状态标准一起提供的下拉列表,你会注意到有一个待调节选项。选择这个选项并点击筛选,将显示以下结果:

管理内容

这些页面还没有发布,因为发布选项已被禁用,并且所有这些都设置为待调节队列

注意

注意,你可以多次使用过滤器来细化你的结果!

现在管理员可以编辑节点,一旦一切顺利,节点就可以发布。这样做很简单!假设我们想要允许管理我页面发布,因为经过一些编辑后,我们对它感到满意。只需选择标题左侧的框,然后,在列表上方的更新选项部分,选择相关的选项,如下所示:

管理内容

点击更新将确保页面现在按预期发布。你可以通过注销并以匿名用户或根据你的权限作为认证用户查看页面来确认这一点。

值得注意的是,在更新帖子方面有相当多的选项可供选择。你可以将帖子提升到首页,或者如果你选择的话,可以将其降级。你可以使帖子固定(换句话说,它将固定在其列表的前面),如下所示:

管理内容

更新选项下的使选定的帖子固定新主题论坛帖子启用时,你可以看到左侧有一个固定图标,而最新的帖子(不是固定的)出现在其下方。你还可以取消发布和删除帖子,这两者都阻止权限不足的用户在网站上查看帖子。区别在于,删除选定的帖子选项将帖子从系统中完全删除,而未发布的帖子可以在以后重新发布——这对于只需将帖子下线,而无需删除它的情况很有用,例如你需要纠正或修改它。

最后,如果无法轻松找到内容,内容页面的搜索标签下提供了一个搜索工具,允许你通过关键词搜索。请记住,你可以使用*通配符来匹配任何字符,以扩大你的搜索范围。本页上的高级搜索链接还为你提供了其他几个选项来指定搜索条件。

注意

新内容将在你的 cron 运行完成之前不可搜索!cron 和计划任务在第十章中详细讨论。

最后,强烈建议你尝试使用搜索选项,以便熟悉每个选项的功能。

与内容相关的模块

除了讨论与内容相关的模块外,本节还将帮助你更好地了解可以与之一起工作的内容,以及使用默认和贡献模块可以完成的事情。

我们已经知道如何安装模块,所以不会展示如何安装我们讨论的每个贡献。如果有任何值得注意的偏离常规安装方法的情况,它们将在这里提及——否则,请安装并启用每个模块,同时记得在安装过程中检查是否需要设置任何特殊权限。

第九章涉及更高级的主题,在那里我们讨论了Flexinode模块,它构成了与内容直接相关的最后一点信息;所以记得在合上内容这本书之前也要查看那里。

聚合器

网络社区中最大的机会之一是分享信息的能力。你真正需要的是一套关于如何呈现这些信息的指南,一旦你有了这些,剩下的就很容易了。事实上,现在你只需点击几下,就可以从许多知名来源在你的网站上包含新闻和文章。

使包含他人的新闻、文档、文章或其他内容变得如此容易的标准被称为丰富网站摘要(RSS)。这允许聚合器(消费 RSS 源的程序)了解如何根据 RSS 源的结构在网页上呈现内容。Drupal 内置了一个这样的聚合器——只需在管理下的模块部分启用它,你将发现会弹出一些额外的菜单项,允许你在内容添加后进行管理和查看。

假设演示网站想要提供一些来自国家地理网站有关野生动物的新闻。我们访问新闻网站news.nationalgeographic.com/,寻找网站上的 RSS 源图标所在位置。在这种情况下,它们看起来如下所示:

聚合器

点击这里的RSS链接将显示以下页面——幸运的是,Drupal 为我们处理了所有脏活,我们甚至不需要理解 XML 就能消费这个源:

聚合器

目前这可能对你来说意义不大,但它有助于确认在 URL 提供的地址上有一个可用的源。了解这一点后,我们现在可以前往我们的网站,在管理下查找聚合器链接,以便开始将此源添加到网站。这将显示一个尚未填写的源列表以及我们需要的所有其他内容。在此页面上,点击添加分类标签将显示以下表单:

聚合器

假设您打算使用多种源,那么从一开始就对内容进行分类可能是明智的。请记住,提供及时有趣的新闻是您网站的一项增值服务,并鼓励用户不断返回。考虑到这一点,拥有多种相关源可能非常有价值。

完成后,点击提交,然后点击添加源标签以显示以下内容:

聚合器

如您所见,我们:

  1. 为新源指定了标题

  2. 向 Drupal 提供了 RSS 源的位置(请与我们在实际国家地理网站上稍早前访问的 RSS 源页面 URL 进行核对)

  3. 设置更新间隔为一天,使其成为每日新闻源

  4. 将此源与新建的商业类别关联

在填写此表单时,有一些事情需要考虑。首先,您需要确保您没有侵犯源创建者提供的任何许可问题。如果对源的使用有明确的限制,请确保您遵守这些限制。

接下来,如果您每天只运行一次 cron 脚本,就没有必要设置一小时更新间隔——在这种情况下,cron 最多每天只能更新一次脚本。同样,如果源本身每周更新一次,就没有必要使用 cron 每十分钟更新您的源——请咨询源提供者他们建议您多久更新一次源。

考虑到这些因素,您现在可以点击提交按钮将源添加到您的网站。现在聚合器主页上有一些信息告诉我们,看起来可能像这样:

聚合器

目前该源中尚无项目,因为cron.php脚本尚未运行。您可以等待它通过您的计划任务或 crontab 访问,或者如果您不想等待,可以直接在浏览器中导航到http://localhost/drupal/cron.php(如果您的cron.php脚本路径不同,请确保将此 URL 更改为适合您网站的地址)。请记住,cron.php只是一个脚本,没有 HTML;因此,即使它运行正确,您也不会在这个页面上看到任何内容。

完成这些操作后,点击聚合器页面上的刷新按钮以查看结果。假设一切正常,您应该会看到如下内容:

聚合器

成功!从这您可以看出现有的源在最近一次更新后包含了9 个项目,更新发生在6 秒前。此外,您还可以编辑源,从源中移除项目,或通过点击更新项目手动更新源——在这种情况下,源可以修改以反映源网站上的任何更改。这就全部了!

现在,你当然可以在网站上查看源的内容。对于演示站点,已授予匿名用户和认证用户访问源权限。因此,当有人访问网站并点击主菜单中的新闻聚合器链接时,他们会看到如下内容:

聚合器

现在所有用户都可以即时访问由国家地理提供的所有内容。没有任何东西阻止你从任何数量的其他源收集信息,而且有趣的是,只要你没有侵犯任何许可证,你可以让你的源对其他网站可用。这样做很简单(记得在尝试使用之前启用聚合块)!滚动到页面底部,直到你看到一个类似这样的小图标:

聚合器

点击它将显示以下 URL 提供的源页面(在演示站点的情况下):http://localhost/drupal/aggregator/rss,这样就可以进行内容聚合。你不仅限于聚合你获取的在线源——任何内容都可以进行聚合。

值得注意的是,你可以通过点击新闻聚合器下的链接在导航栏中揭示你的源。在这种情况下,我们看到了以下内容;请注意,我已经添加了来自世界自然基金会(World Wide Fund for Nature,以前称为世界野生动物基金会)的源:

聚合器

这为我们提供了每个源的精彩摘要。到目前为止一切顺利,但“更多”链接的作用是什么?点击 WWF 源的更多链接将显示以下页面:

聚合器

从这里,你可以点击源名称以访问源网站,在本例中是www.panda.org。与该源相关的源列在标题框下面的页面上,以便通过源轻松访问源。点击框右上角的橙色聚合图标将浏览器带到实际的源页面。在这种情况下是www.panda.org/rss/news.cfm?Press%20Office

此外,页面上还有两个标签页。分类标签页打开以下截图,允许我们将单个源项放入各种类别(假设你有多种类别可用)。

这张截图显示了第二个源项被分配了两个类别,即商业特别。在这种情况下,特别类别是根据特定目的创建的。因为时不时会有一些让人感到温暖的消息,所以所有被标记在特别类别的项都应该在网站上的特殊块中显示,以便每个用户在查看网站上的任何页面时都能看到好消息。

聚合器

来源页面上的最后一个标签页只是调用了创建订阅时使用的相同页面。从这里你可以轻松地对订阅进行任何所需的更改。

由于我们尚未涉及分类和分类法,你可能希望在阅读了第七章之后返回本节,因为现在可能有一些事情还不清楚。例如,我们将在本章后面添加一个模块来根据内容类别显示内容,这就是为什么我们可以以以下方式处理特殊类别的原因。这里提供的信息只是为了让你了解你将能够做什么——希望现在不会太令人困惑。

请记住,你完全可能希望在网站的某个地方显示一些最新的订阅,请转到管理链接下的类别,启用其中一个新块以显示其最新项目——请注意,您也可以在类别中显示最新的订阅:

聚合器

完成此操作后,您将在网页上看到新的订阅,以及其项目选择。您可以在其配置页面上的块特定设置中配置显示的新闻条目数量(点击配置以打开此页面)——就我们的目的而言,默认的五条订阅选项就足够了。

现在,假设用户有博客权限,并且订阅许可允许您的网站这样做,您可以通过点击每个项目旁边出现的这个小b图标来将订阅项目添加到博客中,如图所示:

聚合器

将新闻条目添加到您的博客中可以使文章更具持久性,因为它不会在清除订阅项目列表时丢失。当然,如果您打算随着时间的推移积累大量内容,那么您很可能需要使用存档模块。

聚合器还有一个重要的部分需要查看——配置!如果您在主菜单下的设置链接下点击聚合器,将显示以下页面:

聚合器

此界面提供了对要由您的网站消费的订阅中允许的 HTML 类型的控制。这应该足以应对您想要聚合的大多数甚至所有订阅,但在极少数情况下,如果某些订阅存在问题,它们可能正在使用本节中未指定的标签。如有疑问,请保持原样!

接下来,展示了每个源通常要显示的项目数量以及保留旧源项目的时间长度,在这里做出合理的选择很容易。最后一部分规定了是否应该使用复选框或多个选择器作为分类选择界面(在来源页面的分类选项卡上)。我们已经在使用复选框,对于演示网站来说,它们是合适的。然而,如果启用了多个选择器,分类选择将看起来像这样:

聚合器

在我们继续之前,再次提一下,如果你在某个阶段感到有分享你网站内容的冲动,你可以启用聚合块来强制 Drupal 显示橙色聚合图标。此外,如果你想增强网站聚合的控制,你可以查看提供的drupal.org/project/syndication 上的聚合模块。

归档

归档模块简单直接!在管理下的模块部分启用它。然后,转到部分,启用名为按日历浏览归档的选项,将其放置在最适合的位置,然后就可以使用了。在演示网站的情况下,预计每天都会添加大量内容,因此归档日历将是一个按时间顺序查找内容的绝佳方式。因此,按日历浏览归档块被赋予了低评分,以确保它始终出现在右侧侧边栏的顶部。一旦提交更改,用户可以通过在日历中搜索发布日期来导航到某个项目:

归档

这并没有什么复杂的;然而,值得注意的是,点击日期或更改日历上显示的月份将立即在内容部分弹出一个表单,允许用户使用如下下拉列表进行搜索:

归档

这是对 Drupal 优秀设计的证明,如此强大的功能可以如此容易地实现。如果这还不能让你印象深刻,那么其他事情可能也不会了!

相似条目

我不知道你们的情况如何,但我在阅读新闻故事时,经常发现我会跟随相似/相关故事的链接,以便尝试了解更多关于某个新闻片段的信息,或者简单地获得我对所看内容的更全面视角。能够显示相关项目的能力是非常有用的功能,而且它应该不会让人感到惊讶,因为在 Drupal 中通过安装相似条目模块来实现这一点非常简单。

从 Drupal 网站下载该模块并将其解压到您的modules文件夹中。完成此操作后,您需要在管理菜单项下的模块部分启用该模块——搜索名为similar的新模块。在这种情况下,仔细阅读readme文件很重要,因为它可能会根据您的系统设置影响您安装此模块的方式。

下一个任务是决定您想在网站上显示多少相关条目,以及其他事项。为了做到这一点,请转到管理下的区块部分,点击Similar entries区块旁边的配置,设置数量,然后启用区块并设置其位置权重。演示网站使用了默认设置:

相似条目

如果某些内容类型不可用于选择,那么这很可能是由于网站上还没有该特定类型的内容。一旦您创建了某种类型的内容,它就会出现在要显示的节点类型下拉列表中。此外,假设分类模块已启用(它应该已启用),有三种与相似条目模块如何查找相关内容相关的选项。在这种情况下,默认选项是合适的,因为我们不关心类别过滤。然而,如果我想只显示来自保护论坛容器的相关内容,那么需要做出以下设置:

相似条目

本页上剩余的设置对每个区块都是标准的,我们之前已经看到如何使用这些设置。配置完成后,只需启用区块并将其放置在您想要的位置。现在当用户查看网站上的任何内容时,该模块会通过搜索具有相似性的其他帖子来展示相关内容。例如,在查看以下帖子时,请注意现在在右侧边栏中出现了一个新的区块:

相似条目

如您所见,展示的五项相关条目中有三项标题包含狩猎,因此我们预计它们会出现在这个列表中。那么其他两项呢?如果您仔细观察,帖子的内容提到了捕捉和陷阱,这与两项未明确提及狩猎的条目标题相关。

因此,我们可以看到,为了展示相似帖子或条目的列表,相似条目模块会搜索网站上发布的所有标题,并列出其中任何标题具有相似性的条目。不仅如此,它还会搜索帖子的正文内容以寻找相似性,并展示这些内容(假设区块中有足够的空间)。这对于进行研究和类似新闻网站来说显然非常有用。

分类区块

我们接下来要讨论的最后一个模块与分类模块相关。不幸的是,这依赖于你的网站上已经启用了分类的事实。因此,你可能想要在阅读完紧接着这一章的“高级内容”章节之前跳过这一部分。

与之前讨论的模块类似,此模块也会根据用户所查看的内容向用户展示类似的主题。然而,在这种情况下,分类块会根据它们的类别显示最近发布的项目的列表。现在,你应该仔细考虑你是否更喜欢这个模块还是之前的那个模块来为读者提供相关主题。在页面上同时显示这两个模块将产生一些冗余,因为显然块的内容会有一些重叠。

注意

功能必须反映并满足网站的要求。其他任何东西都是冗余的!

换句话说,不要在你的网页上添加不必要的信息或功能;这会损害网站的可用性,因此,间接地,也会影响其受欢迎程度。

模块的安装相当简单——只需将下载内容的文件提取到modules文件夹中。你需要对你的数据库执行一个.mysql脚本,所以再次确保在做出此类更改之前你有最近的备份。你可以在命令行中执行以下命令来运行脚本(请记住使用你系统的正确用户名和数据库名称):

$ mysql u<username> -p drupal < C:\apache2triad\htdocs\drupal\modules\taxonomy_block\taxonomy_block.mysql

如果taxonomy_block.mysql脚本不在你的机器的这个位置,请将文件路径更改为适合你系统的路径。假设命令执行没有问题,你现在可以前往模块部分启用网站的新增功能——在列表中查找taxonomy_block。一旦模块启用,你需要决定它应该在网站上展示的位置,使用管理下的页面。

与其他模块不同,分类块不会自动出现在可启用块的列表中——相反,你将在菜单项下主菜单中找到指向它的链接。此链接将打开一个块创建页面,你可以根据你希望将此块与哪个类别关联来指定你想要显示的信息类型,如下所示:

分类块

在这种情况下,我们选择展示一个包含与有争议的圈养狮子狩猎问题相关的信息的块。块描述选项允许你输入块名称,该名称将出现在父页面上的块列表中。预告长度设置你希望显示的每个帖子中的字符数。在这种情况下,我决定为每个帖子显示50个字符,但将显示的相关主题数量限制为3,以避免这个块占用太多空间。最后,正如预期的那样,这个块与狩猎 - 圈养类别相关联。

点击创建块保存这些更改,现在我们可以前往页面,以便启用块并在网站上显示它。在禁用块列表中搜索你在上一页输入的块描述。一旦找到,就做出关于它应该在哪里显示以及它应该具有什么权重的选择,然后点击保存块。现在你的网站上已经运行了基于分类法的相关内容。在演示网站的情况下,类似的条目块被禁用,并启用了这个块来替代它。

现在当用户查看与圈养狩猎相关的内容时,他们会看到如下内容:

分类块

当然,根据你创建块的方式,你可能会得到截然不同的结果。你可能发现你根本不想包含任何预告,在这种情况下,你最终只会看到每篇帖子的标题。无论你的选择如何,你现在都有一些相当强大的功能可供使用。只需记住不要过于沉迷,仅仅因为它们工作得很好就添加块。

摘要

在与 CMS 系统(如 Drupal)一起工作时,如何高效快速地处理内容是一个非常受欢迎的特质。为此,本章为你奠定了工作基础,通过概述基本原理以及展示其他可用的内容。首先,我们简要地查看可以使用 Drupal 实现的各种内容类型,然后讨论如何使用管理工具处理这些内容。

在运营一个网站时,你将承担的一项最重要的工作就是管理网站的内容。目前这看起来可能相当直接,但随着网站规模的扩大,这项工作会变得稍微困难一些。确保你花时间熟悉管理菜单中与内容相关的管理区域,这将确保当你的网站被更广泛地使用,或者当你开始尝试更复杂的内容相关任务时,你能保持对事物的掌控。

本章的后半部分演示了一些与 Drupal 一起提供的强大功能或由贡献者提供的功能。我们看到了相对容易地聚合 RSS 源,并相应地分发内容,使其可供其他网站消费。仅用最少的麻烦就能做到这一点,对于整个互联网来说是一个巨大的飞跃,希望你们能传播关于如何轻松使用 Drupal 的好消息。

有了对如何处理内容以及可以使用的内容类型的扎实理解,我们现在可以开始探讨一些稍微复杂的内容问题。下一章将讨论如何创建自己的动态和吸引人的内容,以及如何通过使用分类模块来对内容进行分类。

第七章:高级内容

到目前为止,我们与内容的互动相当基础,我们只需要学习启用哪些设置和输入什么文本。这与本章即将介绍的内容有根本的区别,主要是因为本章的内容要求我们提前思考和计划我们想要的内容,以防止以后出现问题。

在这一点上,在前面几章中听到很多关于分类和分组的讨论后,你可能想知道所有这些喧嚣的原因。我们关注分类的主要原因是,为了使 Drupal 的分类系统如此强大,它必须留给我们决定如何最好地实现。一开始这可能听起来有点奇怪,但我们在本章后面会看到为什么 Drupal 的这个功能是使其与其他所有事物区分开来的因素之一——这真的是一件好事!

因此,本章讨论以下主题:

  • HTML、PHP 和内容发布

  • 分类

不要被这里只列出了两个项目的事实所迷惑,因为它们都代表了比我们之前讨论的所有其他主题更复杂的步骤。然而,一旦你掌握了这些主题,你在网站开发方面基本上就接近终点了——在我们开始查看更多管理类型任务之前,只剩下主题设计这一主题。

此外,在磨练你的内容创作和管理技巧的过程中学到的技能不仅对网站有用,而且在你生活的其他方面也很有用——无论是为你老板创建和管理办公室报告,建立新的网站,甚至写一本书。原因在于,总的来说,我们现在将要学习的是如何管理和创建内容,而不是如何点击按钮和链接来启用或禁用设置。

在任何情况下,我相信你都很渴望继续前进。

HTML、PHP 和内容发布

我们在第三章中简要提到了可以在我们的帖子中包含 HTML 或 PHP 的事实,在那里我们添加了一些格式化和超链接到一些文本——我们还在第四章的添加块部分看到了一个简短的 PHP 脚本,它为网站提供了漂亮的每日名言功能。因此,到现在你应该已经习惯了这样一个事实:如果给予足够的权限,发布一些相当独特和有趣的内容是可能的。

很可能,在某个阶段,你将希望将至少部分内容从纯文本升级为看起来稍微有点不同寻常的内容。如果你说的是布局,那么你需要了解 HTML。或者,如果你想创建一些可以根据网站状态变化或响应用户交互的动态内容,那么 PHP 是前进的方向。更有可能的是,一旦你积累了一些经验,你将使用两者的组合。

很遗憾,我们在这里不可能希望给你一个关于这两种技术的全面介绍。然而,网上有大量的免费资源,你可以学习 HTML 和 PHP,我们将在本节中列出其中的一些。

现在,我们将通过演示如何创建一个包含链接到其他有用网站、虚构团队的图片以及一些动态内容的关于我们页面,来看看如何通过实现一些相当有用的任务。

输入格式和过滤器

首先你需要理解的是,在每篇帖子中,我们必须明确指定将要发布的内容类型。这是通过使用输入格式设置来完成的,该设置在向网站发布内容时显示——假设相关用户有足够的权限发布不同类型的内容。为了控制允许和不允许的内容,请转到管理主菜单项下的输入格式链接。这将显示当前定义的输入格式列表,如下所示:

输入格式和过滤器

目前,你可能想知道为什么我们需要费这么大的力气来决定人们是否可以添加某些标签到他们的内容中。答案是,因为 HTML 和 PHP 都是如此强大的互联网技术,要恶意利用甚至相当简单的功能并不困难。例如,你可能会决定你想允许认证用户从他们的博客中链接到他们的首页。利用添加超链接的能力,恶意用户可以创建病毒或其他有害内容,并通过看起来无害且友好的 HTML 片段链接到它:

<p>Hi Friends! My <a href="link_to_virus.exe">homepage</a> is a great place to meet and learn about my interests and hobbies. </p>

这段代码简单地写出一个包含链接的简短段落,理论上链接到作者的首页,但实际上超链接引用属性指向一个病毒,link_to_virus.exe。这只是 HTML;PHP 可以造成更大的破坏——到如果你没有适当的网络安全或灾难恢复策略,那么你的网站可能会变得毫无用处或完全被摧毁。正如你可能从之前的屏幕截图中所注意到的,除了过滤 HTML之外,任何其他内容对除了管理员之外的其他人都是不可用的。

再次强调,以下原则很重要:

注意

永远不要允许用户比他们完成任务所需的权限更多!

按照现状,您可能不会喜欢输入格式,因此 Drupal 为我们提供了一些功能来修改它们。点击Filtered HTML选项旁边的配置链接,这将显示以下页面:

输入格式和过滤器

查看标签为您提供更改输入格式的名称属性选项;在这种情况下,角色部分不能更改,但正如您在我们创建自己的输入格式时将看到的,角色可以按您的意愿分配。最后一部分为我们提供了一个清单,列出了我们希望在使用此输入格式时应用的过滤器类型。在这种情况下,前两个已被选中,这导致输入格式应用HTML 过滤器(稍后讨论)以及换行符转换器,但不应用PHP 评估器

换行符转换器只是让用户更容易格式化内容,因为它意味着他们不需要明确输入<br><p>HTML 标签来显示新行或段落分隔。如果此功能被禁用,除非用户有能力添加相关的 HTML 标签,否则您的内容可能会看起来像这样:

输入格式和过滤器

PHP 评估器只是导致帖子被发送进行 PHP 处理,以便任何位于 PHP 分隔符<?php?>之间的代码都能正确执行。这不应该为除您自己或需要它来完成其工作的非常信任的管理员之外的人启用。然而,对于这两个选项都没有其他工作要做。我们在这里需要查看的唯一其他设置是HTML 过滤器

点击页面顶部的配置标签,以便开始使用HTML 过滤器。您应该会看到类似以下内容(一旦您点击了HTML 过滤器链接以展开其内容):

输入格式和过滤器

首先,您可以使用前两个选项来决定是否要删除不允许的 HTML 标签,或者简单地忽略任何帖子中的所有标签(选择Escape all tags会导致帖子中出现的任何标签都按原样显示)。请记住,如果您从内容中删除了所有标签,您应该启用换行符转换器,这样用户至少可以正确地分段内容。要删除哪些标签将在以下部分决定,在那里您可以输入所有允许的标签列表——其他任何内容都将被删除!

在前面的屏幕截图中,您可以看到在这个输入格式中有十一种不同的标签被允许。请注意,第一个实际上是标签,它可以用来在内容中插入链接——因此要小心这个!

接下来,下一个设置允许我们指定在发布内容时是否为用户提供 HTML 帮助——尝试启用和禁用此选项,并在每种情况下浏览此相对 URL 以查看差异:filter/tips。在长过滤提示中有很多关于 HTML 的有用信息;所以请花点时间阅读一下。如果你发现网站被用来向成员发送你未授权的产品链接,垃圾邮件链接阻挠工具是一个有用的工具。

这并不是故事的结尾,因为我们还需要能够创建输入格式,以防我们需要默认选项无法满足的东西。在这种情况下,让我们假设我们想要将一些图片文件添加到关于我们页面,我们将适时创建它。现在,有几种方法可以实现这一点,但在我们可以考虑创建我们的页面之前,需要满足两个主要标准。我们需要能够:

  1. 上传图片文件并将它们附加到帖子中。

  2. 在帖子的正文中插入并显示图片文件。

我们在讨论第四章中关于上传的第四章时已经看到了如何执行任务一。所以假设你能够将文件附加到你的帖子中,这就留下了第二个标准。在帖子中显示图片文件有几种方法。我们将在这里讨论的方法不需要我们下载和安装任何贡献模块,如Img_assist。相反,我们将直接使用 HTML 来实现这一点——具体来说,我们需要<img>标签。

查看之前的截图,它显示了过滤 HTML输入格式的配置页面。你会注意到<img>标签不可用。让我们创建自己的输入格式来满足这一需求,而不是修改此默认选项。返回到管理下的主要输入格式页面,点击添加输入格式。这将打开以下页面,你可以从中构建你的新输入格式,如下所示:

输入格式和过滤器

由于我们稍后需要使用一些 PHP 代码,我们已经启用了PHP 评估器选项,并阻止了除我们自己之外任何人使用此格式——通常你将为需要修改发布能力的用户组创建格式;但在这个案例中,我们只是演示如何创建一个新的输入格式;所以现在这样是可以的。

点击保存配置会将此新格式添加到列表中,现在可以通过点击列表中其名称旁边的配置链接来配置它,以便打开其配置页面。现在,在 HTML 方面,此输入格式与默认的过滤 HTML之间的唯一区别是在允许的 HTML 标签列表中添加了<img>标签,如下所示:

输入格式和过滤器

在完成这个输入格式之前,我们还需要关注另一件事。目前的情况是,我们将遇到在内容帖子中添加 PHP 代码的问题。这是因为目前HTML 过滤器首先处理内容,并破坏了PHP 评估器的代码。

在配置输入格式时,只需单击重新排列选项卡,并将PHP 评估器的权重降低,如图所示:

输入格式和过滤器

现在,PHP 评估器有权处理内容,并且可以正确地处理 PHP。为了将图片添加到您的帖子中,目前只需要这样做。完成之后,在使用它来创建“关于我们”页面之前,保存更改。不过,在这样做之前,可能最有用的是简要地讨论一下 HTML,因为您会发现,在尝试更复杂的帖子时,您需要能够处理 HTML。

HTML

为了让浏览器渲染我们每天习惯看到的整齐排列和色彩丰富的页面,它需要有关在哪里放置什么以及给每样东西什么颜色的指令。这是超文本标记语言(HTML)的领域,Drupal 在这里使用 HTML 也不例外。

在我们继续之前,让我们快速了解一下 HTML 的各个方面:

  • 简单性:从表格和框架到列表和图片,以及指定字体和样式,HTML 是网页创建和布局的一个方便且易于理解的约定。

  • 平台独立性:HTML 是平台无关的(尽管不是所有浏览器都完全相同),如果你这样想,这是有道理的;作为网站构建者,你最不希望做的就是必须为可能使用 HTML 的每一种不同类型的机器提供服务。

  • 标签:HTML 以开标签和闭标签的形式出现,它们告诉浏览器如何显示它们所包围的信息。例如,页面的标题将被包含在标题标签中,如下所示:<title>我的标题页面</title>。请注意,使用正斜杠来区分闭标签和开标签。

  • 属性:标签可以有属性,这些属性可以修改或定义标签行为的某些方面。例如,以下 HTML 片段中的size属性定义了字体的大小,<font size="2">我的字体大小为 2</font>,当它在浏览器中渲染时。

  • 章节:一个 HTML 页面被<html></html>标签包围,并分为<head></head><body></body>部分。主体标签包围页面的主要内容,并包含实际网页上看到的信息。在我们的情况下,我们不需要担心这一点,因为所有内容都是自动发布在<body>标签之间的。

这为我们提供了一个关于 HTML 是什么以及它能做什么的公平概述,但对于实际应用来说,看到我们目前可以使用 HTML 实现什么是很重要的。实际上,所有 HTML 标签都可供管理员使用,但请记住,你只应在开发期间使用此账户;一旦你的网站上线,你应该使用为该任务设计的输入格式来发布内容。正因为如此,你需要了解这些标签实际上能做什么。

下表讨论了每个默认允许的标签以及刚刚添加的<img>标签。请注意,在这里展示每个标签的每个属性实际上并不实用,所以如果你想了解每个标签的详细信息,请查看http://www.w3schools.com,这是一个关于 HTML 及其他内容的优秀资源。

标签 重要属性 描述
<img> src: 提供图像文件的路径alt: 包含图像的描述 与其他标签不同,<img>标签不需要关闭标签</img>。它用于在 HTML 页面中显示图像,并通过使用可选属性可以精确控制图像的显示和布局。
<a> href: 指定链接的目标 URLname: 允许在网页内创建书签target: 定义链接打开的位置——通常是新页面,_blank,或同一页面,_self 锚点元素便于创建超链接或书签,用户可以通过这些链接进行导航。
<em> 强调标签将标准文本转换为斜体。
<strong> 强标签将文本以粗体显示。
<cite> title: 可以用来指定所讨论引用的来源或作者 引用标签允许文本被引用为来自另一个来源或作者。它通常以斜体显示。
<code> 代码标签将包围文本的样式改为模仿计算机代码的样式。
<ul> type: 定义要使用的子弹点的类型:disc, square,或circle 无序列表创建一个子弹点列表——它需要使用<li>标签来指定列表中的项目。
<ol> 有序列表创建一个带编号的子弹列表——它需要使用<li>标签来指定列表中的项目。
<li> 列表项标签在有序列表或无序列表中创建一个新项目;正因为如此,它包含在<ul></ul><ol></ol>标签内。
<dl> 定义列表标签创建一个由<dt><dd>标签定义的项目结构列表。
<dt> 定义术语标签在定义列表中创建一个术语。它包含在<dl></dl>标签内。
<dd> 定义描述标签创建其父术语的描述——它包含在<dl></dl>标签内。

这个表格实际上只列出了一小部分你可以使用的标签。大多数标签也有各种各样的必需的、可选的或基于事件的属性,你可以通过调整这些属性来实现期望的效果。还有一个其他标签,我们需要使用它来正确布局页面,那就是非常重要的<table>元素。表格用于在页面内排序和放置内容,并使用<tr>标签,它定义了表格中的新行,以及<td>标签,它定义了该行中的新单元格。作为一个练习,回到你刚刚创建的输入格式,并添加这些标签。

这个表格实际上只列出了一小部分你可以使用的标签。大多数标签也有各种各样的必需的、可选的或基于事件的属性,你可以通过调整这些属性来实现期望的效果。还有一个其他标签,我们需要使用它来正确布局页面,那就是非常重要的<table>元素。表格用于在页面内排序和放置内容,并使用<tr>标签,它定义了表格中的新行,以及<td>标签,它定义了该行中的新单元格。作为一个练习,回到你刚刚创建的输入格式,并添加这些标签。

在完成这些之后,我们就可以开始创建一个比之前所有帖子都要稍微复杂一点的帖子了。

创建一个功能丰富的页面

创建这样一个新页面的酷之处在于,一旦完成,你几乎可以在任何其他地方重用代码,只需替换那些需要更改的值或内容。显然,你希望网站看起来相当统一,这支持代码重用的原则——至少在 HTML 方面。

很可能在你创建页面的某个阶段,你将想要创建的不仅仅是一个独立的页面。如果是这样的话,只需将你在这里创建的任何页面剪切并粘贴过来,并做出任何必要的修改,然后再发布。以这种方式做事将使你的所有页面在当前主题赋予它们的属性之外,拥有相似的外观和感觉。

关于我们的页面将具有以下功能:

  • 结构良好的内容

  • 目标列表

  • 团队的内联图片

  • 关于项目的信息

  • 重要链接列表

  • 一些基于 PHP 的动态内容

  • 广告

为了满足所提出的要求,我们将需要使用以下标签:

  • <table>

  • <ol>

  • <ul>

  • <img>

  • <a>

以及其他一些,我们将使用它们来展示可用的各种字体样式。为了创建这样一个稍微复杂一点的页面,你应该考虑使用一个合适的代码/HTML 编辑器(比如 EditPlus,www.editplus.com,就可以用——或者,在 Google 上简单搜索会找到很多结果,其中一些是免费的),它可以自动缩进你的代码,以及为各种标签和内容着色,以使生活更轻松。

好吧;我们基本上已经准备好开始了。我打算逐个列出整个页面的代码,而不是一次性列出,因为在我们进行的过程中有很多重要的事情值得讨论。然而,一旦你掌握了 HTML 和 PHP,这里没有什么太复杂的。在我们开始之前,最好先看看最终页面,以获得我们努力的方向。以下截图显示了页面的主要内容:

创建一个功能丰富的页面

我希望你会同意这个页面看起来相当令人愉悦!只需做很少的工作,就能轻松实现这样的外观和布局。从这个页面中不明显的是,这里给出的名字列表以及他们的电子邮件链接是由一个简短的 PHP 脚本提供的,该脚本被嵌入到 HTML 页面中。

让我们继续编写代码——首先,我们有以下内容:

<table border="0" cellpadding="5">
<tr>
<td align="center" colspan="2">
<strong>The CWC</strong>
</td>
</tr>
<tr>
<td colspan="2">
The <em>Contechst Wildlife Community</em> was started by a group of
individuals in <cite title="South Africa">Cape Town</cite>. Through
hard work, dedication and plenty of play time, they have built a truly
international community that strives to effect change with regards to
all things related to our biosphere.
</td>
</tr>
<tr>
<td colspan="2">
<br>
We have the following goals:
</td>
</tr>

这个第一部分用于声明表格,它最终将负责在我们想要放置内容的地方布局所有内容。注意,我在这里使用了两个表格属性。第一个,border,设置为0,这意味着边框是不可见的。为什么我要这样做? 在你构建表格的时候,将边框设置为1是个好主意,这样你可以看到你在做什么。当你开始制作复杂的嵌套表格等时,你会发现错误有时会悄悄出现。在这种情况下,能够看到你的表格边框的样子是非常有帮助的。一旦你完成,只需将边框值设置为0,就可以从页面上移除框架。

下一个选项,cellpadding,给表格中的每个单元格留出一点空间(或者如果你喜欢,就是填充),这样内容就不会显得挤在一起。你还可以看到我们使用<tr><td>标签声明了一系列的表格行和单元格。然而,第一个<td>标签有两个属性,它们控制内容在单元格内的放置位置(align)以及这个单元格跨越多少列(colspan)。这是必要的,因为在稍后的阶段,要添加的图片占据了表格右侧的一个单元格,但上下的行仍然需要填满整个页面(在这个例子中,整个页面是两列,因此设置了colspan="2")。

为了更清楚地了解我的意思,请看以下带有border属性设置为1:的截图

创建一个功能丰富的页面

注意到上方和下方的行都跨越了中间两列。当您在更复杂的表格上工作时,您可能需要稍微调整一下才能得到正确的结果。

如果您查看前面列表中的代码片段,您会注意到使用了<cite>标签,并定义了一个title属性。这是为了向您展示提供引用的新颖用法。如果用户将鼠标悬停在<cite>标签内的文本上(在这个例子中,Cape Town),则会在屏幕上显示title属性中定义的文本(在这个例子中,South Africa)。这样,您可以在不使页面杂乱的情况下澄清或解释重要术语。

继续下去,我们得到以下有序列表的目标:

<tr>
<td colspan="2">
<ol>
<li>
To provide an online meeting place for like-minded people
</li>
<li>
To discuss and monitor global conservation and wildlife activities
</li>
<li>
To influence policy and effect change in hard-hit areas
</li>
<li>
To support front-line activists like SeaShepherd
</li>
<li>
To raise funds for animal relief efforts and care
</li>
</ol>
</td>
</tr>

如您所见,每个列表项恰好包含一行内容(或一个目标,在这种情况下),并且所有内容都包含在<ol></ol>标签内。这很简单,但效果相当好,我相信您会同意。下一节我们将遇到一些 PHP 代码以及插入我们的团队图片:

<tr>
<td align="center" colspan="2">
<strong>Meet the Team</strong>
</td>
</tr>
<tr>
<td colspan="2">
In no specific order, the following people constitute the bulk of the
full-time staff here at CWC (You can email them by clicking on the names
shown below):
</td>
</tr>
<tr>
<td>
<ul>
<?php
$team = array('Tolis Welch', 'David Mercer', 'Bronagh Casey', 'Nic Malan', 'Brian Reid', 'Rochelle Reid');
foreach($team as $item){
$name = explode(" ", $item);
echo '<li><a href="mailto:' . $name[0] . '@cwc.org">' . $item . '</a></li>';
}
?>
</ul>
</td>
<td align="center">
<img src="img/bnmv.jpg" alt="The Team" width="250">
</td>
</tr>
<tr>

在这个例子中,我们相当巧妙,您很快就会看到!总结一下,在本节中我们:

  1. 使用<ul>标签创建了一个无序列表

  2. 通过使用<?php标签打开了一个 PHP 脚本

  3. 创建了一个包含团队成员姓名的数组

  4. 使用foreach循环遍历数组中的每个名称

  5. 通过使用内置的explode函数获取每个成员的姓名

  6. 将带有 HTML 标签的结果输出到屏幕上

实际的电子邮件链接是通过使用<a>标签和href属性中的特殊mailto选项创建的。电子邮件地址是由团队成员的姓名构建的,所以前两个地址是<Tolis@cwc.org><David@cwc.org>。这稍微有些牵强,因为您的电子邮件地址可能没有这样的有序系统,但这足以展示 PHP 如何很好地嵌入到您的页面中。

一旦列出所有电子邮件地址,我们就在它们旁边创建一个表格单元格,并使用图像标签插入团队的图片。如您所见,这里使用了三个属性来完成这项工作。第一个属性src给出了要显示的图像文件的路径;第二个属性给出了照片的描述,以便如果有人将鼠标悬停在图片上,则会在屏幕上显示文本The Team;最后,我们选择了一个照片宽度的大小,以便正确地将其适应到页面上。请注意:

注意

保持图片文件小!您可以使用图像编辑软件降低其质量和大小——大图片会减慢您的网站速度。

下面的 HTML 部分打印出了一些可能对用户感兴趣的组织的链接列表:

<td colspan="2">
At CWC we strive to do the <em>right thing</em>! Please take the time
to look over the site and register in order to start interacting with
the community - our natural world needs all the help it can get.<br><br>
If you are interested in getting involved in any one of the number of
critically important organizations around the world, then please feel
free to browse any of the links given below.
</td>
</tr>
<tr>
<td align="center" colspan="2">
<strong>Our Friends</strong>
</td>
</tr>
<tr>
<td colspan="2">
<ul>
<li>
<a href="http://www.seashepherd.org" target="_blank">Sea Shepherd</a>
</li>
<li>
<a href="http://www.worldwildlife.org" target="_blank">World Wildlife Fund</a>
</li>
<li>
<a href="http://www.rspca.org.uk" target="_blank">The Royal SPCA</a>
</li>
</ul>
</td>
</tr>

这部分相当直接,除了我们现在正在使用一个新的属性来设置<a>标签。因为我们更希望人们留在网站上,而不是离开去访问我们的朋友,所以我们已经将目标属性设置为_blank,以强制浏览器打开一个新窗口来显示目标 URL。除此之外,这一部分相当清晰,所以我们继续到最后一个页面项——广告:

<tr>
<td align="center" colspan="2">
<strong>Our Sponsors!</strong>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<a href="http://www.packtpub.com" target="_blank">
<img src="img/PacktLogosmall.png" alt="Packt Publishers">
</a>
</td>
</tr>
</table>

这使用了超链接和图像文件。实际上,我们已经通过将其包裹在<a></a>标签中,将图像,即Packt标志,转换成了一个超链接。这意味着人们不仅可以查看赞助商的标志,如果他们愿意,他们还可以通过点击图像直接访问赞助商的网站。如果您的赞助商希望跟踪人们从您的网站跟随链接的次数,他们可能需要您修改目标 URL 以提供一些额外的信息。例如,您可能最终会制作一个像这样的超链接:

<a href="http://www.packtpub.com?referrer=cwc" target="_blank">

实际上,像跟踪横幅广告这样的东西可能会相当复杂,但这又是另一个完全不同的故事;所以我们在这里不会深入讨论!

完成这些后,您不仅有一个漂亮、闪亮的新关于我们页面,而且还有一个可以用来制作具有相似外观和感觉的其他页面的粗糙模板。实际上,还有很多其他因素会影响您页面的外观和感觉,但这涉及到主题的使用,我们还没有讨论过(这些将在下一章中详细讨论)。

页面完成后,我们还没有完全完成,因为它还需要被添加到网站上。为了做到这一点,我们需要看看如何实际处理我们添加的内容。

发布一个功能丰富的页面

我们在内容处理部分之前看到过如何发布页面,尽管在那个阶段我们实际上并没有任何相当复杂的页面可以处理。本简要部分将向您展示将更复杂的页面上传到网站的过程。以下列表显示了所需的步骤:

  1. 创建一个新的内容帖子,或者编辑一个将要修改的帖子。在我们的例子中,我们已经有了一个关于我们页面,所以作为管理员,我们可以在查看关于我们页面时简单地点击编辑标签。

  2. 根据需要输入或修改页面的标题。

  3. 选择正确的输入格式。在这种情况下,我们有一个特别创建的格式,称为内联图像

  4. 将在您的 HTML 或代码编辑器中创建的 HTML 复制并粘贴到正文文本区域。

  5. 确保所有作者信息发布选项都是正确的。

  6. 上传此帖子所需的任何图像文件,并确保你将正确的文件路径和名称输入到你的代码中。例如,关于我们页面中的文件附件部分看起来是这样的:发布一个功能丰富的页面

    • 在这个例子中,我没有对 bnmv.jpg 图片进行去色处理,因为我希望保留其质量以用于书籍——然而,你可能应该将图像大小控制在 10KB 以下。

      将这个屏幕截图显示的文件路径与代码中展示的文件路径进行比较(这些文件路径是在将文件的下载方法设置为公共时预期的):

      src="img/bnmv.jpg" src="img/PacktLogosmall.png"

      注意,在代码中,我们只需要给出相对文件路径,而不是完整的路径。因为页面是从 drupal 目录中调用的,该目录包含文件目录,所以我们只需要从“files”开始显示文件路径和名称。

    注意

    如果你发现,除了得到像这个演示中显示的文件路径之外,你还得到了像http://localhost/drupal/system/files?file=PacktLogoSmall.png这样的东西,那么这是因为你在administer菜单项下的设置菜单项的文件系统设置部分将下载方法设置为私有

    这意味着文件被上传到文档根目录之外的地方(这在与文件系统路径相同的部分中设置),你需要输入完整的文件路径,而不是像我们在这里所做的那样简单地输入相对文件路径。

  7. 对于像关于我们这样的页面,最好禁用评论,因为你真的希望这是一个独立的页面,不受社区其他人的任何辩论的影响。

  8. 接下来,确保菜单设置适合你正在添加的页面。在这种情况下,我们已经设置了以下设置:

发布一个功能丰富的页面

就这些!一旦你准备好查看页面,点击预览,如果一切看起来都正常,就提交它。如果有什么不对的地方,你可以很容易地再次编辑它;所以,在你查看网站上的页面之前,不必过于担心一切都要完美无缺。

因此,这个部分应该会让你觉得创建非常棒的网站页面非常容易。显然,如果你不熟悉 HTML 或 PHP,你需要对这些进行一些练习,但以下链接应该会给你一个好的开始:

现在你已经知道了如何发布和操作内容,学习如何对内容进行分类和组织非常重要,这样随着时间的推移,你网站上积累的信息档案就不会仅仅变成一堆未排序的杂乱无章的东西,而会变成一个直观且易于使用的资源。为了实现这一点,我们需要讨论……

分类

初看可能会觉得分类法和分类法是更多用作标志的术语,表明你的工作会因为某些原因而变得更加复杂。毕竟,设置一个网站设施以允许博客作者写博客、论坛发帖者发帖、管理员管理或任何其他类型的内容制作者制作内容并就此为止是完全合理的。就我们到目前为止所讨论的内容而言,这一切都是可能的,那么为什么 Drupal 坚持要增加学习新概念和术语的负担呢?

如果你知道你的网站永远不会收集大量内容,那么花时间与分类法等工作可能不会带来太多优势——你可以直接启用所需的任何内容类型,并让用户添加他们想要的任何内容。然而,我们的目标通常不是在创建网站时保持神秘,所以假设你希望吸引大量用户社区,你会发现 Drupal 中组织内容的方法使其成为最复杂的内容管理系统之一——绝非夸张!

抽时间掌握在 Drupal 中处理类别和分类法,因为这不仅可以帮助你更好地管理内容,而且由于内容的组织方式灵活直观,这也会让你的网站与众不同。你还会发现,你可以管理几乎任何大小可想象网站(以防你所做的工作成为下一个大事件),因为内容与术语和类别关联的方式。

什么是?为什么?

分类法被描述为分类的科学。在 Drupal 的应用中,它是指使用术语之间几种不同类型的关系来组织内容的方法。就这么简单!但这并不真正涵盖它的有用性,在我们继续之前,还有一些术语我们需要先了解:

  • 描述词:用于描述内容的术语(也称为术语

  • 词汇:相关描述词的集合

  • 类别:词汇的同义词

  • 同义词词典:对内容的分类,描述了相似于的关系

  • 分类法:将内容分类到层次结构中

  • 标签:将术语(描述词)与内容关联的过程

  • 同义词:可以将其视为当前描述词的另一个词

为了正确理解这些术语之间的关系,查看以下图表可能会有所帮助:

什么是?为什么?

这有助于说明存在两种主要的词汇类型。每种类型都包含一组描述符,但它们之间的关系不同,因为分类法处理信息的层次结构,而同义词表处理术语之间的关系。描述符(以小框表示)及其关系(以箭头表示)在您使用的词汇类型中起着关键作用。

我们在讨论论坛模块时已经看到了一个分类法的例子。在这种情况下,论坛容器和它们包含的论坛主题之间存在一种层次关系。但是,我们为什么需要分类法呢?好吧,如果你正在创建一个科学文档,并且希望允许术语之间有大量的引用,以便用户可以浏览相关的页面,而这些页面不一定有父子关系,那么你就会选择这种结构。

因此,我们知道我们可以在 Drupal 中分类内容,但这有什么用呢? Drupal 分类系统之所以如此强大,其中一个原因就是它允许在创建内容时对其进行分类。这减轻了网站管理员在人力方面的负担,因为不再需要审核进入网站的每一块内容,以便将其放入预先确定的类别中。

还有可能对给定的节点进行多次标记。这意味着内容可以同时属于几个词汇表。这对于交叉引用非常有用,因为它通过实际节点突出了描述符或词汇表之间的关系。

在 Drupal 中实现分类法

讨论如何实现某种形式的分类的最佳方式是看到它在实际操作中的表现。正如你现在可能已经从 Drupal 中预料到的,有许多设置需要考虑,以便让一切正常运行。让我们假设 CWC 演示网站已经招募了大量专家,他们将在网站上维护自己的博客,以便有兴趣的各方可以关注知情人士的新闻。

现在,假设有些人会满足于访问他们选择的博客并阅读那里的任何新帖子,但有些人可能希望能够搜索特定主题,以查看博客作者在某些问题上的相关性或分歧。一旦网站运行了几个月,将会有大量的内容被发布,我们需要某种方式来确保特定主题易于查找,无论谁在他们的博客上讨论过它们。

词汇表简介

让我们快速讨论一下在管理工具中如何处理类别,以便确定如何确保满足这一要求。如果您点击“管理”下的类别链接,您将看到一个列出当前词汇的页面。假设您在上几章中创建了一个论坛,您应该会有类似这样的内容:

词汇表简介

在我们查看编辑术语和词汇之前,让我们看看如何为自己创建一个词汇表。点击添加词汇标签页,将显示以下页面,我们可以使用它手动创建我们的第一个词汇表:

词汇表简介

以为例,这个词汇表将处理狩猎主题,并有一些友好的说明来指导用户在提交博客条目时的意图。这仅适用于博客条目,因为这是唯一启用了此词汇表的内容(或节点)类型——您可以根据希望此词汇表应用于多少内容类型来选择多少或多少个。

查看页面下方,还有其他几个选项,我们将在稍后详细讨论。点击提交将此词汇表添加到列表中,因此主页现在看起来如下:

词汇表简介

到目前为止一切顺利,但这样对我们来说并没有太大的用处!我们需要添加一些术语(描述符)以便开始标记。

处理描述符

点击列出术语,然后选择添加术语标签页,将显示以下页面:

处理描述符

在这里添加了术语捕获,并附有对该术语本身的简要描述,这可以用来指导贡献者。如果我们选择,可以通过将其设为同义词来将术语诱捕捕获关联起来。在这种情况下,术语诱捕(或您想添加的任何其他同义词)将被视为术语捕获。编辑术语捕获,使同义词选项看起来如下:

处理描述符

同义词目前实际上并没有什么有用的作用,除非您使用词汇表模块——虽然这里没有涉及,但您可以自由下载并尝试一下,以进行一些练习。向这个词汇表添加一些您选择的术语,使您的列表看起来如下:

处理描述符

现在是时候通过发布一些博客内容来利用这些术语了。

启用类别发布内容

使用具有添加博客内容所需权限的任何账户,尝试向网站发布内容。现在您应该能够查看如所示的新增类别部分:

启用类别发布内容

现在来谈谈真正真正聪明的地方!一旦这个博客节点被发布,用户可以像平常一样查看博客,但现在标题下方会显示其标记的描述符,如下所示:

使用分类功能发布内容

注意,有一个弹出窗口包含该术语的描述,如果用户将鼠标悬停在描述符的链接上,则会显示该描述。说到这里,描述符链接会带我们去哪里呢? 如果你点击术语,在这种情况下,罐头,你将被带到列出所有使用此术语标记的内容的页面。这应该会让你对使用 Drupal 感到非常兴奋,因为只需做很少的工作,用户现在就可以找到专注的内容,而无需那么努力地寻找——这正是内容管理的一切!

层次结构

我们迄今为止所看到的东西实际上只是冰山一角。正如你所想象的那样,你可以在词汇表中构建一个完整的术语层次结构,以给你一个相当复杂的分类法。记住,如果你正在构建一个层次结构,那么最广泛的术语应该位于堆栈的顶部,而更具体的术语则接近底部。然而,目前我们实际上并没有一个层次结构,而更多的是一个扁平结构。

如果我们想要一组更具体的描述符,这可以让博主们标记他们的内容(例如,专注于特定类型的诱捕)呢? 答案在于编辑词汇表以选择层次结构(在分类下)选项,如下所示:

层次结构

现在,如果我们想在我们的词汇表中添加一个名为诱捕的术语,特别是,在诱捕这个术语下,我们只需点击添加术语标签,并从现在应该可用的新的父级下拉列表中选择相关父项:

层次结构

保存了这个新增项后,术语列表看起来是这样的:

层次结构

这相当容易做到,现在我们可以自由地通过在层次结构中正确位置添加术语来创建我们需要的复杂结构。你可能期望 Drupal 显示你一个层次结构的面包屑路径,但遗憾的是,这个功能目前还没有。虽然可以手动添加,但这需要一些 PHP 编码和对源文件的修改,这些超出了本书的范围。如果你感到好奇,可以看看www.greenash.net.au/posts/thoughts/basic_breadcrumbs_and_taxonomy,它概述了将完整层次结构面包屑包含到你的内容页面中的过程。

但如果您的主题比简单的层次结构稍微复杂一些怎么办?例如,设陷也是常见的偷猎方法,因此它也应该出现在层次结构下的偷猎部分。通过在编辑您的词汇时在层次结构部分选择多个选项,可以轻松实现这一点。一旦保存此更改,您就可以通过在编辑术语页面的父项部分选择时按住ShiftControl键来编辑您希望归入多个类别的术语,如下所示:

层次结构

这样就解决了层次结构选项如何影响 Drupal 内容结构的问题。但故事还没有结束。

内容结构

如果在我们演示网站的案例中,我们有设陷这个术语可用于标记内容(在这种情况下是博客文章),但有人实际上在谈论与狩猎完全不同的事情,并且恰好有一些内容重叠怎么办?一个可能的场景可能如下所示:

  • 几位专家被雇佣来维护关于非洲大陆的博客。

  • 他们使用一个新的非洲词汇库标记他们的内容,该词汇库包含诸如自然、瞪羚、捕食者、湖泊、河流、山脉、狩猎、天气旅游等术语。

  • 您希望能够允许从非洲博客中创建的内容通过狩猎相关主题在狩猎专家博客中进行交叉引用。

为了实现这一点,有必要创建一个新的词汇库称为非洲。将此词汇库附加到博客内容类型,然后创建几个描述符,确保其中一个是狩猎,如下所示:

内容结构

现在当用户尝试发布内容时,他们面前出现的是两个而不是一个选项来分类他们的内容,并且假设您已正确使用权重选项,您可以对您的标签应用一种层次结构。例如,一位非洲博客作者关于偷猎的博客文章可能看起来像这样:

内容结构

一旦将此内容发布到网站上,就可以在内容页面上查看两个类别,而不仅仅是其中一个。换句话说,节点已被标记为几个描述符,这被称为分面标记。基本上,分面标记使用一种自下而上的分类系统,其中内容的面或属性由术语描述。这样,可以创建一种非常直观的内容分类方法,而无需用户了解内容层次结构的自上而下的路径,以便找到他们想要的内容。讽刺的是,在这种情况下,这里使用的特定标记方法也有助于阐明术语的层次结构。

查看网站上的这篇帖子可以确认,用户现在可以通过点击帖子中提供的链接直接访问狩猎偷猎类别页面。

在所有这些中,还有一些稍微微妙的东西。你能看到吗? Drupal 默认情况下,在撰写本文时,并没有提供分类的面包屑导航,这样我们就可以通过查看其内容类型来简单地查看任何分类的更高级别。然而,使用这种方法构建你的层次结构确实做到了这一点。看看我们刚刚提交的页面上的偷猎帖子:

内容结构

我们已经从狩猎词汇中了解到,它是偷猎的父类。然而,仅使用单个词汇,用户无法判断偷猎这个术语属于哪个类别。以这种方式操作,用户可以通过访问狩猎来有效地向上导航一个层级,或者通过访问偷猎保持在同一层级。但这也存在一个问题。

如果某个狩猎博客作者只想发表一篇帖子并使用 罐头 这个来自 狩猎 词汇的术语进行标记,而不必首先指定这个内容也属于 非洲 词汇,会发生什么? 答案再次在于编辑词汇页面,该页面底部有一个必填复选框。如果启用此选项,则发帖者必须选择至少一个标签,但如果我们不选择它,则发帖者可以选择是否包含该词汇中的术语。

谈到新选项,这里还有三个其他选项我们应该快速看一下。在撰写本文时,相关术语在标准 Drupal 网站上没有任何作用,尽管你可能想尝试使用术语表模块,该模块利用了这个功能。相关术语可以被视为词汇级别上的一种交叉引用——与同义词相对,后者在术语级别上工作。自由标记是一个有趣的选项,因为它允许发帖者自行决定他们内容的术语。例如,为狩猎词汇启用此选项意味着发帖者在创建博客条目时会被提供以下类别选项:

内容结构

注意到狩猎类别上方有一个红色的上标星号。这是因为尽管我们使用的是自由标记,但编辑词汇页面上的必填选项仍然被启用——所以这里必须输入某些内容。其次,有一个包含所有可用标签的下拉列表(以你输入的字母开头)。这意味着,虽然人们可以自由输入自己的标签,但这并不像最初看起来那么随机,因为他们可以通过这个下拉列表得到关于已有标签的指导。这样,Drupal 可以鼓励更一致的描述符集合。

免费标签有一些优点,即它允许免费标签,因为人们可以真正地按照他们喜欢的任何方式标记他们的内容——使标记系统更紧密地适应内容。然而,问题是,你的词汇可能变得难以管理,因为类似的内容可能会被标记上完全不同的描述符,这使得用户难以找到他们想要的东西。如果你要允许这个选项,那么你应该确保使用这个选项的人意识到他们应该合理且尽可能统一地标记他们的内容。

无论如何,如果我们继续我们的狩猎帖子,我们可能会得到类似这样的内容:

内容结构

在这种情况下,我们已经为这篇博客条目添加了四个描述符;因此,当有人访问网站时,他们会看到与这篇帖子相关联的所有四个标签,如下所示:

内容结构

你应该注意这样一个事实,即使用免费标签系统无法创建术语的层次结构,因为每个新标签都与所有其他标签处于同一级别。所以你最终得到的是一个真正的同义词词典,而不是一个分类法。

这对于将内容用作参考资料的人来说非常有用,因为例如,如果他们点击了只标记了夹具的帖子描述符名称,那么显示所有与该标签相关帖子的页面无疑会显示我们刚刚添加的帖子。正因为如此,这个人能够看到捕捉、熊夹地雷陷阱都是相关主题,并且能够通过从一篇帖子跳转到另一篇帖子来研究相关材料。

编辑词汇页面上,我们可用的最后一个选项是多选。这与免费标签相关,因为如果你启用了免费标签,你可以为每篇帖子输入多个描述符——你只需用逗号分隔每个描述符即可。然而,如果你想允许内容有一个更类似于同义词词典的结构,而不启用免费标签,你只需启用多选,这将允许用户使用词汇创建者提供的所有描述符来标记他们的帖子。实际上,这在允许一些标记灵活性同时保持对内容标记控制方面是一个折中方案。

当启用多选并且禁用免费标签时,你将像之前在层次结构部分选择多个父项一样选择你想要为帖子添加的术语:

内容结构

有了这些,我们就来到了分类讨论的结尾。正如我们在开始处理这个部分时提到的,可能需要一点时间来熟悉这些事情,因为 Drupal 中分类工作的方式是非典型的,并且并不明显直观。然而,一旦你掌握了它,你会发现你的内容可以轻松访问并且组织得很好,几乎不需要努力。

摘要

随着本章的结束,你可能会希望对创建一个功能齐全、内容导向的网站所面临的任务有一个良好的理解。如果你对 HTML 和 PHP 还不熟悉,那么我在继续下一章之前建议你花些时间学习一下 HTML。话虽如此,你已经看到了如何创建输入格式以允许不同类型的 HTML 或 PHP 内容进入你的帖子,以及如何创建一个相当不错的基于 HTML 的动态网页。

虽然这在创建一个美观的网站方面确实很重要,但你的内容管理课程真正的关键部分是在对分类的讨论中。Drupal 的分类系统使其区别于其他 CMS 技术,并提供了灵活性和强大的功能,以实现我们为内容想象中的任何类型的结构。有了像免费标签这样的强大功能,只需点击一下按钮即可使用,你就在控制着周围最好的系统之一。

尽管它很有用,但这并不意味着它容易,你无疑需要花些时间来实践这里讨论的内容。一旦你确信你已经按照网站的预期需求设置了事情,你也应该能够以最小的麻烦进行任何可能需要的修改。

在完成大部分艰苦的工作之后,我们可以将注意力转向创建 Drupal 网站最具创造性和,在我看来,最有乐趣的部分。下一章将讨论主题以及如何为新网站创建一个独特且吸引人的外观。

第八章。Drupal 的界面

为了使你的网站界面独特且吸引人,不仅需要一些关于 Drupal 的技术知识,而且像任何设计类任务一样,也需要一些创造力。目前你的网站功能齐全,外观也不算糟糕——它有点单调,但能完成任务!然而,正如你将看到的,只要付出一些努力,创造全新的东西并非遥不可及,而且正如你所预期的那样,Drupal 提供了一系列功能来简化我们的工作。

如果你像我一样,喜欢从事网站更具创造性的方面,那么这真的是你一直在等待的章节。是时候设计、规划和实施用户将沉浸其中的视觉环境了——如果你能成功创造一个令人愉悦的互动氛围,那么你无疑已经为确保用户对你的网站满意做了很多工作。

然而,就像这本书中的其他内容一样,我们不可能一开始就一头扎进去,一旦开始工作就学会游泳。在我们开始定制 Drupal 界面之前,有很多有趣的事情需要思考和了解。

你还有这样的便利,即网站已经为你搭建好了,这让你可以自由地在这里那里进行修改以达到你的设计目标,而不是从头开始开发 HTML。在某种程度上,这种便利实际上限制了你的选择,因为如果不是对页面进行彻底的重写,你的网站将保留一些 Drupal 的风味。但这绝非坏事,对吧?

为了达到这个目的,本章将讨论以下内容:

  • 规划基于网络的界面

  • Drupal 界面的工作原理

  • CSS

  • 主题

我应该提醒你,为网站设计一个全新、令人愉悦且独特的视觉风格涉及很多内容。有许多细节需要你仔细调整,因此你应该准备好在这个部分投入一些时间,因为毕竟,你的网站的外观和感觉是你向社区展示的面貌,同时也是社区对外界展示的面貌。

另一件需要记住的事情是,你应该花些时间看看已经存在的东西。在设计网站时,你可能会遇到的问题,已经在整个行业中得到了成功的解决,而且不仅仅是 Drupal 用户。此外,不要害怕将你的设计视为一个持续的过程——虽然每周大幅度改变你的网站并不好,但定期调整或升级你的界面可以保持其现代感和光鲜的新面貌。

规划基于网络的界面

“形式追随功能”这一原则在人类知识的许多领域得到广泛应用,从进化到生物动力学和工程学。这是一个易于理解的概念,其基本含义是,某物建造或制作的方式必须反映其被制作的目的。这是一个非常明智的想法,将其应用于您网站的设计将为您提供一把衡量您设计得有多好的尺子。如果您,或者最好是您询问的每个人,都能诚实地说出您的网站看起来就像是为了做您正在做的事情,那么您就做得很好。

这并不是说您的网站应该看起来像其他执行相同功能的网站。事实上,如果可能的话,您希望尽可能使它与众不同,同时不要越过您认为您的目标用户会认为的良好品味常识的界限。

您是如何做到这一点的? 关键在于将您作为网站所拥有的或做的事情与您的特定目标受众联系起来。如果您提供的内容对所有年龄、所有国籍、所有种族或宗教的男女都有吸引力,那么显然您应该选择每个人都可用的东西。实际上,这可能是一个略微无味的网站,因为您不想通过明确使您的网站对另一组用户友好来边缘化任何用户群体。幸运的是,尽管如此,您的目标受众在一定程度上将比这更容易定义,因此您可以一般性地为特定类型的用户提供一些妥协。

请记住,尽管以下章节涉及视觉功能设计,您真正思考的是交互设计的视觉或功能方面,这包括所有视觉和功能设计。交互设计是您如何看待您的受众如何使用和与您的网站互动。这是一个重要的区别,因为从用户的角度思考一切将有助于您在前进过程中定义您的选择。

视觉设计

在这个问题上,没有必要拐弯抹角。尽可能使网站在视觉上简单,同时不要隐藏任何关键或有用的信息。我的意思是,如果您认为列表上的所有项目都是有用的,并且会被(或正在)频繁使用,那么您不应该害怕在页面上留下相当长的项目列表。隐藏一个重要的东西给用户——无论在其他页面上找到它看起来有多容易——都会让他们感到沮丧,您的受欢迎程度可能会受到影响。这一点的后果是,您不应该害怕有相当长的页面,用户必须向下滚动——而不是有一个复杂的导航结构,让信息在页面底部可用。

你的网站外观也会对用户如何理解网站的工作方式产生重大影响。例如,如果你有几种不同的字体适用于不同的链接,那么用户完全可能不会因为不同的字体样式而考虑点击不同类型的链接。你自己想想这个问题!如果你正在阅读一页文本,所有的链接都使用与正文相同的字体,你将如何知道点击哪些单词?这可以总结为:

注意

确保您的网站在视觉上保持一致,并且页面之间没有风格差异。

有很多所谓的视觉设计规则,你可以应用到你的网站上。这些规则大多是理论性的,你可能愿意也可能不愿意进一步了解这些规则——我可以建议你用谷歌搜索一些好的阅读材料。可能适用于你的有:三分法规则,即垂直或水平分割成三部分的事物比其他设计更具有视觉吸引力;视觉中心规则,即页面的视觉中心(眼睛最容易被吸引的地方)位于页面的实际中心上方和右侧。

语言

现在这是您网站设计中的一个真正有趣的部分,而网络写作的艺术远不止于表达你的意图。之所以如此,是因为你不再仅仅是为人类读者写作,还要为机器读者写作。由于机器在解释页面时只能遵循一定数量的规则,因此,作者(如果他们希望他们的网站在搜索引擎上排名靠前)必须对所使用的语言做出妥协。

在你担心如何使你的网站文本高度优化以供搜索之前,还有一些更基本的事情你需要做对。首先,确保你的语言清晰简洁!这是最重要的;如果平淡无奇的文本能更好地阐明你的重要观点,那么就牺牲一些时髦、风格化的文案吧。

除了你语言的实际内容外,文案的视觉和结构外观也很重要。使用粗体或更大的字体来强调标题或重要观点,并确保你合理地安排文本间距,使页面更容易看,因此也更容易阅读和理解——我们在上一章中通过发布一个格式良好、布局合理的“关于我们”页面看到了这个例子。

图片

在网络上处理图片非常像一门艺术!这里所说的艺术并不是指你一般应该很有艺术感才能制作出漂亮的图片。我的意思是,实际上管理和处理图片文件本身就是一个艺术过程。对于有志于拥有一个令人愉悦且富有意义的视觉环境的网站所有者来说,有很多工作要做。这是因为网络是唯一一个最依赖视觉图像来影响用户的环境,因为目前互联网只针对两种感官——视觉和听觉。

为了有自由按照网站需求操作图片,你真的需要使用一个功能强大的图片编辑器。Photoshop 或 Paint Shop Pro 是好的图片编辑环境的例子,但任何允许你以多种不同格式保存文件并提供调整大小功能的软件都应该是足够的。当然,如果你必须自己拍摄数码照片,那么你需要确保照片尽可能统一,背景不会分散对主题的注意力——将图片编辑成完全去除背景可能最好。

在处理图片时,有几个需要注意的领域,所有这些都需要仔细检查,如果你希望产生一个整合且令人愉悦的视觉环境(有趣的是,其中一些并不直接关系到你的客户实际看到的内容):

  • 图片最大的问题之一是它们占用的内存比文本或代码多得多。因此,你需要有一个有效的方法来处理你网站上需要的大图片——简单地将大图片压缩成缩略图会减慢一切,因为服务器仍然需要将整个大文件上传到用户的机器上。

  • 人们处理图片时常见的错误之一是在处理过程中没有尽早工作,以使图片尽可能统一大小和类型。如果你的所有图片都是同一尺寸和相同维度,那么你将比大多数人更容易。事实上,这应该是你在做任何涉及网站的事情之前的目标——确保你的图片都是统一的。

  • 从众多可用的图片中选择你真正想要的图片类型也可能是一个问题,因为某些图片类型占用的空间比其他类型多,而且某些类型可能在浏览器中无法正确显示。总的来说,实际上只有三种图片类型最常用——GIF、PNG 和 JPG。

  • 图片的预期用途在决定如何创建、大小和格式化文件时也是一个重要因素。例如,图标和标志应该真正保存为 PNG 或 GIF 文件,而照片、大图片或复杂图片应该保存为 JPG 格式。

列表中提到了三种类型的图片文件。让我们在这里快速看一下。

GIF,或称图形交换格式,以其压缩能力和能够存储和显示多个图像而闻名。GIF 的主要缺点是图像只能显示最多 256 种不同的颜色。对于摄影质量的图像来说,这是一个重大的障碍。然而,您应该使用 GIF:

  • 带有透明背景的图像

  • 动画图形

  • 需要不超过 256 色的较小、较简单的图像

PNG,或称可移植网络图形,实际上被设计为 GIF 文件的替代品。一般来说,它可以实现更大的文件压缩,提供更广泛的颜色深度,以及其他更多功能。PNG 文件与 GIF 文件不同,不支持动画。您可以使用 PNG 文件来替代 GIF 文件用于任何其他用途,除了动画。

顺便说一下,还有一种 MNG 格式,它允许动画——您可能想将其作为动画 GIF 的替代品进行检查。

JPG,或称 JPEG(联合图像专家小组),在展示逼真图像时应使用。JPG 可以在保持整体摄影质量的同时压缩大型图像。JPG 文件可以使用任意数量的颜色,因此对于需要大量颜色的图像来说,这是一个非常方便的格式。JPG 应用于:

  • 照片

  • 较大、复杂的图像,需要超过 256 色才能正确显示

这就涵盖了您网站界面开发规划阶段的大部分内容。在我们开始深入探讨主题之前,主题负责您网站的外观和感觉的几乎所有方面,我们需要看看 Drupal 如何将各种网络技术结合起来,为您的网站提供界面。

Drupal 界面如何工作

了解创建吸引人的网站背后的理论是一回事;在 Drupal 网站的环境中应用这种知识则是另一回事。正因为如此,我们花些时间来确切了解所有这些是如何联系在一起的是非常重要的。您已经看到 HTML 和 PHP 可以并且确实构成了网站界面的一部分,但许多人可能已经注意到在管理菜单项下的主题链接,并想知道那是什么。

此外,一些人可能还在想,主题引擎究竟是什么,以及主题和主题引擎如何与您的 Drupal 网站相关。以下两个定义应该能澄清一些问题:

  • 主题:一个文件,或一组 PHP 文件,用于定义和控制 Drupal 网页的布局。这些页面的外观和感觉反过来由CSS(层叠样式表)文件控制,这些文件也由主题提供。各种标准图像也可能包含在主题中,供网站使用。

  • 主题引擎:提供创建您自己独特主题的功能,这反过来又为您提供了对 Drupal 网站所有方面的良好控制,从页面中包含哪些功能,到如何呈现单个页面元素。

使用主题引擎需要一些编程知识,因为主题是使用代码构建的。修改主题则相对容易,一旦找到了合适的基主题,创建你自己的独特网站就只需要相应地修改主题。以下图表应该能帮助你理解所有组件是如何协同工作的,并将本章的主题内容置于上下文中:

Drupal 界面工作原理

这个图表显示了一种倒置的水瀑布,图表中每一层之间的箭头代表了对上一层的一种贡献。换句话说,我们可以将 PHP、HTML 和 CSS 视为提供基础技术,这些技术为主题引擎和主题提供了向浏览器提供 HTML 的基座。一旦主题向浏览器提供了 HTML,浏览器就会将其渲染到屏幕上供用户查看。

在这里有几个需要注意的事项。首先,并非所有主题引擎都是基于纯 PHP 的。例如,Drupal 中有一个 Smarty 主题引擎,供熟悉 Smarty 模板的人使用。其次,市面上有各种各样的浏览器,而且它们并不完全相同。这意味着一个在某个浏览器上渲染得很好的页面,在另一个浏览器上可能看起来很糟糕,甚至无法正常工作。因此,你应该使用几个不同的浏览器来测试你的网站!

Drupal 帮助站点关于浏览器的说明如下:

建议你使用带有开发者工具栏和查看格式化源代码扩展的 Firefox 浏览器。

如果你希望使用除 Internet Explorer 以外的浏览器,可以在www.mozilla.com/firefox/获取 Firefox 浏览器的副本。

现在,就我们当前的情况而言,我们将限制自己选择一个基主题,并将其修改以提供网站的界面。这意味着现在你不需要担心主题引擎的复杂性。我们现在可以继续并直接查看主题了吗? 还不行;注意在之前的图表中有一个包含 CSS 术语的框。这在开发我们的界面方面非常重要,因为我们已经看到了 HTML 和 PHP 的实际应用,所以在继续之前,让我们先了解一下 CSS。

CSS

Drupal 网站中的页面从关联的样式表中获取其样式相关信息,这些样式表存储在网站的基主题中。使用样式表为设计师提供了对网页外观的出色、精细的控制,甚至可以产生一些很好的效果。几乎可以控制网站的所有方面的外观,只需要一点关于字体、颜色和样式表语法的知识。

在我们继续之前,如果你有一个现成的列表,列出你应该使用样式表设置的类型的事情,这将使生活更加容易。以下是最常见的区域(由 HTML 元素定义)的列表,在这些区域中,样式表可以用来确定网站的样式和感觉:

  • 背景

  • 文本

  • 字体

  • 颜色

  • 图片

  • 边框

  • 页边距

  • 填充

  • 列表

除了能够改变所有这些 HTML 方面,你还可以根据是否满足某些条件(如鼠标悬停在指定区域上)应用不同的效果——这将在稍后演示。你还可以为某些 HTML 标签指定属性,然后可以使用这些属性将这些特定标签的样式表样式应用到这些标签上,而不是创建应用范围的变化。例如,如果你有一个设置了class属性的段落样式,如下所示:

<p class="center"></p>

你可以在样式表中明确指定这种类型的段落,例如:

p.center { color: green; }

分析这一行突出了标准样式表代码块的结构,它以以下形式出现:

  • 选择器:在这种情况下 p.center

  • 属性:在这种情况下 color

  • 分隔符:总是 :

  • 值:在这种情况下 green

注意,所有的属性/值对都包含在大括号内,并且每个都以分号结束。这个 CSS 简介非常简短,而且有大量的优秀资源可供参考。如果你想了解更多关于这个(强烈推荐),那么请访问:

现在你已经了解了 Drupal 的界面是如何通过使用 HTML、PHP、CSS 和主题创建的,以及你对样式表的工作原理有了了解,我们准备开始查看…

主题

主题的使用使得 Drupal 在处理网站界面时非常灵活。因为网站的功能在很大程度上与网站的表现是分离的,所以很容易改变外观,而不必担心会影响功能。这显然是一个非常有用的方面,因为它让你可以随意实验,知道如果最坏的情况发生,你可以重置默认设置并从头开始。

你可以将主题视为你网站的模板,你可以对其进行修改以达到你想要的外观和感觉。当然,不同的主题具有非常不同的属性;因此,找到最接近你寻找的主题以减少你需要完成的工作量是很重要的。

因此,我们需要完成的第一项任务是…

选择基础主题

默认情况下,Drupal 附带了一些默认主题,在 Drupal 网站的下载部分还有更多可供选择。

注意

一些主题需要使用主题引擎,在这种情况下,您在尝试使用该主题之前,还需要下载并安装适当的引擎。

查看 Drupal 中主题页面上的现有内容,我们可以看到以下:

选择基础主题

您可能想知道为什么可以启用任意数量的主题,但只能选择一个作为默认主题。这样做的原因是,如果您启用了多个选项,那么这些选项将可供用户选择(假设他们有足够的权限),通过编辑我的账户页面上的编辑选项卡中的主题配置偏好设置,如这里所示:

选择基础主题

在这个例子中,蓝海变色龙马文主题都已启用,其中蓝海被选为默认主题。用户可以自行选择他们希望查看网站的方式。

返回可用的主题列表!启用按钮式主题并将其设置为默认主题,导致之前以标准蓝海主题呈现的网站看起来像这样:

选择基础主题

这与蓝海主题提供的先前外观有相当大的变化;然而,您应该能够注意到通用布局并没有太大变化——仍然有三列,有一个包含网站名称和标志的标题部分,有一个导航部分和几个框,等等。发生变化的是字体、颜色和一些图像——特别是请注意,这个主题的标题部分现在有一个背景图像。

注意

您应该花时间查看默认可用的每个主题,以便了解提供的选项。

这还不是故事的结尾,因为 Drupal 网站还有一大堆主题供我们探索,所以让我们转到drupal.org/project/Themes的主题页面,并选择相关版本选项卡以显示适用于您的 Drupal 安装的主题。请注意,其中一些主题需要您下载主题引擎——Box_grey_smarty贡献就是一个需要 Smarty 主题引擎才能工作的主题的例子。

您已经看到了如何下载和安装其他模块,安装主题的过程也没有不同——只需下载并解压缩所需主题的内容到您的themes文件夹。例如,box_grey主题已被下载,并在我们的主题列表中提供了两个新选项,如这里所示:

选择基础主题

启用box_grey选项并将其设置为默认主题,导致网站看起来像这样:

选择基础主题

现在,您可以选择一系列默认主题,以及一些贡献的主题进行查看。一旦您决定喜欢其中一个,在进入下一阶段之前,您需要处理一些事情。正如您可能预料的,我们可以通过简单地点击主题页面上的配置链接来配置主题,所以让我们来看看这一点。

配置您的主题

点击主题页面顶部的配置标签页会显示全局主题选项,这将影响每个主题,无论使用的是哪个主题——如果您知道您始终希望启用某些功能,这将非常有用(使用配置页面顶部的链接在全局和主题特定设置之间导航也很容易)。

我们在这里将专注于全局设置页面,因为这个页面代表了所有主题配置页面,所以你单独处理每个页面时不会遇到任何问题。记住,你可以通过在特定主题的配置页面工作来覆盖这些设置。

第一部分允许您使用主题提供的默认标志,或者指定您自己的标志路径,或者上传一个新的标志到网站上:

配置您的主题

在演示网站的情况下,我们将使用背景图像来显示标志和名称;因此,这可以取消选中。如果您有网站标志,或者计划拥有一个,那么只需在这里上传它。

Drupal 还为我们提供了指定哪些内容类型需要显示帖子信息的能力。现在,我们已经看到,对于某些类型的页面,我们不需要显示此类信息——例如,关于我们页面应该以原样呈现,而不需要告知用户确切是谁创建了它。

上一个截图中所显示的设置原因在于,识别出博客帖子是由哪个人发布的,以及论坛主题也是如此,这是非常重要的。然而,当涉及到像投票、页面、书籍页面或故事这样的内容时,这样做的重要性就小得多——通常因为这些内容将由网站管理员处理。目前,我已将页面类型作为唯一不提供帖子信息的类型。

请记住,您需要考虑对您的网站有意义的事情,并应用反映您特定需求的设置。例如,识别出哪些书籍页面是由谁贡献的可能是非常重要的,这样作者就可以在需要查询或修改书籍页面内容的情况下被联系(尤其是由于书籍通常是协作努力的结果)。

以下部分允许您指定Logo 图像设置以及将在网站地址栏和任何书签中显示的图标。再次强调,您在这里使用的内容完全取决于您。就我们网站的目的而言,我们不需要创建一个特定的图标,我们还没有要上传的 Logo;因此,我们可以暂时留空。

因此,配置页面的其余部分看起来是这样的:

配置您的主题

如您所猜测的,一切都被留空,因为我们没有指定任何新内容,我们也不想显示默认的 Logo 或图标。

注意

您需要确保在这里设置的任何内容都不会在单个主题的配置页面中意外地被覆盖。

定制您的主题

到目前为止,您所做的任何设置或更改都相当通用。随着我们开始实施一些更激进的修改,这些修改将需要修改样式表以获得正确的结果,事情即将发生变化。在演示网站的情况下,我选择使用box_grey主题,因为它最接近我们设想的外观,并且具有适合学习目的的功能。

下面是从他们的readme文件中关于box_grey的一些信息:

box_旨在对 CSS 定位不熟练的人相对容易修改。它不是完全使用 CSS 进行布局,而是一种所谓的混合布局——它使用 CSS 与非常简单的表格相结合

这是一个标准的三个列布局,使用表格来表示中央三个列,表格上方有页眉,下方有页脚。这减少了可访问性并增加了一点点代码膨胀,但具有某些优点:

  • 如果用户插入宽内容,内容列不会重叠

  • 内容在模板(page.tpl.php)中的顺序与它在页面上的顺序相同

  • 您可以添加任何尺寸的 Logo 图像;页眉应该扩展以适应

这些功能从学习如何使用样式表的角度来看是有用的,这不仅将为您提供一种有效的方法来定制您网站的外观,而且还可以为您提供一个平台,当您准备好时,可以在其他主题上尝试一些更高级的定制。

注意

如果您还没有找到,现在就是时候找到一个相当好的代码编辑器了,因为您将从此处开始查看各种代码文件。

导航到您的 Drupal 安装中的themes文件夹,并复制box_grey文件夹,将其命名为box_grey_dev。这使我们能够在不危及原始文件的情况下对主题的开发版本进行工作。返回到 Drupal 的管理部分中的主题,启用新的box_grey_dev主题,将其设置为默认主题。您这样做非常重要,这样您在检查您所做的任何更改对网站外观的影响时,就能知道您正在查看正确的主题。

现在,打开box_grey_dev文件夹,您会注意到有几个.tpl.php文件,具体如下:

  • node.tpl.php

  • page.tpl.php

  • image_gallery.tpl.php

这些代码负责其名称对应的布局。例如,page.tpl.php中的代码片段如下所示:

<table id="content">
<tr>
<?php if ($sidebar_left != ""): ?>
<td class="sidebar" id="sidebar-left">
<?php print $sidebar_left ?>
</td>
<?php endif; ?>
<td class="main-content" id="content-<?php print $layout ?>">
<?php if ($title != ""): ?>
<h2 class="content-title"><?php print $title ?></h2>
<?php endif; ?>
<?php if ($tabs != ""): ?>
<?php print $tabs ?>
<?php endif; ?>
<?php if ($mission != ""): ?>
<div id="mission"><?php print $mission ?></div>
<?php endif; ?>
<?php if ($help != ""): ?>
<p id="help"><?php print $help ?></p>
<?php endif; ?>
<?php if ($messages != ""): ?>
<div id="message"><?php print $messages ?></div>
<?php endif; ?>
<!-- start main content -->
<?php print($content) ?>
<!-- end main content -->
</td><!-- mainContent -->
<?php if ($sidebar_right != ""): ?>
<td class="sidebar" id="sidebar-right">
<?php print $sidebar_right ?>
</td>
<?php endif; ?>
</tr>
</table>

如您所见,它使用 HTML 创建一个表格,定义了每个页面的内容。它使用一系列 PHP if语句来检查是否显示诸如左侧边栏或使命宣言等内容。PHP 代码嵌入在具有某些属性的 HTML 标签中——例如id="mission"id="message"。不用担心这些 PHP 变量是如何填充的;我们不想改变网站的功能方式,我们只是查看它的布局方式。

但为什么他们要为 HTML 页面不同部分设置类和 id 属性呢? 这就是 CSS 发挥作用的时刻。我们已经知道我们想要为我们的网站创建一个一致的外观。这意味着每种相关内容都应该有相同的外观和感觉——换句话说,每个页面的内容都应该以相似的方式呈现。在这种情况下,我们可以将内容的一个classid分类为某种类型,然后,使用该属性标签,指定它应在样式表中如何布局。

您应该要求证明,现在它就在这里…

box_grey_dev主题中打开style.css文件,并搜索以下代码片段:

body {
color: #000;
background: #fff;
font-family: Verdana, Helvetica, Arial, Lucida, sans-serif;
font-size: 84%;
padding: 0;
margin: 0;
}

将其更改为:

body {
color: #000;
background: #8E6C63;
font-family: Verdana, Helvetica, Arial, Lucida, sans-serif;
font-size: 84%;
padding: 0;
margin: 0;
}

保存这些更改,并在浏览器中刷新您的 Drupal 网站视图。您现在应该会发现您页面的内容已经改变,您的页面看起来可能如下所示:

自定义您的主题

在样式表中仅对body标签进行单个更改,就改变了整个网站每个页面的背景颜色。这是样式表的一个非常强大且有用的特性,这也是为什么现在每个人都这么喜欢使用它们的原因。您可以将其改回原始设置,或者保持不变——目前这没有区别,因为一旦您为网站选择了颜色方案,它无疑会发生变化。

现在您已经知道如何实施更改并查看这些更改对您网站的影响,您就可以继续修改样式表,以反映您希望网站的外观。在接下来的章节中,我们将讨论几种不同的修改类型,而不会逐个详述——相信我,与网页相关联的特性有很多!一旦您掌握了在一个区域进行更改的方法,将其应用到其他地方就很容易了,因此您应该会发现这里的覆盖范围足以让您有信心开始操作。

对于演示网站来说,第一个任务之一是创建和上传一个将作为网站页眉部分的标志和标题的图片。

图片

图片和背景图片可能很难处理,因为它们通常具有固定的宽度,而网页则可以调整大小。如果图片停止在页面大小之前或位于错误的位置,看起来会很糟糕,因此我们需要找出如何使我们的图片融入网站,这样在不同屏幕上工作的观众就不会看到不整洁的图片。

在演示网站的情况下,我想要一个粗糙而相当生动的自然场景,还有什么比通过非洲灌木丛展示的日落更好的选择呢(注意,网站的名称/标志实际上是这张图片的一部分,这就是为什么我们放弃了标准的网站名称和标志):

图片

然而,为了在网站上展示这个,我们需要对样式表做一些工作。此外,我们希望它紧挨着页面的左上角展示,因此这实际上将成为我们网站的标志图片。将此作为网站标志添加是一个简单的过程,只需在主题的配置页面上传它,如下所示:

图片

并确保为这个特定的主题启用了标志选项。由于你有文件系统的访问权限,你也可以直接将图片复制到files文件夹中,然后从位于上传标志图片框直接上方的自定义标志路径文本框中引用它:

图片

你也可以简单地保存新的标志图片覆盖旧的原始图片,它也会正常显示。

如果你发现你在查看这张图片时遇到问题,那么最可能的原因是你的管理员菜单中的设置部分的文件系统设置有问题。检查它们以确保你将文件保存到正确的位置,并且你正在尝试从正确的位置访问它们。

完成这些后,我们现在可以查看网站,看看这产生了什么效果:

图片

哎呀!目前看起来不太好,因为如果你仔细看,新的图片向右偏移了(尽管在截图中这可能不是很明显,向下偏移也是如此)。为了纠正这个问题,我们需要查看偏移的原因。为此,我们需要找出负责显示这个页面区域的代码。

page.tpl.php文件的顶部附近查看,我们看到以下内容:

<div id="header">
<?php if ($search_box): ?>
<form action="<?php print $search_url ?>" method="post">
<div id="search">
<input class="form-text" type="text" size="15" value="" name="edit[keys]" /><input class="form-submit" type="submit" value="<?php print $search_button_text ?>" />
</div>
</form>
<?php endif; ?>

<?php if ($logo) : ?>
<a href="<?php print url() ?>" title="Index Page"><img src="img/<?php print($logo) ?>" alt="Logo" /></a>
<?php endif; ?>

这段代码片段底部高亮的代码负责显示网站的标志(取决于$logo)。正如你所见,这个部分使用header作为<div>标签的id属性,因此我们应该能够通过查看样式表来找出发生了什么。果然,我们找到了以下两个与标题相关的标签,它们影响了我们图片的位置:

#header {
position: relative;
padding: 1em 0 0 0;
margin: 0;
}
#header img {
margin: 0 0.75em 0 1em;
float: left;
}

这两个都可以修改,以移除导致不希望偏移的填充和边距,如下所示:

#header {
position: relative;
padding: 0 0 0 0;
margin: 0;
}
#header img {
margin: 0 0.75em 0 0;
float: left;
}

保存这些更改后,你会发现图像显示在期望的位置。显然,你可以根据需要添加填充或更改与图像相关的边距。

在这一点上认识到,这种变化可能不仅限于你打算改变的区域。可能发生的情况是,为了纠正一个区域而进行的改变实际上伤害了另一个区域——在这种情况下,如果我们使用了任何填充,那么填充的丢失可能会使标题的其他区域的图像看起来很糟糕。如何解决这个问题? 你已经知道,我们可以在页面上的某些标签上添加某些属性。为了解决这个问题,你会在要更改的区域添加自己的自定义标签,并从样式表中引用它,给它赋予你需要的属性。

当然,你可能也想在你的网站上添加背景图像。如果你确实打算使用背景图像,确保它们不会影响网站的可用性。不要以任何方式分散或阻碍用户查看内容。如果你确定你的背景图像不会以任何方式造成损害,那么使用 background 属性是前进的方向。

例如,我按照以下方式修改了样式表中的 body 块:

body {
color: #000;
font-family: Verdana, Helvetica, Arial, Lucida, sans-serif;
font-size: 84%;
padding: 0;
margin: 0;
background: url(http://localhost/drupal/files/block_background.png) no-repeat top;
}

从这个例子中你可以看出,background 属性实际上可以做很多不仅仅是指定要使用的颜色——我们目前甚至没有指定背景颜色,因为我们很快就会处理颜色。在这种情况下,它还设置了一个背景图像的位置。它强制浏览器不要重复图像(我们不希望背景中重复的图像图案使网站显得杂乱),最后告诉浏览器在主体区域的顶部渲染图像。假设你实际上创建了一个你想要使用的图像(在这种情况下,图像名为 block_background.png)并确保它很小,你最终会得到如下所示的结果:

Images

如你 hopefully 能告诉的,这个背景图像相当不显眼,不会使阅读任何内容变得特别困难,尽管很明显,它还不是背景的颜色。当然,你不仅限于将背景图像添加到网站的正文部分——你还可以在其他地方添加它们。只需首先检查哪些 HTML 标签支持 backgroundbackground-image 选项。

在我们继续查看颜色之前,重要的是要意识到这里有一个不幸的问题。你能发现吗?想想当这些更改部署到你的实时网站时会发生什么。那个域的 URL 是什么?它肯定不是http://localhost/drupal;所以当你的样式表开始搜索背景图片,寻找http://localhost/drupal/files/ block_background.png时,它将会失败。

注意

考虑将所有主题相关的图片添加到实际的theme文件夹中,而不仅仅是上传到标准的files文件夹。

让我们在box_grey_dev下创建一个images文件夹来试一试。将你的背景图片插入这个文件夹,然后将绝对 URL http://localhost/drupal/files/block_background.png更改为相对 URL images/block_background.png,并确认你得到了预期的结果。

现在,当部署你的网站时,你不会遇到丢失图片的问题,因为相对 URL 路径被保留——改变的是绝对路径。

颜色

在放置了新的图片之后,你可能已经注意到它们与网站的其他部分并不很好地搭配,因为它们目前默认是白色的。为了纠正这个问题,我们将把网站body标签的背景颜色更改为以下颜色:

body {
color: #000;
background: #BEBEBE url(images/block_background.png) no-repeat top;
font-family: Verdana, Helvetica, Arial, Lucida, sans-serif;
font-size: 84%;
padding: 0;
margin: 0;
}

通过这次修改,网站看起来好一些了。背景图片无缝集成,页眉图片现在逐渐过渡到正确的颜色,这样当用户扩大浏览器宽度时,图片和页面其他部分之间会有自然的过渡。

然而,随着背景颜色的改变,需要对其他颜色进行大量修改,尤其是用于超链接的颜色。当然,甚至没有必要改变背景颜色!我本可以将页眉图片与默认颜色混合,或者使背景图片的背景透明,但让我们继续进行一些修改,以了解可以做什么。

现在,你可以根据喜好对网站的颜色进行多少或多少的更改。你已经看到,改变像backgroundcolor这样的属性的属性颜色,只是将新的颜色代码插入到正确的位置;现在我们将列出一些更有趣的更改,如下所示。

超链接:

a, a:link { color: #3A3730; }
a:visited { color: #111111; }
a:hover, a:focus { color: #888888; }
a:active { color: #444444; }
.sidebar .block a:hover { color: #444444; }
#primary a:hover { color: #777; }

侧边栏:

.sidebar .block {
background: #E5E5E5;
border: solid 1px #999;
margin: 0 5px 5px 5px;
padding: 0 5px 5px 5px;
}

输入:

input, textarea {
background: #E5E5E5;
color: inherit;
border: 1px solid #777;
}

页脚:

#footer {
color: #666;
background: #E5E5E5;
border-top: solid 1px #777;
padding: 1em 1em 1em 1em;
font-size: 0.9em;
text-align: center;
}

主要:

#primary {
font-size: 1.2em;
border-top: solid 1px #999;

                            border: solid 1px #999;
background: #E5E5E5;    

}

一旦完成所有颜色更改,一个标准页面可能看起来像这样:

颜色

现在的网站易于使用,希望你会同意颜色搭配至少是容易让人接受的。记住在调整自己的设置时,样式表中有很多与颜色相关的设置,所以你真的需要仔细检查你的网站,以确保在链接因为颜色与背景非常相似而消失时不会出现任何令人不快的惊喜。

页面修改

完全有可能页面的实际布局并不符合你的喜好。在这种情况下,当你想要进行更改时,有两个选择。你可以使用样式表进行有限的更改。例如,如果你发现侧边栏对于网站来说太窄了,它们可以被扩展(或者如果需要的话,可以缩小)到固定的像素宽度,通过修改以下代码块:

td.sidebar {
vertical-align: top;
padding: 0;
    width: 200px;                            

}

但是,如果你需要对网站进行更彻底的修改怎么办? 假设,例如,你想要在每个页面上添加一个额外的列,以便插入一些广告,希望从网站上产生一些收入。为了做到这一点,我们需要查看page.tpl.php文件,因为这是控制每个页面布局的地方。根据你的冒险精神,你可以在特定时间只显示带有广告的列中添加一些条件 PHP 代码。对我们来说,简单地添加新列就足够了。

顺便说一下,我们将用于演示的广告直接来自亚马逊联盟网站,如果你对使用这种类型的广告感兴趣,确保你查看 Drupal 网站上与亚马逊相关的各种贡献。目前,重要的是看到如何添加列——你可以随时查看贡献或亚马逊联盟。

假设我们想要列出现在页面的最右侧,在右侧边栏之后,这样它就不会以任何明显的方式影响网站的使用。如果是这样的话,我们需要找到代码中添加右侧边栏的位置,并在那里添加新列。在page.tpl.php文件中寻找以下代码片段:

<td class="sidebar" id="sidebar-right">
<?php print $sidebar_right ?>
</td>

如你所见,这负责添加一个包含右侧边栏的表格单元格。简单地在这个单元格之后添加另一个单元格应该就可以了,所以让我们继续尝试。对文件进行以下更改:

<?php if ($sidebar_right != ""): ?>
<td class="sidebar" id="sidebar-right">
<?php print $sidebar_right ?>
</td>
<?php endif; ?>
   <td valign="top" width="120">
<iframe src="img/cm?t=**************&o=1& p=11&l=ez&f=ifr&f=ifr" width="120" height="600" scrolling="no" border="0" frameborder="0" style="border:none;"></iframe>
</td>                             
</tr>
</table>

这里有几个重要的要点需要注意。首先,新的单元格,被<td>标签包围,被放置在 PHP if语句之后,因为我们不希望它受到与右侧边栏相同的条件(它应该简单地显示在每个页面上)。

其次,除了内容在单元格顶部垂直对齐外,单元格的宽度被设置为 120 像素,因为我们从亚马逊的代码中知道广告的宽度始终是 120 像素(这是因为我们选择了特定尺寸的广告)。最后,添加的广告代码由亚马逊提供,如果你希望获得这样的广告,那么在某个阶段你将需要注册亚马逊以获取你的 ID(在之前的代码中用*符号遮挡)。

现在查看网站可以看到,广告正如预期那样显示:

页面修改

当然,你可能在页面上想要实现很多不同的功能,所以花些时间玩弄代码将有助于你以后在需要对网站进行更重大更改时。你甚至可能想在页眉部分添加横幅广告。回想一下,我们通过将网站的标志空间变成整个页眉来稍微作弊。这样做意味着页眉中仍然预留了空间供其他内容使用(即使这是不可见的),作为一个练习,你可能想看看是否可以利用这个空间。

这让我想起要重申……

注意

在多个浏览器上测试你对网站所做的任何更改是极其重要的!

测试你的布局不仅仅是检查所有内容是否在正确的位置。确保 CSS 和 HTML 有效且正确是非常重要的,而为了实现这一点,box_grey中自动提供了资源。只需滚动到页面底部,直到你看到这个:

页面修改

一旦你的网站在互联网上的公共域名上运行,点击这些链接将帮助你确保你的布局代码是有效的。如果报告了任何问题,那么责任在于你确保你的网站尽可能符合要求。不幸的是,如果你尝试从你的开发机器上这样做,你很可能会收到错误消息,因为这些服务只能在公共域名上工作。

摘要

从了解在规划网站外观和感觉时必须考虑的因素,到对代码进行修改,本章为你提供了在 Drupal 界面工作的基础知识。

个性化网站外观最重要的方面之一是了解 Drupal 是如何设置的,以便利用主题的强大功能。正如我们所见,主题提供了一种模板,你可以从中工作以创建自己的独特网站。这为我们节省了大量的时间和精力,因为我们不再需要从头开始工作。我们还简要提到了从主题引擎生成主题的可能性,希望你一旦获得更多经验,将能够自信地更详细地研究这一点。

关于构建您网站界面的问题,经验非常重要。您需要花时间与以下三种主要技术一起工作:HTML、CSS 和 PHP。在本章中,我们在开始修改我们选择的基主题提供的样式表之前,对 CSS 进行了详细的研究。无论您选择什么作为您网站的基础主题,您面临的任务在本质上将与本章中讨论的任务相似,并且您可能会发现 CSS 是您武器库中最强大和最有用的武器之一。

从处理图像和 HTML 中获得的知识,以及应用所讨论的设计考虑因素,将不仅有助于您的 Drupal 网站,而且有助于您最终工作的任何其他基于 Web 的应用程序。对各种不同类型设计的欣赏,以及必须与图像和代码一起工作,将使您在未来能够创建更具雄心的图形用户界面。

第九章. 高级功能和修改

我们将首先查看一些模块的集合,这些模块展示了 Drupal 中一些更高级或有趣的功能,以便给你机会给你的网站添加一些特别的东西。无论是新类型的内容、一种从流量中赚取收入的广告策略,还是提供良好、动态内容的方式,你都应该在这里找到一些可以增加网站价值的东西。

然而,如果你需要的功能在默认发行版或任何模块中都没有提供,你并不完全处于不利地位。可能性是社区中的其他人之前已经不得不做类似的事情,你应该在论坛上得到一些有用的回应,解释至少你需要的部分。如果你在某个时候真的创造出了极其出色的事物,请通过与他人分享你的工作来回馈社区。

话虽如此,能够根据自己的需求对网站进行修改通常是很重要的。因此,我们将探讨一些有趣的装饰性代码,这些代码可以在互联网上免费获取。通过整合 JavaScript 和其他小型、实用的代码单元(通常称为小工具),你可以在不首先学习所有编程知识的情况下,完美地提升你的网站。

那么,就新模块而言,我们将查看以下内容:

  • Flexinode

  • 广告联盟

第一个模块专门处理内容,而另一个模块则允许你将你的网站与另一个在线业务集成,即谷歌——希望可以赚一点钱。到本章结束时,你将成为使用稍微复杂一些的贡献的专家。

我们还将讨论一些更高级的界面修改。能够用你的网站做一些不同寻常的事情总是很有趣的,并且使用主题文件、HTML、PHP 和 CSS 进行工作,对于整个网络来说都是很好的训练,而不仅仅是 Drupal。这里的高级网站修改部分可能会给你一些关于你自己的网站的想法,同时也会给你一个关于实现它们的涉及范围的了解。

在我们开始之前,还有一件最后的事情需要记住,那就是你必须,必须,必须定期(最好是每次成功添加新功能时)备份整个网站,包括数据库。此外,在你开始处理它们之前,也应该备份你正在工作的每一页。关于备份的话题在接下来的运行你的网站章节中进行了讨论,我提到这一点是为了以防你觉得现在是时候在你开始捣鼓之前备份你现在拥有的内容了。

Flexinode

在某个时候,你可能会发现现有的内容类型根本不适合你想要提供的内容类型。如果是这种情况,那么Flexinode贡献可能正是你所需要的。正如模块描述所说:

Flexinode 是一个模块,允许非程序员在 Drupal 中创建新的节点类型(灵活的内容类型),当他们的需求不是很复杂时。用户可以为他们的内容类型定义节点编辑表单中的字段,并且可以选择以模块展示的方式查看节点,或者修改他们主题中的展示方式。

在演示站点的例子中,假设我们想要建立一个濒危动物的统计数据页面的数据库。在这种情况下,我们可以费心构建一个粗糙的 HTML 模板,并使用页面内容类型,将相关数据插入到表格的各个单元格中。然而,这将是一个痛苦的过程,因为如果有多个人发布这类信息,那么每个人都需要学习如何使用这个 HTML 模板。让我们看看 Flexinode 贡献如何在这里提供帮助。

下载和安装 Flexinode

现在这个过程对你来说应该很熟悉了;所以我们不会花太多时间仔细研究它。

注意

在撰写本文时,Flexinode 仍在为 4.7 版本兼容性进行升级——如果你打算在你的实际网站上使用它,请务必小心并确保获得一个合适且稳定的版本。

简单地访问 Drupal 网站,下载 Flexinode 模块的正确版本。将文件提取到你的 Drupal 安装中的modules目录,然后使用以下类似命令执行.mysql脚本(请记住修改文件路径以适应你的系统):

$ mysql udrupal p drupal < C:\apache2triad\htdocs\drupal\modules\flexinode\flexinode.mysql

当你登录时,系统会提示你输入密码,你可以通过登录到mysql命令行客户端并查找以下截图所示的新 Flexinode 表来确保相关表已被添加:

下载和安装 Flexinode

注意现在在drupal数据库中现在有三个flexinode_表。如果你不喜欢使用命令行,请记住你可以使用 phpMyAdmin 提供的可视化界面。

很有趣,这个贡献附带了一系列贡献!我的意思是,Flexinode 有一些默认未启用的附加功能。查看你的文件系统中的提取文件夹flexinode(位于modules目录下)。你会注意到有一个contrib文件夹,它包含一大堆.inc文件。

这些.inc文件中的每一个都负责提供与其名称相对应的功能。例如,field_textarea.inc提供了将文本区域包含到你的内容类型中的代码,等等。你也会注意到有许多 readme 文件可用,以帮助阐明相应的.inc文件的功能。例如,README.colorpicker.txt文件中有以下说明:

我希望这将有助于授予用户对其网站样式的控制权。我可以想象一个 flexinode,其中包含几个颜色选择器、选择框和复选框,可以用来覆盖特定用户的主题默认样式。

确保您阅读每个打算启用的.inc文件的 readme 文件,因为您可能需要先移动文件甚至安装其他模块。准备好后,转到浏览器中的管理下的模块部分,在点击保存配置之前启用 Flexinode 模块。

创建自定义内容类型

管理部分下,导航到内容,您会注意到页面上显示了几个额外的与内容相关的标签页,允许我们指定和操作我们的新内容类型。点击添加内容类型标签页将显示一个类似于这样的页面:

创建自定义内容类型

一旦提交,系统将自动带您进入内容类型页面,在那里您可以开始使用这里所示的新创建的类型:

创建自定义内容类型

从这个点开始,您可以点击内容类型部分右上角提供的两个链接中的任何一个(在这个例子中,该部分标题为动物统计数据)。第一个链接编辑内容类型允许您更改您在创建内容类型时提供的任何信息——例如,您可能希望修改名称、描述或帮助文本。第二个选项允许您添加一些提交指南并配置如这里所示的标准工作流选项:

创建自定义内容类型

这些标准选项已经在之前的章节中进行了详细讨论,您真的需要根据您打算如何使用此内容类型来做出决定。就我们的目的而言,已启用文件附件(尽管这在屏幕截图中不可见),以便为任何声明提供证据。评论也被允许,以便人们能够协作确保事实正确且最新。

在处理完这两个选项之后,Flexinode 模块真正有趣和强大的部分就发挥作用了。字段列表为我们提供了指定多种不同类型输入的选项,这些输入随后被捆绑到整体内容类型中。现在,一开始这可能有点令人困惑,因为您需要记住,您是在指定制作内容所需的内容,而不是实际内容本身。

因此,在您开始在展示中添加不同的字段之前,仔细思考一下您希望您的特殊内容类型执行什么操作以及它应该看起来如何。一旦您对您要创建的内容有了清晰的想法,接下来进行构建就会容易得多。

添加结构

我们的动物统计数据页面应该是信息丰富且有趣的,为感兴趣的人提供全面且连贯的知识体系,有助于在读者的心中固定动物的形象、其概况及其困境。如果考虑这类页面可能需要包含的元素,以下内容可能适合:

  • 简要介绍该动物

  • 该动物的图片

  • 对其当前状态的总结

  • 该动物栖息地的地图

  • 联系信息以及/或更多资源的链接

考虑到这一点,我们可以转向字段选择器,看看它提供了什么。由于我们希望在页面上首先展示的是一段文字,因此查找一个可以添加到页面顶部的文本区域是有意义的。在内容类型页面显示的下拉列表中选择此选项会弹出以下表单:

添加结构

在这里,文本区域被设置为必填字段,因为任何想要添加动物统计数据页面的用户首先必须对动物有所描述——这是一个合理的假设!将此字段设为必填字段的优势在于,现在选择在摘要中显示(因为我们知道总会有一些简介文本)是个好主意。这意味着每当有人浏览动物统计数据页面时,他们都可以阅读摘要中的简介段落。

接下来,将9的权重分配给此字段,因为我们知道这个字段很可能始终显示在页面的顶部。同样,您可以根据页面的格式要求简单地挑选和选择其余字段。每个字段都有自己的考虑因素,您需要根据内容页的使用方式来设置。一如既往,如果事情没有按预期进行,很容易回来修改。

一旦所有字段都正确选择并设置到页面的正确部分,内容制作者就可以像使用任何其他节点一样使用该页面。就是这样!剩下要做的就是确保内容按预期工作,并且正确地履行其预期角色。由于我们已经讨论了如何使用其他内容类型,我们在这里不再进一步讨论。

AdSense

一旦您的网站上线并运行,如果希望有相当多的人访问,尝试通过广告赚取一些额外收入可能是个不错的选择。谷歌提供了AdSense广告方案,您只需将他们的代码片段粘贴到您的页面上即可添加可定制的广告块。您需要做的就是决定尺寸和颜色,以便与您的网站最佳融合,其余的由谷歌处理。

以这种方式操作虽然确实简单,但可能无法给您提供对广告的控制权,因此 Drupal 提供了一个AdSense模块来帮助。本节将探讨 AdSense 模块的工作原理,因为它提供了更多控制广告类型和显示时间的功能。

在我们开始之前,重要的是您需要在谷歌注册以获取账户和 ID,这些将被用于跟踪您的网站通过广告发送的流量。您可以直接访问 AdSense 网站:www.google.com/adsense/。只需点击突出显示的点击此处申请按钮并按照指示操作。或者,您可以通过此页面上显示的推荐链接支持 AdSense 模块的开发者:baheyeldin.com/click/476/0

安装和配置 AdSense

AdSense 模块的安装过程非常简单,您不需要修改数据库或任何其他内容,只需将下载的文件复制到您的modules文件夹中。完成此操作后,您可以在管理链接下的模块部分启用该模块。

保存新模块的配置后,请转到设置并查找位于设置链接下方的新的adsense链接:

安装和配置 AdSense

点击此处将弹出新的adsense配置页面,该页面还提供了一个链接到admin/help/adsense上的大量配置信息。您必须阅读与每个选项相关的说明,因为它们提供了有关可用广告类型、它们的尺寸以及模块如何实际显示广告的有用信息。

我们现在可以继续配置我们的广告,但请注意,一旦完成,我们仍需要手动将它们添加到网站上(在下一节中讨论)。实际的设置从以下开始:

安装和配置 AdSense

获得您的客户端 ID 后,您只需在此处输入它,通过您网站上的广告产生的任何流量都将为提供该 ID 的所有者(即您)带来收入。下一节允许您决定哪些页面应该能够显示广告,哪些不应该:

安装和配置 AdSense

如您所见,您可以选择是否列出您可以在其上显示广告的所有页面,或者列出您不能在其上显示广告的所有页面。根据您网站的需要,您将需要选择其中之一,然后在您选择下方文本区域中添加适当的页面。

对于演示网站,我们很高兴在所有页面上展示广告,因此文本区域留空,有两个原因。一是网站上没有不适宜放置广告的部分,二是管理员根本看不到广告,所以我们不需要指定我们不想在管理页面上看到它们。

但是,我们能够展示的广告类型有哪些呢? 好吧,以下表格显示了您可用的各种选项:

广告类型 尺寸
广告链接 4 链接 120x90 120x90
垂直横幅 120x240
摩天大楼 120x600
按钮广告 125x125
半横幅 234x60
广告链接 4 链接 160x90 160x90
宽屏摩天大楼 160x600
广告链接 4 链接 180x90 180x90
大型矩形 336x280
横幅广告链接 4 链接 468x15
横幅 468x60
宽横幅广告链接 4 链接 728x15
横幅广告 728x90

为什么有这么多不同类型的广告呢? 你可能会问。原因通常是在网页上适合广告的空间有限。例如,你可能会发现网站左侧列有一些空间,在这种情况下,你需要一个长条形的广告。当然,你也可能想在页面底部展示广告,这时你想要一个长横幅广告。

你可能同时需要这两种类型的广告,在这种情况下,使用分组来区分不同类型的广告就很重要了。根据广告在页面上的位置,你可能需要指定不同的颜色,甚至完全不同类型的广告——所有这些都可以通过使用分组来处理。

广告类型和颜色部分下的一个分组设置示例如下:

安装和配置 AdSense

这里选择的颜色使得展示的广告与网站融为一体,看起来像是页面布局的自然部分。根据你放置广告的位置,你可能需要调整颜色设置,以确保一切看起来整洁有序。

你可以同时设置最多三个分组,所以不要觉得只能使用一个。你可能会决定在一个区域展示仅包含图片的广告,而在另一个区域展示文本广告——在这种情况下,你必须使用不同的分组。

以下选项涉及自定义频道,你需要在你的Google AdSense账户中了解它们才能使用。网站对此有这样的说明:

自定义频道允许你根据指定的标准跟踪性能。通过将特定频道的广告代码粘贴到你的页面上,你可以跟踪一系列 URL 上的各种指标。使用自定义频道来跟踪不同广告格式的性能,例如,或者比较不同页面主题之间的差异。

这需要您自己研究,因为这是一个与谷歌相关的问题,而不是 Drupal 的问题。一旦您创建了一些频道,在广告设置页面自定义频道部分实现它们就很简单了。

收入分成选项是一个非常有用的工具,因为它允许您将 Google Ads 产生的收入的一部分分配给包含广告的页面的作者。换句话说,您现在可以使用广告收入作为鼓励博客作者写博客、故事作者写故事等方式,因为他们现在有了一个利益,那就是尽可能使他们的内容流行,以便尽可能多的流量流过他们的帖子。

不幸的是,如果您决定使用收入分成,那么您需要回到 Drupal 网站下载用户推荐模块的适当版本,因为这是为了使 AdSense 模块的功能正确工作所必需的。您应该会发现安装模块很容易;必须运行一个 MySQL 脚本,但请记住,我们在前面的章节中已经这样做过了。

一旦安装并启用了用户推荐,您需要在管理下的访问控制部分设置可以使用推荐的角色。然后您必须在设置下的配置文件页面创建一个新的配置文件字段,以便用户可以在他们的我的账户部分输入他们的 Google AdSense 客户端 ID。为了做到这一点,您首先需要启用配置文件模块(它是核心分发的一部分,因此不需要下载)。

在这种情况下,您应该选择一个单行文本字段,并像这里所示提供一些信息丰富且合理的选项:

安装和配置 AdSense

现在当用户查看他们的账户信息(或者甚至在注册时,这取决于是否在配置文件部分启用了它),他们有一个文本区域,可以在其中输入他们的 Google AdSense ID:

安装和配置 AdSense

在一切设置正确后,为演示网站设置了以下以收入为导向的设置:

安装和配置 AdSense

在这种情况下,内容的作者将获得从他们内容产生的流量的 30%的收入,但只有博客、页面和故事符合潜在的收入分成内容——那些在调查和书籍页面上工作的人,很遗憾,无法获得。请记住:

注意

任何希望从收入分成中受益的用户都必须有自己的 Google 账户,并在他们可以因收入分成而获得信用之前,需要在他们的配置文件中提供他们的 Google 客户端 ID。

最后,高级选项允许您指定是否禁用广告、显示占位符、限制每页广告的数量,或者启用 AdSense 部分定位,如下所示:

安装和配置 AdSense

总是保持占位符启用是个好主意,因为这允许您在以管理员身份登录时跟踪您的广告位置。每次您更改广告位置时,都需要登录和注销可能会相当耗时,但通过查看占位符,就像这里所示,知道它们的位置是足够简单的:

安装和配置 AdSense

最后一个值得关注的项目,章节定位,是一个如这里定义的谷歌相关功能:

章节定位允许您建议您希望我们强调或降低的文本和 HTML 内容部分,以便在匹配您的网站内容时。通过向我们提供您的建议,您可以协助我们改进您的广告定位。我们建议只有熟悉 HTML 的人尝试实现章节定位。

在我们的情况下,我们不需要做任何事情,因为该模块会自动将谷歌广告定位到节点的标题和正文中。只需启用它,就可以继续前进!

完成配置组和类似操作后,点击保存配置。然后是时候实际利用这些配置选项,通过在网站的页面上物理插入广告来使用它们。

将谷歌广告添加到您的页面

在我们的情况下,我们希望显示一个广告,它位于页面左侧的任何其他块下方。这样做的原因是右侧边栏已经相当满了,而左侧边栏则稀疏,所以这里有空间。虽然这个广告将位于一个块中,但我们也会展示如何直接将广告添加到网站上。

让我们从块开始…

您已经看到了如何创建一个新的块;所以如果您想这样做,请转到链接,并点击添加块标签来打开以下页面:

将谷歌广告添加到您的页面

在这里,我们给块起了一个新的标题,不出所料,是广告(在块列表中显示的描述是谷歌广告)。接下来,我们输入了一些 PHP 代码来在块中显示谷歌广告。如果您想知道我是如何得到这段代码的,它都在之前提供的adsense配置页面上的注释中讨论了。这里要注意的重要事情是adsense_display函数,因为它通过您在adsense配置页面(在上一节中讨论)中设置的设置来控制您的广告外观。

上一张截图展示了该函数的简单用法,但让我们快速详细地看一下,以便您了解在需要稍微复杂一些的功能时它是如何工作的。从文档中,我们可以看到adsense_display函数接受以下三个参数:

  • 格式:这是一个由一个x连接的两个数字的字符串。它可以是从提供的列表中的任何有效组合。如果没有指定,则默认为160x600

  • :这是表示广告类型(文本或图像)和颜色的组。这可以是1, 23。如果没有指定,则默认为1

  • 频道:这是在 AdSense 中配置的广告的定制频道。这是一个可选参数,如果没有指定,则默认为1。如果您没有配置任何频道,则可以省略此参数。

了解这一点,您可以看到在先前的屏幕截图中,我们请求了一个160x600像素的广告,并且该广告应属于组1。最后一个参数是可选的,因为我们不关心自定义频道(这是一个更高级的选项,我们将其留给您在未来您的广告政策变得更加复杂时考虑),所以我们完全省略了它。

需要注意的最后一件事是我们将输入格式设置为PHP 代码,以便 Drupal 能够实现我们为块输入的代码。一旦这个块成功添加到系统中,我们给它一个高权重(因此它会在其他所有内容之后显示)并在左侧边栏中启用,如图所示:

将谷歌广告添加到您的页面

这就是全部内容!结果可以通过注销并查看页面来查看。在我们的情况下,由于我们在配置部分所做的设置以及我们指定的尺寸,我们在左侧边栏中得到了以下块显示:

将谷歌广告添加到您的页面

这看起来相当不错!但我们如何直接将广告添加到页面上呢?很简单!打开page.tpl.php文件,在您想要的位置插入adsense_display函数,如图所示:

<div id="footer">
<?php if ($footer_message) : ?>
<p><?php print $footer_message;?></p>
<?php endif; ?>
<?php
if (module_exist("adsense"))
{
print adsense_display("468x60", 2);
}
?>
Validate <a href="http://validator.w3.org/check/referer">XHTML</a> or <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>.
</div><!-- footer -->
<?php print $closure;?>
</body>
</html>

这段代码创建了一个长而平的横幅,其属性在第二个属性组中配置(您需要确保您已做了适当的设置,或者更改组)。在网站上查看时,我们得到以下广告(在这种情况下,组 2 被配置为显示图像广告):

将谷歌广告添加到您的页面

重要的是要记住,您实际上不需要 AdSense 贡献来在您的网站上显示谷歌广告。实际上,如果您没有使用 PHPTemplate 主题,或者试图在模板的某个区域插入 PHP 代码,并且该区域无法使用它,您可能会遇到问题。如果您遇到问题,您可以查看以下几件事情:

  • 确保您没有以管理员身份登录,因为只有对于此用户,广告占位符才会显示。

  • 检查您页面的源代码以查看adsense_display函数的结果。

  • 检查您是否为您的广告设置了有效的尺寸——请参阅本节标题为安装和配置 AdSense中较早提供的表格。

  • 确保您能够显示所需的广告数量——可能在这方面您有所限制。

列表中的第二点相当重要,因为查看页面源代码可以告诉您很多关于可能出错的信息。为了做到这一点,在 IE 中点击查看,然后点击源代码,或者在 Firefox 中点击Ctrl+U,您应该会看到如下内容(假设一切按计划进行):

<div class="adsense">
<script type="text/javascript"><!--
google_ad_client = "ca-ref-pub-0173529661****";
google_ad_type = "image";
google_ad_channel = "";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_color_border = "E5E5E5";
google_color_bg = "E5E5E5";
google_color_link = "AD857F";
google_color_url = "AD857F";
google_color_text = "AD857F";
//--></script>
<script type="text/javascript"
src="img/show_ads.js">
</script>
</div>

如果出了问题,那么您很可能会从添加到谷歌广告代码中的注释或从源代码中实际呈现的内容中找到问题。

在开发机器上遇到广告问题可能不是世界末日;无论如何,检查论坛以获取答案。然而,在您在您的实时网站上尝试了一切并允许谷歌有足够的时间爬取您的网页之前,不要过于恐慌。在此期间,谷歌可能没有显示广告,因为它不知道您的网站是关于什么的。

将谷歌广告添加到您的内容中

也有一种方法可以直接将广告插入到您的内容中。例如,如果您想在内容中显示广告,您首先需要启用广告联盟过滤器,通过在管理下的输入格式中进行修改,修改现有的输入格式或创建一个新的格式。例如,广告联盟过滤器已在完整 HTML 输入格式中启用,如下所示:

将谷歌广告添加到您的内容中

现在,当添加使用完整 HTML输入格式的内容时,可以添加一个adsense标签,并且完整 HTML选项有一行额外的信息说明如何使用它,如下所示:

将谷歌广告添加到您的内容中

添加包含谷歌广告的页面是一个简单任务。只需将正确的格式、组和通道插入到您的adsense标签中,并将其添加到您帖子中的任何位置:

将谷歌广告添加到您的内容中

adsense标签有特殊的格式,如下所示:

[adsense:format:group:channel]

其中:

  • format 是支持的广告格式之一(例如,468x60

  • group 是该广告所属的数字广告组;决定颜色

  • channel 是数字广告通道

登出后查看此页面会得到以下结果(取决于您为从标签引用的相关组设置的设置):

将谷歌广告添加到您的内容中

flexiblocks一起使用时,也有一种特殊的格式:

[adsense:flexiblock:location]

我们在这里不讨论Flexiblock的使用,因此我们现在不会深入讨论,但作为一个练习,您可能会发现下载并安装 Flexiblock 贡献并尝试它是有价值的。

高级网站修改

与基于 PHP 的应用程序(如 Drupal)一起工作的一个好处是,它们不仅开源,而且你可以将它们与几乎所有你能接触到的其他技术结合起来。有一个庞大的在线编程社区,许多人将他们整洁的小脚本公开提供给像我们这样的人,以便我们可以随意将其包含到我们自己的网站中。并非所有都是免费的,但许多是,而且更多是非常便宜的;因此,总是值得四处看看,看看你能学到什么。

这里有一些你应该考虑查看的网站:

在本节中,我们将查看哪些内容可用,以及哪些可以轻松集成到 Drupal 网站中。你们中许多人可能在这个时候会退缩,因为你们并不热衷于参与核心 PHP 编程。不用担心!这些脚本基本上是自主和完整的,所以我们需要的只是正确位置的一些剪切和粘贴,可能还有一些微调,然后就可以出发了。记住:

注意

添加强大和高级功能,就像在大网站上看到的那样,并不那么困难!

重要的是要意识到,在利用他人的脚本时,你应该始终关注任何和所有的许可问题。你会发现,许多脚本免费提供给非商业用途,但如果你用于商业目的,则需要购买许可证。然而,随着你对脚本工作的信心增强,你应该会发现,通过使用自己的代码或结合免费提供的代码片段,可以构建相当强大的功能。

由于即将进行的修改基于 JavaScript 和 AJAX,因此提醒你,Drupal 4.7 自带通过drupal.js文件对 AJAX 的支持。AJAX 是一个术语,用于描述用于创建响应性和动态网页元素的基于 JavaScript 的应用程序。然而,本章的目标是向您展示如何在不学习任何编码的情况下真正地集成一些很棒的功能。因此,我们不会讨论如何使用drupal.js中提供的 JavaScript 功能,因为这实际上是一个开发者的任务,而不是网站管理员的任务。

如果你感兴趣于创建自己的 AJAX 小部件,请查看 Drupal 网站上提供的在线教程,网址为http://drupal.org/node/42403。这些教程将给你一个很好的想法,在需要自己构建一些小部件的情况下,从哪里以及如何开始。你自行进行的任何与 JavaScript 相关的开发都应该使用 Drupal 的本地 JavaScript 支持。

注意

本章后面所涵盖的内容有点像作弊——我们得到了一些不错的 JavaScript 特效的好处,而不必承担学习如何编码它们的负担。

许多新模块或升级模块已经(并且正在)使用 AJAX。你可能想下载并安装其中的一些,看看使用 Drupal 的原生 JavaScript 支持可以实现哪些效果。当然,Drupal 4.7 的管理界面已经通过引入可折叠页面区域等(例如,在设置页面)进行了 AJAX 化。

无论如何,让我们看看我们将要添加的第一个新功能。

滚动新闻提示器

这是许多试图为用户提供最新信息的网站的一个很好的功能。如果你需要同时展示几条信息,那么一个动态新闻提示器可能正是你所需要的。通过一点工作,你甚至可以将新闻提示器与 RSS 源集成,以展示来自其他网站的最新消息,而无需自己创建任何内容。

我们将保持简单,并在网站的每个页面的顶部创建一个滚动新闻提示器。提示器将显示存储在网站上的 .txt 文件中的信息。虽然从截图上你看不出这些信息正在屏幕上滚动,但最终添加的效果就是这样:

滚动新闻提示器

你应该可以从上面的提示器中显示的各种字体中看出,可以添加 HTML 元素,如链接到各个项目(以粗体显示)。这意味着你可以使用这个提示器添加赞助商的链接,甚至添加图片链接。有很大的改进空间;因此,我们将看看如何让一切运行起来——你使用提示器创建的内容,然后取决于你和你自己的想象力。

获取提示器

第一项任务是当然要找到可行的提示器脚本。在这种情况下,通过在 Google 上简短搜索后,从 mioplanet 网站下载了一个免费的提示器脚本,网址为 [www.mioplanet.com/ rsc/newsticker_javascript.htm](http://www.mioplanet.com/ rsc/newsticker_javascript.htm) 。该页面上提供的使用条件相当简单,你应该在继续之前确保你理解了这些条款。假设你愿意继续,下载名为 webticker_lib.js 的 JavaScript 源代码文件,并将其保存到你目前正在开发的主题文件夹中——在演示网站上,这目前是 box_grey_dev

注意

如果你打算使用几个这样的小部件,最好在你的主题中创建一个 widgets 文件夹,以便保持一切整洁有序,并且易于查找。

接下来,打开 page.tpl.php 文件,并寻找添加股票报价的合适位置。将股票报价添加到网页所需的实际代码在 mioplanet 页面上给出,你可以直接将其复制粘贴到你的网站上。由于我想让股票报价出现在屏幕顶部,我在这里添加了代码:

<?php if (count($primary_links)) : ?>
<ul id="primary">
<?php foreach ($primary_links as $link): ?>
<li><?php print $link?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<DIV ID="TICKER" STYLE="overflow:hidden; width:100%" onmouseover="TICKER_PAUSED=true" onmouseout="TICKER_PAUSED=false">
<? include "ticker.txt"?>
</DIV>
<script src="img/webticker_lib.js" language="javascript"></script>                            
</div>
<table id="content">
<tr>
<?php if ($sidebar_left != ""): ?>
<td class="sidebar" id="sidebar-left">
<?php print $sidebar_left ?>
</td>

如你所见,这把脚本放在了同一 <div> 标签内的头部信息之后,但在包含主要内容以及左右侧边的表格之上。

这个脚本最重要的部分是对 webticker_lib.js 文件的引用。在这个例子中,我添加了文件的相对路径(webticker_lib.js),这样一旦网站部署到主机服务器,这个路径就不需要更改了。

如果你发现你的滚动股票报价根本不滚动,尝试用相对文件路径引用它,例如:/drupal/themes/box_grey_dev/webticker_lib.js。在不太可能的情况下,如果这不起作用,尝试使用完全限定的路径:C:\\apache2triad\\htdocs\\drupal\\themes\\box_grey_dev\\webticker_lib.js。如果这行得通,记得在某处写一个笔记,提醒你在将网站部署到实时主机后适当更改此路径。通常来说,在脚本中包含这样的绝对文件路径是一种不好的做法,正是因为这个原因。

注意

如果你必须输入路径而不是仅仅文件名,在 Windows 系统上,用另一个反斜杠(\)转义反斜杠是一个好主意,以防止特殊字符被错误解释——或者,你也可以使用正斜杠。

最后,请注意,我在第一个添加的 <div> 标签下添加了一个简短的 PHP 片段,用于包含一个名为 ticker.txt 的文件。如果你想在处理额外的代码之前测试股票报价是否正常工作,那么替换:

<? include "ticker.txt"?>

用:

Hi! You should see me scrolling across your page.

在浏览器中查看你的网站。你应该会看到消息在页面上滚动,就像这样:

获取股票报价

如果这行得通,就用 PHP 的 include 语句替换文本消息,然后继续。

创建内容

对于我们谦逊的目的,我们真正需要做的只是将我们刚刚安装在我们网站上的 JavaScript 文件喂给一个要打印到屏幕上的行列表。假设我们将使用一个简单的文本文件来保存我们的数据,我们需要每个单独的项目都在一行中完整显示。如果你想要制作复杂的滚动项目,这可能会有些限制,但就我们演示的目的而言,这已经足够了。你几乎可以在这里添加任何你想要的东西;然而,在发布给公众之前,确保彻底测试一切。

现在创建一个ticker.txt文件,并将其添加到与webticker_lib.js JavaScript 文件相同的文件夹中。在你开始向其中添加信息行之前,请记住,你应该尝试为每个新闻条目创建一个标准格式,这样你创建新元素的工作量就会最小化。在这种情况下,每一行由一个单独的竖线分隔,除了第一个和最后一个元素,它们有两个竖线,以便保持整体的一致性。

以下代码片段显示了演示网站上ticker.txt文件的当前内容。这些是用于滚动新闻条部分第一张截图中的滚动文本的项目:

|| <a href="http://www.mioplanet.com/rsc/newsticker_javascript.htm" target="_blank"><strong>Scrolling News Ticker</strong></a> by <a href="http://www.mioplanet.com" target="_blank"><strong>mioplanet</strong></a> |
| This book was brought to you by <a href="http://www.packtpub.com" target="_blank"><strong>Packt Publishing</strong></a> |
| It was written by <em>David Mercer</em> of <a href="http://www.contechst.com" target="_blank"><strong>Contechst Technical & Editorial Consultancy</strong></a> ||

不幸的是,由于本书页面大小的限制,本应作为单行显示的内容不得不在多行中呈现。然而,你应该明白的是,你可以在条目的开始和结束处添加某种分隔符,在这些分隔符内,你可以添加你喜欢的任何 HTML。你可能甚至想尝试在样式表中添加图像或特殊样式,并从这里引用它。这样,你可以在每个条目中添加一个高亮标题图标或徽标,例如。

你会在本章稍后注意到新闻滚动条得到了一个漂亮的新背景颜色。如何实现这种外观留给你作为练习。提示:遵循主题的相同方法并声明一个新的 <div>

这个脚本目前的主要问题是它要求你手动输入每个条目,这无疑会成为如果你每天要重复做十年之久的痛苦。有几种方法可以解决这个问题:

  • 创建一个脚本从数据库中提取信息。

  • 从 RSS 源获取信息。

  • 只输入不经常变化的内容——例如,赞助商的链接。

  • 让别人为你做这件事。

虽然我们在这里不会继续这个话题;尝试之前列表中的任何一个或多个选项(除了第三个,它默认已覆盖)将是一次很好的经验。记住,你可以使用其他脚本帮助你——无论你在网上找到什么,都可以将其纳入你的脚本中。无论如何,让我们继续下一件事。

动态内容页面

假设你是你新网站的负责人,想要添加一个页面来概述你生活中以及你所在社区的最新和最精彩的内容、事件和动态。在演示网站的情况下,我们将向主菜单添加一个快速选择页面链接,人们可以快速访问,选择网站上最新和最重要的动态——例如,每周更新一次。

现在,有很多模块允许您显示相关帖子块等,但这并不是我们想要的。理想情况下,我们希望展示一个允许用户选择感兴趣主题的项目列表。同时,我们不想让他们不得不从一个节点跳转到另一个节点来查看每页的内容。

我们需要的是一种只重新加载新文章而实际上不改变我们所在页面的方法。再次强调,这可以通过使用已经开发的脚本轻松实现。在这种情况下,我们将使用一个免费可用的 动态 AJAX 内容 脚本,由 DynamicDrive DHTML Scripts 的人士提供,网址为 www.dynamicdrive.com

将应用程序集成到主题中

在这个例子中,我们将使用 DynamicDrive 提供的 JavaScript 文件,并将其直接粘贴到 page.tpl.php 文件中的 <head> 标签之间。您可以在以下地址获取特定的脚本:http://www.dynamicdrive.com/dynamicindex17/ajaxcontent.htm。现在,您是否真正理解脚本中的内容并不重要;然而,我们将拆分代码列表,并快速查看它正在做什么,以便更清晰地理解。

一旦您复制了脚本,将其粘贴到 PHP 文件中,如下所示(我已经为了节省空间而删除了一些实际代码文件):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  lang="<?php print $language ?>" xml:lang="<?php print $language ?>">
<head>
<title><?php print $head_title ?></title>
<meta http-equiv="Content-Style-Type" content="text/css" />
<?php print $head ?>
<?php print $styles ?>
<script type="text/javascript">
/***********************************************
* Dynamic Ajax Content- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
function ajaxpage(url, containerid){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
...
function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}
...
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}
</script>                          
</head>
<body <?php print theme("onload_attribute"); ?>>
<div id="header">
<?php print $search_box ?>
<?php if ($logo) : ?>

从这段代码中,您应该能够了解到一旦脚本被声明,我们使用一个名为 ajaxpage 的函数来创建一个可以加载到我们父网页特定容器中的新页面。这个函数会检查正在使用的浏览器,并尝试确保为调用浏览器创建正确的 page_request 对象,以便实现一些跨浏览器兼容性。

然后,使用 loadpage 函数加载一个新页面,该函数在填充文档容器(ID 为 containerid)之前,对新创建的 page_request 对象进行一些检查。containerid 在即将到来的页面代码中指定,但显然非常重要,因为它决定了新信息将加载到父页面的哪个位置

只需再次强调,您不需要理解这些脚本是如何工作的。它们有点像汽车的引擎——即使不知道它具体是如何工作的,您也可以驾驶它。话虽如此,JavaScript 是一个非常宝贵的工具,随着 AJAX 技术的出现,用于创建响应式网页,学习这些脚本所花费的时间不会白费。

注意

记住,如果您想创建自己的小部件,学习如何利用 Drupal 内置的 JavaScript 支持是很有必要的。

在您的页面上添加了这些函数后,艰苦的工作就完成了!我们现在需要关注的是如何在发布到 快速选择 页面时利用它们。

构建内容页面

构建一个新的动态页面,我们只需要记住几个重要的点。首先,我们需要实际上将我们要添加的页面附加到帖子中;否则,我们将无法将它们添加到页面中。接下来是实际上用containerid标签标记页面的一部分。

实际上,在我们有一些内容可以与之搭配之前,我们不应该开始构建页面。因此,为了这个演示的目的,我们将添加几页有趣的内容。第一页是一点新闻:

<table border="0" cellpadding="5">
<tr>
<td align="center" colspan="2">
<strong>Latest News</strong>
</td>
</tr>
<tr>
<td colspan="2">
The Contechst Wildlife Community was praised for its unswerving
dedication to animal rights in a television interview last night.
<br> The project founder said he thought we did a great job when
asked by the reporter!
</td>
</tr>
<tr>
<td align="center" colspan="2">
<em>Sponsored By</em>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<a href="http://www.packtpub.com" target="_blank">
<img src="img/PacktLogosmall.png" alt="Packt Publishers"></a>
</td>
</tr>
</table>

这个页面以日期和文章类型为前缀——在这种情况下,它在文件系统中被保存为09_02_news.txt。这样做的原因是,当文件附件上传并附加到帖子时,你仍然需要在需要删除时能够清楚地看到哪些材料是最过时的。下一个文件只是一些普通的内容,我们不会在这里列出。

现在,让我们转到创建内容页面,并添加一个名为快速选择的新页面。我们必须做的第一件事是将两个内容文件附加到这篇帖子。一旦完成,确保你取消选择两个的列表选项。如果保留这些文件在列表中,将完全违背页面的目的。接下来,最重要的事情是注意 Drupal 保存的文件名。你可以在以下文件附件部分检查这些文件名:

构建内容页面

从之前的屏幕截图可以看出,两个文件已经被保存为09_02_news.txt09_02_notnews.txtfiles目录中。

在页面主体中,我们需要创建一些链接,这些链接将调用我们之前添加到page.tpl.php文件的ajaxpage脚本函数。以下 HTML 被添加到快速选择页面的正文文本区域:

<table border="0">
<tr>
<td colspan="2" class="body" width="100%">
<strong>Please select a link below to view that article:</strong>
<hr>
</td>
</tr>
<tr>
<td class="body" valign="top">
<br>
<a href="javascript:ajaxpage(‘/drupal/files/09_02_news.txt', ‘contentarea');">Latest News</a>
<a href="javascript:ajaxpage(‘/drupal/files/09_02_notnews.txt', ‘contentarea');">Plain Old Content</a>
</td>
<td id="contentarea" width="70%" align="center"></td>                     
</tr>
</table>

如你所见,我们添加了两个链接,一个标题为最新新闻,另一个标题为普通内容。在链接中,引用了ajaxpage函数,并传递了附加文件的名称以及要显示每个页面内容的页面元素的id。稍低一点,你可以看到我们声明了一个具有id属性设置为contentarea的表格单元格,所以动态内容将在这里显示。

在发布这些内容之前,确保它们被正确发布是很重要的。确保你将输入格式设置为完整 HTML,否则有很大可能这些内容将无法正确显示。由于这将是一个主菜单项,你还需要设置以下内容:

构建内容页面

当你做这些的时候,你可能还应该考虑禁用这个页面的评论功能,除非你特别希望你的主菜单页面可以供讨论。现在将这个页面发布到网站上,会得到以下初始页面:

构建内容页面

现在,当用户实际点击其中一个链接时,魔法就开始了。我们不会移动到新的节点,而是停留在完全相同的页面上,只是您附加到这个帖子的内容文件现在显示如下:

构建内容页面

从顶部链接的较浅颜色中,您可以希望看到它已经被点击,正如承诺的那样,最新新闻文章现在以它全部的辉煌呈现。

我相信您可以为这种类型的页面想出更多新颖的用途——请记住,保持附加文件的大小尽可能小,这样用户就不会点击链接后失去兴趣,等待它显示。如果您想挑战一下,可以编写一个 PHP 脚本,将其他帖子的<body>部分转换为文件,这样您就可以在不手动创建附加内容文件的情况下添加有趣的帖子或文章。

希望您会同意,我们以极少的努力创造了一些非常棒的功能。这就是我们这次能做的全部,但现在您已经知道了如何做到这一点,我将它留在了您能干的手中,以便您想出完成任何重要任务的新颖方法。

摘要

本章重点介绍了您网站的两个截然不同的方面。

第一部分涉及功能,并探索了我们可用的几个更高级的模块。希望您会发现,您现在对模块的使用已经足够了解,可以自信地使用您选择的任何一个。最终,您可能会创建并分享自己的模块,供社区的其他成员使用,但就目前而言,能够通过 AdSense 赚取一些额外的收入,以及创建您自己的自定义内容类型,应该给您提供足够的素材来工作。

本章的第二部分讨论了如何使用互联网上的资源来寻找完整的解决方案,或者甚至是一些可以修改和/或集成到您的网站中以提供一些强大功能的部分代码。这也许已经突出了这样一个事实:即使您不是编程专家,只要进行一些搜索,并对一些重要的基于 Web 的技术有一些基本了解,您也可以为您的网站创建一些强大的功能。

总的来说,您的网站现在应该已经相当完整了,或者,如果您想添加这里没有直接讨论的东西,您应该会发现您有足够的经验去进行任何您想要的更改。获得创建高级网站的信心只是关于花时间熟悉事物,而这本书已经为您提供了一个开始的平台。

下一章将探讨与您新网站相关的管理任务,并且与前面九章相比,与您网站开发的直接关系并不那么紧密。正因为如此,我想趁此机会祝贺您现在完成了您的网站,并向您保证所有艰苦的开发工作都已经完成。

如果你希望尽快让你的网站上线运行,请随意跳过下一章,直接跳转到附录,其中概述了如何正确地将你的新网站部署到其网络上的家。你总是可以在网站上线运行后回到第十章学习如何维护和管理你的网站。

第十章。运行您的网站

到现在为止,新网站的开发工作已经基本完成!你也应该有信心,从开发角度来看,你可以应对网站提出的任何要求,并且能够熟练地与 Drupal 一起工作。然而,就像计算世界中的所有事物一样,仅仅构建某物然后让创造物自行运行是远远不够的。总有工作要做,以确保一切运行顺畅。

通常,你会发现有些工作需要不时进行,这些工作与 Drupal 没有直接关系,但与一般网站工作本质上是相关的。这些任务在性质上可能有很大的不同,但这里讨论的所有任务都将在你网站的某个阶段变得有用,即使你现在不需要它们。

在展示这样一章时,我们不可能希望涵盖 Drupal 可以运行的庞大平台阵列中的每一个细微差别。互联网服务提供商(ISPs)提供的服务包差异很大,可能完全缺乏任何有用的功能,或者装满了所有最新的小工具——大多数 ISPs 在同一个屋檐下提供大量不同的服务包。

因此,我们将查看常用的功能,并在你无法访问相同软件的情况下,清楚地展示你需要执行的任务,以便你仍然可以使用你拥有的软件成功操作。例如,通过使用 Apache2Triad 包,我们已经在开发机器上拥有某些有用的技术,例如 phpMyAdmin。

注意

在选择托管套餐之前(假设您还没有)阅读本章可能会有所帮助,这样您可以了解未来需要的功能类型。

Drupal 还有一些其他与网络相关的活动是固有的,我们应该花时间快速浏览一下。因此,本章将讨论:

  • 制作备份

  • Cron 和计划任务

  • 节流

  • 补丁

  • 网站活动——包括搜索引擎优化和用户维护

拥有本最终章节所提供的信息,你将是一名完全装备的 Drupal 网站管理员。然而,从运营一个真实网站中获得的经验本身应该比这本谦逊的书籍更有价值。希望你能发现整个经历非常有益,并在未来与社区分享你辛苦获得的知识。

我们已经接近终点,所以让我们继续前进。

备份

备份文件系统和数据库有很多原因。正如本书中多次提到的,每次修改代码、添加新模块或升级 Drupal 版本时,都应该备份任何可能受损的内容。听起来做这件事真的很痛苦,因为绝大多数时候,应用程序都没有问题。然而,迟早,由于某种无法理解的原因,如果你不做备份,你 确实 会在这个最痛苦的地方受到打击。

尤其是损坏或破坏数据库,这反过来又导致宝贵数据的丢失,可能会在应用程序的后端造成真正的痛苦!所以,虽然通过简单地复制相关目录或确实复制整个 drupal 文件夹(无论你给它取了什么名字)来备份文件系统相对容易,但学习如何备份数据库至关重要,因为这并不简单——虽然随着练习会变得容易。

在继续之前,制定一个备份文件、文件夹和数据的 策略 非常重要。定期备份整个站点以及更频繁地备份数据库是个好主意。这些备份应该有清晰的标记,以便你知道它们是在何时制作的,这样在发生某种灾难时可以轻松确定使用哪一个。你也可以考虑将这些备份放在主文件系统之外,比如在 CD 上,这样如果发生真正糟糕的事情,你不必依赖托管商的灾难恢复策略;你拥有自己的备份。

在这里,我们将考虑两种备份数据库(或其任何部分)的方法。一种方法是利用 phpMyAdmin,它是 Apache2Triad 包的一部分。让我们从那开始。

phpMyAdmin

phpMyAdmin 是一个特别受欢迎且常见的工具,通过 Web 与 MySQL 进行交互。它不需要我们学习如何使用 MySQL 命令行客户端,phpMyAdmin 为我们提供了一个图形界面,这使得查看和维护数据库表和内容变得容易得多。通过界面执行命令也使得许多常见的数据相关任务变得简单。

可以按照以下步骤使用 phpMyAdmin 创建备份:

  1. 登录 phpMyAdmin 并选择相关的 Drupal 数据库。

  2. 点击页面顶部的 导出 选项卡,并设置选项,如这里所示:phpMyAdmin

    • 在屏幕截图中,选择了所有要备份的表,为了防止我们手动删除损坏的数据库,所有结构复选框都被选中,并提供了一个有用的名称(一旦生成备份文件,它将自动包含数据库名称)——像这样附加日期是个好主意,因为它将帮助你跟踪哪个备份是哪个。
  3. 一旦你对选项满意,点击Go,这将创建一个 SQL 文件(尽管还有其他格式可供选择,如 LaTeX 或 XML),如果需要,你可以从该文件重新创建数据库。

一旦你有了备份文件,只需让 MySQL 运行其内容即可重新创建数据库。为了做到这一点,点击页面顶部的SQL标签,并输入你想要在数据库上运行的.sql文件名,如下所示:

phpMyAdmin

这使得生活相当简单,但并非只有这一种方法。如果你已经习惯了使用命令行,或者只是更喜欢它,那么我们已经看到了如何做到这一点,当我们发出加载原始数据库的命令时:

C:\ mysql -udrupal -p drupal < C:/apache2triad/htdocs/drupal-4.6.4/ database/database.mysql

你只需修改路径和文件名以反映你新的备份文件的详细信息,如下所示:

C:\ mysql -uroot -p drupal < C:/backups/drupal_13_04_06.sql

创建备份的另一种方法是使用命令行中的mysqldump工具。

mysqldump 工具

花些时间使用这个工具可能是值得的,因为它提供了更大的灵活性,以防你将来需要执行任何非同寻常的操作。然而,我必须承认,对于大多数数据库相关任务,phpMyAdmin 的表现都非常出色。如果你无法访问托管网站上的 phpMyAdmin,或者你热衷于了解mysqldump,那么请继续使用它……

要创建一个备份,只需在命令行中输入类似以下的内容:

C:\ mysqldump drupal > drupal_13_04_06.sql

这将在当前目录中创建一个名为drupal_06_11_05.sql的备份文件。然后你可以通过查看文件内容来确保备份成功,文件将包含大量的 SQL 语句。你可以使用多种不同的选项来获取不同类型的备份文件;你可以简单地输入:

C:\ mysqldump help

为了获得可用列表。mysqldump是一个强大且灵活的工具,了解它是如何工作的,如果你打算尝试一些更高级的备份选项,这将对你长期有益。

再次强调,定期备份数据库是一个好的做法,无论你是否需要这样做来升级,因为这样做可以在数据库或其信息丢失的情况下防止数据完全丢失。

Cron 和计划任务

为了使网站运行顺畅并保持最新,需要定期执行各种任务。例如,我们在本书中较早提到,聚合模块需要定期运行,以便更新所有其源和等等。Drupal 开发者非常清楚需要处理的任务;因此,他们将所有内容打包成一个方便的脚本——cron.php。

您需要设置crontab计划任务以执行位于您的 Drupal 安装主文件夹中的cron.php 脚本,以便它可以执行所有必要的任务。cron 脚本基本上会搜索整个站点并执行适用于模块或其他事物(如日志处理)的任务,以确保它们都保持更新。

让我们看看如何控制 crontab,然后为 Windows 用户设置计划任务。

Crontab

如果您不是特别想学习如何在托管站点上使用 crontab,那么您可以自由地跳到本章稍后提到的名为Poormanscron的部分。尽管如此,建议您学习如何使用 crontab,因为它无疑会在您的 Drupal 站点不可立即访问时派上用场。

crontab 中设置的变量都是数值常数,除了星号字符,它是一个通配符,允许任何值。每个字段允许的范围如下:

  • 分钟:0-59

  • 小时:0-23

  • 月份中的日期:1-31

  • 月份:1-12

  • 星期:0-7(星期日是 0 或 7)

您可以通过用逗号分隔每个值来为每个条目包含多个值。您希望发出的命令可以是任何 shell 命令,并且可以用来执行网页,如cronfeed.php 文件。许多托管公司都将有一个如下所示的界面,它允许您轻松地使用 crontab:

Crontab

在最后的条目中,您可以看到(希望如此)cron.php 脚本被设置为每天午夜运行,使用以下命令:

/usr/bin/lynx source http://www.cwc.com/cron.php

例如,第一个任务被设置为每小时运行一次(记住用您自己的站点 URL 替换上一个片段中突出显示的代码)。注意,php 命令没有用于执行 cron 脚本,就像用于其他两个脚本一样——这是因为cron.php 文件需要作为网页访问,以便正确设置某些环境变量。

小贴士

将您的 cron 作业设置为定期运行,以确保您的站点尽可能保持最新!建议每天运行cron.php 几次。

Windows 计划任务

如果您正在使用基于 Windows 的服务器,或者希望在开发过程中在 Windows PC 上启用计划任务,您可以使用计划任务向导。以下说明来自 Drupal 网站,详细解释了如何完成此操作:

  1. 前往开始 | 程序 |附件 | 系统工具 | 计划任务

  2. 双击添加计划任务

  3. 计划任务向导将出现。点击下一步

  4. 选择要运行的程序。从列表中选择您的浏览器(例如,Internet Explorer 或 Firefox)。点击下一步

  5. 给任务一个名称,例如Drupal 计划任务,并选择执行任务的频率(例如,每日)。点击下一步

  6. 选择具体的日期和时间选项(这一步将根据前一步选择的选项而变化)。完成后点击下一步

  7. 如果需要,输入你的密码。如果需要(例如,如果你希望任务在具有较少权限的用户下运行以出于安全原因),更改用户名。点击下一步

  8. 在最后一页,选择复选框当我点击完成时为这个任务打开高级属性,然后点击完成

  9. 您可以通过勾选最后一步末尾的复选框或双击任务来进入任务的设置页面。

  10. 运行框中,在现有的文本之后(例如,C:\PROGRA1\MOZILL1\firefox.exe),输入一个空格,然后使用双引号输入你网站cron.php页面的地址(例如,**C:\PROGRA1\MOZILL1**firefox.exe "http://localhost/drupal/cron.php")。

  11. 要设置高于每日(例如,每小时)的频率,点击计划选项卡,然后点击高级。在这里,你可以设置诸如重复任务,每1 小时重复23 小时等选项。完成后点击确定

  12. 将任务的开始时间设置为从当前时间起一分钟。这将允许你测试任务并确保它正在运行。

  13. 当所有设置都按照你的喜好配置好后,点击应用确定(注意,你可能需要输入密码)。

如果你发现你无法在你的主机网站上设置 cron 作业在网站上线后运行,那么你可以使用一个巧妙的技巧,并按照以下说明将你的 Windows 计划任务设置为直接从你的家用 PC 访问cron.php脚本,而不是使用上述指令。这意味着 cron 脚本将根据你的设置,在 PC 在线且能够访问网页时执行,频率取决于你的设置。

这最后一点突出了 Drupal 在执行定期必要任务方面使事情变得多么简单。你所需要的只是一个浏览器应用程序来访问cron.php脚本,Drupal 网站需要运行的任何任务都将被执行。你可以从自己的浏览器访问这个脚本,或者设置你的 PC 在启动时执行它,或者任何其他数量的事情。

Poormanscron

毫不奇怪,有一个贡献可以让生活变得更加简单。Poormanscron是一个贡献模块,它消除了设置 crontab 或计划任务的需求。

它的工作原理是在每次浏览网页时检查 cron 脚本是否在上一个时间单位(无论你设置为多久;默认为每小时)内运行过。如果发现有一个 cron 任务即将执行,它将在页面被服务后触发这个任务(这样用户在查看页面之前不需要等待任务完成)。

通俗来说,Poormanscron 意味着您无需学习任何关于 cron 作业的知识。这很方便,但也是一把双刃剑!很可能您还需要使用 cron 作业来完成其他任务,如果您使用 Poormanscron 来管理 Drupal,那么您实际上只是在推迟必须坐下来学习如何使用 crontab 或计划任务的时间。无论如何,您已经看到了如何使用所有选项的示例;所以剩下的就是让我们看看如何与 Poormanscron 一起工作:

  1. 从 Drupal 网站下载 Poormanscron 模块。

  2. 将文件提取到您的modules文件夹中。

  3. administer下的modules部分启用该模块。

这就是全部内容——只要您的网站有规律的使用,cron 任务将顺利运行,您无需担心手动访问cron.php脚本或设置 crontab。

然而,过了一段时间后,您可能会对不断看到记录的 cron 消息感到厌烦。如果您想管理 Poormanscron 模块,那么请转到管理区域中的settings下的poormanscron,以显示以下页面:

Poormanscron

如您所见,有多个选项可供控制 cron 作业应该多久运行一次,错误后应该等待多长时间再重试,以及您的日志策略应该是什么。在这种情况下,日志已被禁用,因为目前没有紧急需要手动验证的内容(暂且如此)。如果您添加了新的软件并需要确认它是否被cron.php脚本正确执行,那么您可能需要考虑重新启用日志。

节流

有时候,有人会创建一个网站,这个网站会变得非常受欢迎。大量的人访问一个网站可能会对服务器的资源造成严重的压力,并在拥堵时引发各种问题。即使一个网站并不特别受欢迎,它也可能遭到来自某处的拒绝服务攻击。

在考虑在网站上设置节流机制之前,了解您可用的资源非常重要:

注意

如果您已经确保有设施来处理大量流量,那么实际上您已经使节流模块变得多余。

如果您不确定您的网站上有什么资源可用,请咨询托管服务并了解他们提供了什么。

假设你预计会有某种拥塞控制的需求,处理流量或带宽使用激增的一个好方法是启用 Drupal 附带的自带节流机制,即上述节流模块。通过在管理工具的模块部分启用它,这很容易实现。一旦完成,你可以通过导航到管理区域设置下的节流页面来配置模块在网站上的总体行为。这将显示以下页面:

节流

此页面从使用该网站的人数的角度处理拥塞。在这种情况下,Drupal 被指示在有300人或更多在线匿名用户时启用自动节流,对于有超过100个在线认证用户的情况也是如此。最后一个选项涉及实际限制节流机制必须完成的工作量,以便它本身不会成为资源消耗者。

但如果你知道是某个特定模块消耗了超过其应得份额的资源呢?在这种情况下,你只需在管理工具的模块部分为该特定模块启用自动节流,如图所示:

节流

这也可以按块块进行,通过导航到部分并执行相同操作。但节流块最终意味着什么?基本上,如果你的服务器承受压力,并且你设置了一个自动节流的块,它将被禁用,不会对服务器的负载做出贡献。

你可以通过查看日志消息来确定在任何给定时间节流模块正在做什么。例如,我将节流机制设置为仅在一位用户访问网站后启动。然后创建了以下日志消息:

节流

这并不多,但至少它清楚地表明了何时启用节流。一旦负载足够降低,将发送一条相应的消息,表明可以解除节流,事情可以恢复正常。

虽然以下这一点与节流没有直接关系,但了解你网站的性能以及你可以做什么来确保它是好的是很重要的。查看drupal.org/node/2601了解如何:

  • 分析你网站的性能

  • 通过使用robot.txt文件阻止各种类型的网络爬虫访问你网站的某些部分,以减少你服务器的负载

  • 了解 Apache 性能以及 PHP 和 MySQL 调优

你现在获得的知识可以预先用来防止可能在未来阻碍用户的性能问题——即使你不太可能在早期注意到任何与性能相关的问题。

补丁

不时地,人们会清楚地发现 Drupal 模块或其他方面存在一个 bug。这在软件进行重大改版时尤其令人担忧,因为每个人都疯狂地工作以保持进度——鉴于 Drupal 在撰写本文时刚刚升级到 4.7 版本,这一点现在比以往任何时候都更加重要。当这种情况发生时,人们通常会去论坛看看是否有人遇到过相同的问题。通常情况下,就像 bug 一样,其他人也可能遇到了同样的问题,也许有人已经能够解决这个问题。

如果有人在自己的机器上解决了这个问题,那么他们很可能会提交一个补丁文件到论坛,以便其他人可以使用它来修复自己的代码。在这个时候,重要的是要意识到以下几点:

  • 如果您不想遇到任何问题,请确保您只下载经过良好测试和稳定的软件用于您的网站。通常,模块的 CVS 版本仍然包含 bug 或错误,因此最好等到模块发布并针对您的 Drupal 特定版本进行测试后再使用。

  • 补丁文件并非特定于 Drupal。它们只是解释了一组应该添加或删除的代码行的文件,这样补丁工具就可以在不需人工干预的情况下实施这些更改。

  • 补丁工具不是 Windows 机器的本地工具——它们与基于 Unix 的操作系统(如 Linux)一起提供。

如果 Linux 用户发现需要实施补丁,他们需要花一些时间学习如何使用补丁工具。Windows 用户需要更进一步,首先下载一个补丁工具。幸运的是,unxutils.sourceforge.net/ 提供了常见的 Unix 工具的下载。这其中包括补丁工具,您需要将内容提取到一个文件夹中——patch.exe 文件将位于您提取文件的目录中的 usr\local\wbin 文件夹内。

patch.exe 文件现在可以像任何其他命令行工具一样使用。我们已经多次使用过 mysql 命令工具,所以您对此有一些经验。使用补丁的一般语法如下:

C:\ patch [options] [originalfile [patchfile]]

在这种情况下,originalfile 是应该应用更改的文件,而 patchfile 显然是包含要实施更改的补丁文件。有许多选项可以查看,因此在处理它之前请查看补丁的 man 页面。您可以在www.hmug.org/man/1/patch.php找到它。一个典型的命令可能看起来像这样(当然,如果您不在一个目录中工作,您需要确保输入正确的文件路径):

C:\patch buggy_code.php buggy_code.patch

现在有一个重要的路径相关的问题需要解决。如果你想在命令行的任何位置使用patch,你需要将其文件路径添加到你的Path系统变量中——否则,你每次使用patch之前都必须在命令行中导航到usr\local\wbin文件夹(你也可以选择将patch.exe添加到已经存在于你的Path中的文件夹,但可能更好的做法是将所有内容分开)。

要这样做:

  1. 打开控制面板并点击系统

  2. 点击高级选项卡并点击环境变量

  3. patch.exe文件的路径添加到系统变量部分的Path环境变量中,如图所示:修补

  4. 完成后,点击确定

注意,Path环境变量中设置的每个路径都是由分号分隔的。你必须确保除了添加单个路径之外,不要更改任何内容;否则,你可能会破坏其他重要的应用程序。

完成这些操作后,你现在可以从命令行的任何位置访问补丁实用程序。现在的重要问题变成了是否使用补丁文件。你怎么知道你需要补丁呢?这个答案实际上在于在 Drupal 中搜索任何可能遇到的问题的答案——通常在模块的下载页面上提交了补丁,所以请确保你也搜索了这个页面,并浏览论坛以获取更多信息。

最后,即使已经提供了补丁,也不一定意味着它将修复问题。通常,你会发现补丁本身可能会创建其他问题。例如,查看 Flexinode 模块的问题页面会显示以下内容:

修补

在撰写本文时,有几个补丁可用于解决几个不同的问题。根据你需要完成的工作,你会:

  1. 找到相关的补丁文件。

  2. 下载到您的机器上。

  3. 使用补丁实用程序实施补丁。

  4. 尝试使用更新的代码。

确保你下载的是补丁文件,而不是作为替代的整个文件。补丁文件通常以.patch扩展名结尾。如前所述,避免问题的最佳方法是只使用经过验证的可靠代码,否则,你很可能需要练习实施补丁——享受这个过程吧!

网站活动

一旦你开发了你的网站,并且它在实时服务器上运行,你会发现你的 ISP 可能为你提供相当多的玩具来玩耍。其中一些对于初学的网站管理员非常有用。但是,现在整个网站都建好了,我们可能还需要什么呢?

您面前还有许多不同的任务。例如,您确定外面那些恶意的人不能通过热链接到您的网站并减少您的带宽吗?什么是热链接?什么是带宽?这些问题只是开发完成后必须关注的关注点类型中的一小部分。我必须承认,虽然这本书的主题是建立网站,但这只是硬币的一面!

在演示网站的情况下,以下管理面板由托管服务提供商提供:

网站活动

显然,这里有很多玩具可以玩,建议您花些时间了解您可以使用什么以及如何使用它们。了解您有什么可用非常重要,因为这意味着您能更好地规划您的工作方式。例如,演示网站的托管商提供了一种自动化的搜索引擎提交功能,允许新网站提交给所有主要搜索引擎进行索引——这比简单地等待网站开始出现在它们上面要好得多。

在这里需要注意的另一件重要的事情是,大多数托管服务都会为您的网站提供一系列完整的统计数据。例如,人们来自哪里,有多少人访问了网站,访问了哪些页面等等。Drupal 自带了一些模块,可以做到类似的事情,所以请检查网站的原生统计是否足够,或者您是否需要考虑安装一个新的模块——例如GraphStat、Tracker、WatchdogRecorder模块可能更符合您的想法。

由于您在托管网站上可能有完全不同的选项集可用,我们在这里不再进一步讨论这个问题,但还有一些其他问题值得注意。让我们从最常请求的一个开始:搜索引擎优化,或SEO

搜索引擎优化

对于一个网站来说,最常见的目标之一是出现在大型搜索引擎的高排名中。正如您所知,良好的排名增加了潜在用户在众多网站中找到您的网站的机会。那么,您能做些什么来使您的网站尽可能高地排名,而不必真的付钱让别人为您做这件事呢?

很遗憾,这个问题没有直接的答案,很多人会给你同样多的不同答案。然而,有一组核心任务你可以承担,这些任务已知有助于提高排名——它们的重要性可能有所不同,但执行所有这些任务可能值得。以下表格突出了最重要的优化或任务,您应该考虑执行(如果可能的话):

优化 说明
编写增强网页的副本 重要提示:考虑你的目标用户会如何找到你的网站。他们会使用什么类型的词语来找到像你这样的网站? 一旦你列出了一系列关键词和短语,请确保你的网站在可能的情况下使用这些短语。如果你使用谷歌 AdWords,那么你可以自己检查各种搜索术语的流行度——只需将它们作为潜在的目标关键词提出,并检查它们的统计数据,这是在它们被添加之前谷歌提供的。例如,如果你有一个处理移动设备的网站,并且你希望将短语手机作为一个你希望排名很高的术语,那么你应该这样写:这款 G1 超级手机,无论你在哪里,都可以拨打任何其他手机。诚然,你无法控制他人的评论和页面内容,但这一点仍然适用于你写的任何标准页面——例如,简介页面、关于我们常见问题解答,甚至是你自己的个人博客。
使用有意义的文件名 虽然这一点不如第一个要点重要,但确实,拥有有意义的文件名会大有裨益,因为搜索引擎确实会查看文件名。不要将页面命名为19,而应该命名为类似awesome_webpage.html这样的名称。不过,也不要过分追求这一点,因为它并不是特别重要。如果你对此感兴趣,可以查看带有重命名文件帮助的可用模块——例如,关键词(key)应该能解决问题。
使用有意义的锚文本 重要提示:搜索引擎,尤其是谷歌,非常重视链接中使用的锚文本。因此,请确保所有链接都与有意义的文本相关联。例如,你会将以下句子重写为:Donate to the Wildlife community <a href ="<yourlink>">here</a>为:Donate to the <a href ="<yourlink>">Wildlife community</a> here。这样做的原因是,尽管人类可以轻松地建立联系,但单词这里对搜索引擎来说并不特别有意义。为了你的排名,简单地将链接移动到关键词野生动物社区,以便在搜索引擎上对其给予更多重视。
编写有意义的元标签 正如许多人会告诉你的那样,随着时间的推移,元标签的重要性越来越低。然而,它们仍然是有用的,你至少应该努力正确填写它们。你应该考虑使用的两个元标签是keyworddescription标签。例如,以下是一个可能的标签示例:<meta name="keywords" content="CWC wildlife conservation biosphere">元标签已经成为一些滥用的对象,你应该查看 W3C 联盟关于它们使用的指南:http://www.w3.org。为了进行这些更改,你将不得不与你的主题合作——很可能是page.tpl文件,或者它的等效文件!
管理你的链接 重要:网站的可感知知名度被赋予了很高的重视。搜索引擎可以通过查看有多少链接指向该网站以及链接到该网站的网站有多受欢迎来判断网站的知名度。因此,你应该确保你只链接到和从你认为合适的合作伙伴网站链接。实际上,你应该尽可能多地搜索相关链接页面,或者实际上与相关网站交谈,以确定你是否可以提供互惠链接。来自知名网站的链接越多,你的排名就越好。你还可以尝试获取指向你网站的单向链接——这些也被搜索引擎高度评价。
为图像编写有意义的alt标签 搜索引擎不像人类那样看待图片,所以你无法对图片做任何事情……或者有吗?与其将你的图片命名为02_03.jpg,你可能会考虑给它们起名如cruel_hunter.jpg。也不要就此止步。与其添加这样的图片:<img src="img/cruel_hunter.jpg">,你应该这样写:<img src="img/cruel_hunter.jpg" alt="猎人正在猎杀">
将你的网站提交给搜索引擎和在线目录 确保你的网站尽可能被列出。大多数托管套餐都提供自动 SE 提交功能,这将自动将你的网站转发给搜索引擎进行索引。否则,寻找其他 SE 网页提交工具,或者寻找你自己的列表和目录以成为其中一员。
阅读有关列表、论坛和在线教程的内容 这里有很多有用的信息。确保你进行自己的研究,并制定出适合你的 SEO 策略。

你会发现,如果你愿意投入时间来开发你的链接并不断升级你的网站,你最终会回收随着时间的推移而积累的收益。然而,不要期望一切都会一夜之间发生——获得知名度可能是一个繁琐的过程!

维护用户

很可能有些人注册时本意是定期使用您的网站,但他们可能会继续前进,而他们的账户却悬挂在那里,实际上并没有做什么。在早期添加用户维护模块可能是明智的,以便跟踪用户的活动情况,以及他们是否满足某些标准,这样您就可以移除那些不符合标准的人。

请继续从网站上下载该模块。准备就绪需要一点工作:

  1. 将文件解压到您的modules文件夹中。

  2. 使用以下命令在数据库上运行.sql脚本(请记住要有备份可用):

    C:\ mysql udrupal p drupal <
    C:\apache2triad\htdocs\drupal\modules\user_maintenance\user_maintenance.sql
    
    
    • 确保在需要的情况下,将高亮显示的文件路径替换为您自己的设置。
  3. 管理下的模块部分启用该模块。

启用模块后,请转到管理下的设置部分。在菜单中的下拉列表中,您会注意到现在有一个新的用户维护菜单项可用。点击它将显示以下页面:

维护用户

如您所见,尽管用户在注册后没有登录,但现在选择您愿意保留活跃账户的时间变得相当容易。尽快启用此贡献的原因是它不能追溯工作。换句话说,如果您在收集了三年的无效账户之后遇到这个问题,这个贡献无法告诉您应该删除哪些账户;它只能对在启用时创建的账户起作用。

摘要

本章通过查看您将不得不承担的一些最重要的网站相关任务,完成了前几章所描绘的画面。知道如何一键备份,或者能够告诉谁在使用您的网站以及他们为何目的何时使用,这使您能够高效且尽可能少地麻烦地维护和管理您的网站。

随着本章的结束,我们来到了本书的结尾。对于那些现在需要上传您的新网站到实际域名的人,附录中包含了进一步的部署说明。

恭喜您完成这本书,并祝您在未来的网络事业中一切顺利。请记住,花些时间回馈 Drupal 社区,以便它能够继续繁荣发展并帮助他人。

附录 A. 部署

那一天终于到来了!到附录结束时,你的网站将上线,现在只存在一些微小的部署问题,阻碍着你实现在线抱负。实际上并不完全是这样!我应该明确指出,部署并没有什么特别复杂的地方;只是你需要密切关注许多不同的问题。在这个阶段犯愚蠢的错误可能会对最终产品产生重大影响,因为我们主要在部署一个完全开发的应用程序时处理配置问题。当然,犯错误并不是世界末日,因为我们将会非常彻底地测试一切。

初看之下,部署一个像 Drupal 这样的网站似乎很简单——只需将drupal文件夹复制到新服务器上!或者不是吗?在确保传输过程中一切顺利的过程中,有许多问题需要考虑。例如,数据库也需要按照开发机器上的样子完全重建——我相信你们中的大多数人已经花费了一些时间来配置一切并填充表格,你们肯定不愿意再次从头开始做所有的事情。除此之外,还有连接参数和一些安全问题需要考虑。

具体来说,附录探讨了如何:

  • 为部署做好准备

  • 将文件转移到新家

  • 设置网站,包括数据库

  • 仔细测试一切

抬起头来,我们几乎就要结束了;这并没有那么糟糕,对吧?我无疑会开始我的个人博客——这真的很诱人!

准备部署

首先,最重要的是;你确定你对现在的网站完全满意吗?虽然部署后对网站进行修改并不是什么大问题,但如果你现在就能完成这些工作,那么没有必要让自己在之后不得不重新编码某些页面或进行设计更改,从而给自己制造麻烦。如果一切就绪,那么我们可以开始准备过程。

准备工作分为三个阶段。不分先后顺序,我们需要确保我们有一个良好、干净、可工作的网站版本,一个良好、干净、可工作的数据库副本,最后,一个良好、干净的文件系统,为托管网站上的文件做好准备。让我们看看这是如何完成的。

确保主机已准备好

足够直观的是,你必须确保你有一个足够的主机。我的意思是,你有一个可以在上面创建 MySQL 数据库的主机,并且允许访问文件系统,以及你可能需要的任何其他好东西。为了使你的生活更轻松,有一个 FTP 账户可供使用,以便你可以将文件传输到主机文件系统也是一件好事。通常情况下,你应该能够使用管理员的用户名和密码自动登录到你的 FTP 账户。如果你不确定这一切是什么,那么在你的浏览器中尝试以下 URL(假设你的浏览器支持 FTP):

ftp://ftp.your_domain_name.com

如果你被提示输入密码或者看到了你的主目录内容,那么恭喜你,你有一个 FTP 账户。如果你没有,那么你应该考虑让你的主机给你一个,或者向他们询问如何上传文件。顺便说一句,每次你使用 FTP 账户时,不必每次都提示你的用户名和密码,你可以将它们放在 URL 中,如下所示:

ftp://username:password@hostname/

如果你担心安全问题(我指的是:你确实在担心安全问题),那么最好省略密码,只传递用户名,因为否则如果 URL 在不安全的地方被记录,这可能会引起安全问题。记住,这些信息已经以未加密的格式传递。如果你希望安全地完成所有操作,你应该与你的主机讨论如何安全地传输文件。

如果你没有 FTP 账户的访问权限,那么不要慌张!稍后在这个附录中阅读名为 Transfer the Files 的部分——仍然可以轻松地将你的文件移动到主机站点。

一旦你确认了有地方可以上传 Drupal 文件,并且有东西可以用来上传,你需要创建一个数据库。天知道这有无数种不同的方法可以做到;所以我们不会在这里详细介绍每一种方法。

查看你的站点管理界面,看看是否有允许你创建和控制你的 MySQL 数据库的部分(你可能发现你的主机提供了我们的好朋友 phpMyAdmin)。例如,演示站点的宿主在 Databases 部分有一个 Manage Mysql 链接,它提供了一个用于创建数据库的界面。它还提供了 phpMyAdmin 以管理这些数据库:

确保主机已准备好

点击 Manage MySQL 链接会弹出以下页面。一旦你有了数据库,确保你已经记下了它的名字——通常主机会在你选择的名字后面添加一些内容,就像在这个演示站点数据库创建界面中所示:

确保主机已准备好

如你所见,数据库被命名为 contechj_contechst,其中 contechst 是我为实时数据库选择的名字,而 contechj_ 是添加的部分。在我们继续之前,重要的是要注意这个数据库需要一个用户,所以确保它有一个,如下所示:

确保主机已准备好

在这个例子中,contechst 数据库现在有用户 contechj_david,有了这个,主机站点基本上已经准备好接收新的 Drupal 网站。记住,这些用户名、密码和数据库名称对于网站的配置都很重要,所以确保你不会忘记任何一个。如果你遇到困难,请向你的主机支持团队寻求帮助;他们就是为此而存在的。

准备文件

在进行任何操作之前,您需要在部署之前制作一个站点的主副本。确保您将发送的drupal目录的精确版本压缩并存储起来。

注意

目前,Drupal 索引页的目标 URL 将类似于www.domain_name.com/drupal/。如果您希望它是www.domain_name.com/,那么您需要不包含父目录地压缩文件,以便文件直接提取到现场网站的public_html文件夹中。

当我们谈论这个话题时,您不妨将 Drupal 文件系统彻底清理干净,这样您就不会保存错误的文件。

如果您像我一样,那么您可能在工作过程中创建了所有修改过的文件的备份。对于 Windows 机器来说,这些备份文件以.bak结尾,并放置在原始文件的同一文件夹中。在删除任何内容之前,备份您的drupal文件夹,以确保安全。然后从drupal文件夹中删除所有备份文件。

虽然现在做这件事可能看起来有点过度,但有几个很好的理由。首先,在您的托管文件系统中保留任何类型的未使用文件都是不安全的做法。其次,为什么要在您不需要的文件中弄乱您全新的安装呢?您会发现,无论如何,保持一切整洁有序都是一场持续的战斗——所以从您打算开始的地方开始。最后,如果您在开发阶段处理了大量文件,您正在为上传添加很多不必要的尺寸。

注意

由于安全原因,您可能需要将CHANGELOG.txt文件和update.php文件移动到不同的位置——将它们从网站中移除并保存在其他地方,这样黑客就无法获取它们。如果您需要使用update.php脚本,那么您可以在那时将其添加回网站。

接下来,打开配置文件settings.php,删除用户名和密码。正如您可能推断的那样,当前的数据库名称和密码将更改为您在主机上创建新数据库时设置的名称和密码(如果它们不相同),但转移任何类型的敏感信息都没有意义——尤其是当人们通常更喜欢为各种事情使用相同的用户名和密码时。

完成这些后,您必须等待直到下一部分,然后添加一个额外的文件,您就可以制作一个主副本,压缩您的 Drupal 站点——可以称之为 RTP(发布给公众)或类似的名称,以区分其他版本。

如果你在一个 Linux 盒子上工作,如果你愿意,可以使用targzip压缩你的文件——这显然有助于上传时间。如果你在 Windows 上开发,那么你可能想确保你的主机可以解压.zip文件,因为它们很可能使用 Linux 服务器——不应该有问题。在极不可能的情况下,最好的做法是下载并安装 Windows 上的 gzip 实用程序,可以在www.gzip.org/找到,然后你可以使用它将文件压缩成.gz格式。

准备数据库

目前为止,数据库可能包含大量用于测试的愚蠢帖子,或者可能包含一些重要的页面。这里没有硬性规定;只是尽量不要传输太多你最终会立即删除的东西。

谈到备份,这确实是本节的主要目的。为了部署数据库,你需要对其进行备份。然后,这个备份文件将被传输到主机网站,并用于在那里创建一个新的数据库。既然你已经有了关于备份所需的所有信息,我们就不需要在这里进一步探讨了。

一旦你创建了整个 Drupal 数据库的备份文件,并将生成的.sql文件添加到drupal文件夹的某个位置(只要你能再次找到它,任何地方都可以),你现在就可以开始将文件传输到你的主机上了。请注意,一旦你使用了.sql文件,就应该从你的网站上将其删除——将其保存在文档根目录之外的地方,以防你需要再次使用它。

传输文件

现在,你应该有一个最终、干净的在线商店版本,包括数据库的副本,所有内容都已打包,准备就绪。假设网站中有图像和相当多的数据,你可以确信上传的大小相当大。因此,你需要一个相当快的连接——拨号连接在长时间内可能会有些不稳定,所以甚至可能值得使用朋友的电脑或你的办公室连接将文件发送到主机网站。

到目前为止,最简单的方法是使用主机文件管理器的本地上传功能,通过快速连接上传。如果你可以使用它,只需用它上传存档文件到主机服务器。演示网站有这个功能,如下所示:

传输文件

注意,ZIP 文件正在上传到public_html文件夹,因为这是从该服务器上提供所有网页的文档根目录。

或者,假设你的网站启用了 FTP 账户,你可以尝试使用 FTP 拖放,这和在 Windows 上移动文件完全一样,或者你可以使用 FTP 实用程序。

如果有疑问,只需联系您的托管服务提供商,并询问有关如何传输文件的信息。对于绝大多数网站,其管理界面和文件管理器都易于使用,您将不会遇到上传文件的问题。因此,我们不会浪费时间详细讨论 FTP 工具。只需确保,最终,ZIP 文件出现在您托管服务器的主目录中。记住,一旦使用过,不要在主目录中留下 ZIP 文件夹。

设置网站

到这一步,您应该有一个正在工作的数据库,并且知道在您的实时网站上该数据库的用户名和密码。您也已经将存档文件上传到了托管网站。最后,我们终于从在开发机器上工作转移到在实时网站上工作。不过,首先我们需要做的是…

设置文件

您需要将存档文件提取到您的public_html文件夹中——很可能是您的托管服务提供商会提供这项功能。注意这里显示的列表中的第二个选项:

设置文件

提取这些文件后,您现在应该已经在托管网站上有了开发机器上文件的副本。通过浏览实时网站来检查这一点。您还应该发现,如果您尝试从网页浏览器浏览其中一个页面,您将不再收到页面找不到错误,而是收到其他类型的错误——很可能是 MySQL 错误,因为我们还没有建立数据库连接:

设置文件

这是一个好消息,因为它意味着我们可以毫无问题地浏览实时网站上的文件。这里显示的 Drupal 错误信息证实了我们确实正在浏览 Drupal 页面——请注意,之前截图中的错误信息提到了一个不正确的用户名和服务器。这是为了更清楚地演示我们正在浏览 Drupal,但我们还没有进入正确的数据库或配置设置。

设置数据库

如果您有权访问托管网站上的 phpMyAdmin,那么请打开它并按照以下步骤操作:

  1. 在 phpMyAdmin 主页的左侧面板中,点击您之前安装的数据库名称。(回想一下,对于演示网站,这个名称是contechj_contechst)。

  2. 在新打开的页面中,点击页面顶部的SQL标签。

  3. 文本文件位置选项下点击浏览

  4. 定位您想要运行数据库的文件,然后点击Go

如果一切按计划进行,您将收到一条消息,告知您数据库修改成功。然后您可以通过 phpMyAdmin 查看数据库是否已获得所需的任何表。

可能存在您的主机系统和您用来创建备份的系统之间的问题。例如,我最初收到了以下错误:

设置数据库

这是因为 MySQL 的不同版本有时会使用略有不同的语法,在一切顺利运行之前,有必要从.sql文件中删除所有的DEFAULT CHARSET=utf8语句。

如果你没有访问 phpMyAdmin 的权限,那么你只需要以适合你特定网站的方式安装数据库,使用.sql文件。记住,如果你可以访问命令行,你能够从那里运行.sql文件——如果不能,那么是时候联系支持团队并了解他们推荐你如何运行你的.sql文件内容了。

配置网站

数据库设置完成后,回到你实时网站上的sites/default/文件夹中的settings.php文件,并根据你的系统设置进行修改——务必确保你精确地添加了你的实时数据库所需的名称和密码到$db_url,以及如果需要的话,实时网站的正确 URL 到$base_url

一旦你适当地设置了配置设置,保存文件,然后尝试浏览一些页面。如果有幸,你将看到的东西大致和开发机器上的一样。

访问问题?

尝试登录管理员账户。我怀疑你们中的很多人都会在浏览器告诉你找不到你正在寻找的页面时遇到一些相当讨厌的惊喜。如果这种情况发生,很可能是因为.htaccess文件没有被成功迁移到实时网站上:

注意

你必须确保 Drupal 的.htaccess文件存在于实时网站上! Drupal 父文件夹中的.htaccess包含对网站健康运行至关重要的指令和信息。确保你直接传输它,或者将其内容剪切并粘贴到实时网站的.htaccess文件中。

在实时网站上查看.htaccess文件的内容(在 Drupal 父文件夹中,很可能是根据你的设置在文档根目录中),你应该看到类似以下内容:

<IfModule mod_php5.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
</IfModule>
# Reduce the time dynamically generated pages are cache-able.
<IfModule mod_expires.c>
ExpiresByType text/html A1
</IfModule>
# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Modify the RewriteBase if you are using Drupal in a subdirectory and
# the rewrite rules are not working properly.
#RewriteBase /drupal
# Rewrite old-style URLs of the form ‘node.php?id=x'.
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{QUERY_STRING} ^id=([^&]+)$
#RewriteRule node.php index.php?q=node/view/%1 [L] ...

如果是这样的话,你应该会发现你可以像平常一样浏览实时网站。放心,我们几乎完成了!目前要做的最后一件事是…

测试

在这个例子中测试的目标是什么? 好吧,从现在到本章结束,我们希望从我们目前的状态过渡到一个完全功能性的网站,更重要的是,一个实时且可操作的网站。为了达到这个目标,我们不仅需要确保从客户的角度看一切按预期工作,还需要确保网站得到适当的实施,并且我们可以无问题地管理它。

为了给你一个可能出现的糟糕情况的例子,看看我第一次尝试在实时网站上做一些管理操作时收到的以下错误信息:

Testing

您能立即发现问题吗? Drupal 抱怨它无法写入应包含在 C:\apache2triad\temp 中的 files 目录。这种情况并不奇怪,因为在实时网站上,根本不存在 C:\apache2triad\temp 目录。事实上,这个完全限定的路径之所以存在,是因为我最初想展示私有下载方法,尽管在这里公共访问文件是合适的。

这意味着我们需要重新输入在开发机器上设置的设置,以反映实时系统的具体要求:

Testing

假设您已经设置了必要的权限,使得 Drupal 可以在这些文件夹中读写,这个特定问题就解决了。(如果您已经在网站上有了文件,那么您可能需要将它们移动到您在这里指定的目录。)现在,剩下的就是测试管理工具中的所有其他功能,以确保它们能正确工作!

这里有一份检查清单,供您使用,以确保从用户的角度来看,网站运行良好:

小贴士

网站检查清单

使用至少两种不同的浏览器。 一种浏览器可能实现了其他浏览器没有的一些功能——您可能会发现您所依赖的某些功能在您选择的浏览器上工作得很好,但在其他浏览器上则不行。 Testing
调整浏览器窗口大小以适应各种页面。 这有助于确定您是否有未正确设置的 HTML 元素。例如,某些部分可能使用整个页面宽度,而其他部分可能只扩展到一定限制。 Testing
从慢速和快速连接访问页面。 您可能会发现某些页面在拨号连接上加载非常缓慢。这可能意味着您需要重新考虑图片和页面的大小。 Testing

| 检查所有链接——文本和图片。 | 在部署过程中,由于文件路径等差异,链接经常会出现问题。您应该:

  • 检查每个页面上的所有链接和按钮

  • 检查块中的所有链接

  • 检查大图和小图是否显示得当

  • 检查所有广告链接是否正确

Testing
检查每个页面的外观。

| 使用每个页面。 | 这对于确保用户能够:

  • 注册账户

  • 管理他们的账户

  • 根据权限添加内容

  • 根据他们的角色正确访问内容

  • 利用网站的所有设施

确保以下内容:

  • 搜索引擎工作正常

  • 正确发送联系邮件

  • 隐私政策和使用条款将显示,以及任何重要的版权信息。

Testing
尝试破坏网站(当然,作为受限用户)。

如果你能在几个浏览器中无问题地完成这个清单上的所有事项,那么你可以合理地确信,当网站上线时它将能够稳定运行。当然,在运营的前几个月里,你需要非常密切地监控它,以确保没有任何严重的问题发生。提供网站管理员的电子邮件地址是让用户在遇到问题时进行投诉的好方法。你与用户之间开放的沟通渠道将有助于培养牢固的联系并提高你网站的质量。

摘要

对于像构建一个功能齐全的社区驱动网站这样重要的任务,你需要花费大量时间考虑你的选择,并开发和测试你的网站。由于在实时网站上做这类工作实际上并不可行,你需要使用一台开发机器来帮助你。正因为如此,部署的话题在整个计划中非常重要,因为正是部署将你的最终开发与实时网站联系起来。

本章概述了一个为部署做准备的良好流程。还必须在主机网站上设置一个新的数据库,但这一点相对容易,因为任何好的主机都会通过提供像 phpMyAdmin 这样的工具来简化这项任务。

希望你意识到,对于 Drupal 网站来说,部署过程本身并不特别复杂,因为唯一真正需要完成的是修改settings.php文件以反映你新系统的配置。将网站的部署复杂性降低到仅配置一个文件,对于 Drupal 用户来说确实是一个真正的优势。

虽然网站的部署本身相当简单,但已经证明有许多问题需要处理,其中最不重要的是测试。在网站上线之前进行全面的测试套件是至关重要的——因为愚蠢的错误而失去宝贵的用户是任何竞争性网站都不希望看到的。

posted @ 2025-09-05 09:28  绝不原创的飞龙  阅读(7)  评论(0)    收藏  举报