建站指南

原文链接:http://drupal.org/documentation/build

这是一本专题指南,指导如何将商业化的功能和特性集成到您的Drupal站点。

关于管理一个运行中Drupal站点的进一步信息,请看“管理指南”。关于使用菜单、分类、区块等组件开发基本内容架构方面的信息,请看“结构指南”。

建站指南

 

原文链接:http://drupal.org/documentation/build

这是一本专题指南,指导如何将商业化的功能和特性集成到您的Drupal站点。

关于管理一个运行中Drupal站点的进一步信息,请看“管理指南”。关于使用菜单、分类、区块等组件开发基本内容架构方面的信息,请看“结构指南”。

最佳实践

原文链接:http://www.drupal.org/best-practices

“对于有些人来说,没有一个站点不重要,哪怕是再小的站点” – Steven Peck

 

如果你准备投资一些时间建立一个CMS站点,那么你应该遵循一些简单的最佳实践原则来保护你的投资。这些指导原则仅仅是建议。由你自己决定什么是适合你站点的。

 

  • 规划您的站点:尽管Drupal提供了一套很好的工具帮助你建立您的站点,但是你仍需要去规划。良好的线架图和合理的规划能够避免产生后期的重大误解、问题。
  • 为未来规划:每当有Drupal的主版本发布时,你应该重新访问和评估您的站点。这并不意味着你必须更新站点,但是你应该大概每隔12至24个月就评估并计划一次更新。
  • 参与到社区:这将一方面帮助你跟上开发潮流,另一方面在帮助别人的同时,你也会获得解决自己问题的灵感。
  • 备份您的站点:数据库和Web服务器的文件都需要备份。测试您的备份!如果你不测试,你将不知道你是否正确的进行了备份。
  • 尽少并谨慎使用PHP代码片段:Drupal给了你强大的能力和灵活性在区块中使用PHP代码。然而不幸的是,哪怕是一个字母或者分号的遗漏,就中断PHP的正常运行。Drupal于是在任何请求页面上尝试对这段残破的代码进行解析,PHP解释器阻塞在上面,从而导致您的整个站点被中断。更糟的是,一段由非授权用户植入的PHP代码能够将您的整个站点暴露在黑客的攻击之下。一个通过PHP代码获取您站点访问权限的外来者将能够读写您数据库中的任何内容,并且几乎能够做任何他们想做的。除非是可以信赖的站点开发人员,你应该小心,不授予其他任何人使用PHP代码的权限。当创建了一个可以使用PHP代码进行输入的区块时,你可以通过首先在一个临时的故事或页面节点上测试这段代码,来避免这个区块宕掉你整个网站的风险。使用PHP语法的输入内容时,编写代码,并且预览以调试您的代码。当你对代码的运行已经放心时,再将代码拷贝并粘贴到区块中。

下面的链接将进一步阐释最佳实践的一些基础内容。如果你想直接找高阶的、程序员风格的最佳实践,就直接跳到“编码最佳实践”页面。

备份您的数据库和文件

原文链接:http://www.drupal.org/node/839648

数据库和定制的文件备份是必不可少的。

在论坛话题中有很多的帖子是关于不可恢复的错误、WSOD(白屏死机现象White Screen of Death)、数据库信息丢失等内容。当您的站点多次出错,或被删除,或被破坏,唯一的并且最佳的选择就是从备份中恢复。

备份和迁移:

Backup & Migrate(备份和迁移)模块紧急恢复和站点迁移更加容易。你可以通过配置实现自动备份到文件系统 – 开发过程中可以更频繁的备份。

你可以在进行任何复杂配置之前创建一个手工备份。这样,如果碰到灾难性故障,你就有了一个还原点。

当你将数据库和内容保存为文件时(你可能会排除一些特定的表),还会有一些安全方面的问题,这时如果碰到灾难故障,回滚的价值就显得非常重要了。

这个模块同样使得站点迁移更加容易。我刚刚移动了一个有Views、APK、CiviCRM等模块的复杂站点,大约12,000个文件。我移动了这些文件,创建了一个新的数据库,编辑了新数据库的settings.php和civicrm.settings.php文件,用phpMyAdmin和VOILA从老站点中导出了数据库并导入到新站点的数据库中 – 站点迁移成功!(有时我拷贝完文件,然后默认安装,再启用Backup&Migrate模块,通过模块提供的接口导入数据库 – 那样也行)。

 

Drush archive-dump

Drush(Drupal Shell)是一个命令行的工具,能够通过archive-dump命令打包你的文件和数据库。Drush同样集成了Backup & Migrate模块。要使用Drush,你必须通过shell(SSH)终端访问您的服务器,并且能够安装并配置Drush工具代码

不要修改内核

原文链接:http://www.drupal.org/best-practices/do-not-hack-core

 

“不要修改内核!”

这是在Drupal圈中广为人知的警言。你可能在T恤或贴纸上看过这句话。你也可能在视频上看过。这是Drupal最重要的最佳实践之一。

 

为什么你不应该修改内核文件

无论修改内核文件是多么容易让Drupal按照你期望的方式去做,也要坚决抵制住诱惑。

  • 因为安全和缺陷修复的原因,这样做会让站点更新复杂、困难而近乎不可能。
  • 你会让后续其他人难以维护站点
  • 你可能会使站点容易出现可被利用的漏洞

Drupal内核已经被设计成模块化,不应该有理由去修改它。如果有一个你想要的功能,又无法通过修改内核以外的方式完成,可以考虑将你的修改做成一个补丁。建立一个发布项,并告诉Drupal社区你想要实现的功能。然后你的代码会被测试并可能成为Drupal内核中的一部分。

 

例外

是否存在这条原则的一些例外情况。

 

没有。。。

 

好吧,也许存在。但是这通常是对一些特殊站点或者对那些极为熟悉Drupal核心代码库、开发实践和安全模型的人而言。那些人将他们的变更合理的文档化,并且对他们的代码进行合理的版本控制。如果你必须问,那就是你没有机会。

避免硬编码

原文链接:http://www.drupal.org/node/1052556

硬编码的诱惑在我们最棒的一群人中也是存在的 – 那也是为什么即使是我们中最棒的人也会以身试法。

硬编码的定义

硬编码是通过特制代码处理非常特殊情况的方法。这里给出应用于Drupal的硬编码例子:

  • 在一个tpl文件中插入SQL查询语句
  • 编写一个查询数据库的脚本对节点做一些变更
  • 在一个主体化的函数输出内容中使用正则表达式将一个HTML class属性改为另一个值

上面的例子可能在某段时间甚至一直有用。然而,如同修改内核,仅仅考虑效率并不足以使之适用于Drupal模式。即使当硬编码有效时 – 虽然它时常不能按预期的方式生效 – 它也在用代码处理通用性的场景上带来了额外的编码成本。

为什么你应该避免硬编码

如果这似乎是一个坏主意,那么应该没人愿意硬编码他们的Drupal站点。然而,Drupal.org上有大量提交的修复工作在某种方面是硬编码的。那是因为硬编码对于匆忙的或者刚入门的程序员来说通常是有吸引力的。他们发现了一条节省大量时间的方法,并且对于短期的运行而言,他们是正确的。问题是,硬编码工作会带来隐藏的成本,那将花费大量的时间。

诸如“不要将代码放入主题层”或者“使用钩子系统”的注释非常普遍,也有表示规范的硬编码警告。然而,对于新的Drupal人来说,很难找到为什么硬编码通常是个坏主意的描述性信息。

所以这里给出一些使用硬编码带来问题的特定例子:

  • 你在开发一个主题

你添加了一条特定的SQL查询语句,用来保存并展现一个用户有多少保存的条目。现在你想在一个不同的Drupal安装版本中使用那个主题。如果其他的安装版本有不同的表名,或者使用不同的模块存放用户信息,需要另一种不同数据表连接的顺序,该怎么办?你特定的查询现在毫无用处。

  • 你设计了一个函数用来缓存并展现用户信息

这将使得与处理器非常紧耦合,并且您的客户端也要缓存他们的结果。如果你并未按最初的想法利用Drupal缓存机制来工作,会发生什么?

  • 你需要在站点横幅广告处改变主题

然而,你用来选择一条随机横幅广告的代码被放入了站点page.tpl文件中。这意味着除非页面在您的函数被调用的地方已经被渲染,否则你不知道什么广告将被显示。要是HTML在此之前发生变化了又会怎样?

  • 你在站点主题上有五个变量,使用了不同的模板文件

它们每一个都有一条你手写的查询语句。如果查询需要更改,你需要在六个地方做同样的编辑 – 哎呦,我是说五吗?我一定忘了站点的手机主题是存放在完全不同的文件夹下。你应该不会那样忘事,对吗?

  • 其他人开始在你的代码上工作

如果你使用了硬编码的解决方案,即使熟悉Drupal,他们又如何知道发生了什么?记住,这不同于您的个人博客,其他人可能成为项目中的一分子。就算是您的博客,你如何知道你记下了多少一年以来的代码?

记住,硬编码失败主要在于不能预测到各种因素。从一个页面请求到处理请求的Drupal页面,这个过程需要您的服务器执行上百个函数。采用Drupal自带的钩子,这个过程是正常的并且可预测的,你用就可以了。你能够对那些函数交互的所有方式完全了解吗?如果不能,您选择脱离Drupal框架的行为将给您的站点/您自己/您的宠物带来了不可预期的风险。

例外

尽管如上所述,硬编码和修改内核在一个关键点上是不同的:还是有很多合理的场景下需要使用硬编码,并且大部分Drupal开发者不得不时常这样做。有时,你仅仅需要将一堆特殊的用例挑选出来,硬编码是一种有效处理此类问题的方式。例如在一个特殊的节点ID上显示Halloween主题,而这个节点你一年才用一次。用一个模块添加一个表单选项以选择一个主题就显得麻烦了,因为你知道你几乎不会使用它。

如果你准备硬编码,小心使用,经常咨询一些建议,在你根本不确定是否应该如此的时候;或者如果你确定的时候,因为那样更加危险。

使用Features模块捆绑站点设置

原文链接:http://www.drupal.org/documentation/modules/features

恩,如果有这样的事情:如果有人问你如何在Drupal站点上制作博客,你不要告诉他们去启用Blog(博客)模块,这个模块已经准备被撤下了。你应该告诉他们用CCK和Views模块可以很容易的做到 – 一些相关设置可以用小字体打印2-3页之多。

Features模块在捆绑、导出和导入许多Drupal模块的设置上通过友好的配置提供了快捷的操作入口。请看这里的快速介绍。Features通过启用各项功能转移了站点开发模式分散的痛苦。

主要优点:

  • Drupal新手可以快速部署博客、相册或其他一堆功能,并且能快速了解更加细致的设置。
  • 开发人员可以轻松复用一些主流模块的设置,包括CCK(和ImageCache)、Views、Panels、Context等等。
  • 开发人员可以轻松将他们的配置分发到用户处、在开发的站点处以及更新已有站点。这里有一个有意思的讨论,关于分布式功能服务器的。
  • 对于在使用Drush的人来说:有一些有用的Drush命令用来管理Features模块。(相关文档还在编写 – 可以到项目页搜索简要的文档)对于没有使用Drush的人来说:赶紧下载它!

下载和安装Features模块

原文链接:http://drupal.org/node/582318

Features模块遵循标准的安装流程: 从这个项目的页面下载,放到你的sites/all/modules文件夹下,然后在你的模块管理页面激活它。

Features模块会自动找到所有与之工作的模块 - 无需进一步的安装或配置

安装、启用和禁用Features

原文链接:http://drupal.org/node/582674

安装 / 启用

 
安装做好的features跟安装模块一样简单(甚至更简单)

 
找到并下载feature。 解压feature(如果你拿到的是压缩文件的话,因为最终需要一个文件夹,而不是压缩文件)

 
将文件夹放到你drupal安装目录下的一个合适的文件里。最好是放到sites/all/modules/custom/features,不过放到sites/all/modules也可以。

 
注:如果某个feature前的复选框是灰色不能点击选择的话,应该是因为它依赖的某些模块缺失了。在feature的标题下面去检查不需要的依赖,只安装适当的模块。

 
禁用feature

 
如果某天你要禁用某个feature,只需访问Feature管理页面,置空这个feature对应的复选框然后点击保存设置
 

设计思路上, 禁用feature的module将会同时在feature里定义的功能。也就是说会删掉feature创建的节点类型等等。

 “悄悄” 禁用某个feature模块(保留功能和配置)

 有时你想禁用某个feature模块,但不想丢失它所定义的功能或配置。

 Features的设计不适用这种情况

 如果你找到实现的方法,请添加评论与我们分享。

 公开可用的已完成的features
 

 你可以在公用的feature服务器上查找并更新可用的features列表

新手上路

原文链接:http://drupal.org/node/580052

 

开始使用feature只需下载并启用features这个module

下面的截图是在D6上的安装,不过在D7上有效

在这个路径admin/build/features (注:D7上是admin/structure/features) 你可以管理已经安装的features和创建新的。

在创建新的feature的时候,你会看到很多选项,通过这些选项你就可以添加与你网站相关的很多不同的方面到feature里。最后你会看到你一个保存了feature的内容的下载的tar.gz文件。这个tar.gz文件只是包含了一个模块,你可以将它安装到当前的或者任何其他的网站。

当你在网站上安装了一个feature之后,在重新配置了相关的部分,相关的feature状态也会发生改变。这时你就需要做出选择。如果这些修改是需要的,那么你应该重新导出feature,并保存到文件目录里。否则就点击revert,退回到feature原来的状态。

 

下面的段落不适用于D7,因为D7里的这些模块都是可见的

访问这里admin/build/modules并不能看到已安装的feature的modules,而只能在依赖它们的模块里的依赖清单里出现。初看起来有些奇怪,但逻辑上是合理的。 因为features是在这里管理的admin/build/features, 而禁用feature只会对依赖它的模块产生不良影响。

确保您的站点是安全的

原文链接:http://www.drupal.org/node/1445720

Drupal安全指南有一个站点安全的专题,提供一份有用的解决方案列表。

http://groups.drupal.org/node/135824

Security Review模块提供了对潜在安全问题的自动审计。Drupal有一个安全团队排查Drupal内核以及第三方模块的安全问题。

其他关于提高Drupal安全性的建议可以在这里找到http://www.madirish.net/?article=490

使用测试站点

将您的站点公诸于世

可达性和Drupal

避免太多的模块

搭建站点功能

日期和事件

原文链接:https://drupal.org/node/627222

 

本章节将提供关于配置和管理日期和事件模块的信息。

日期/日历

原文链接:https://www.drupal.org/node/262062

DateCalendar模块是一套操作日期和日历的模块组合。它们包括Date API,用来创建能添加到任何内容类型的CCK日期字段(在D7中已集成在Entity)及通过Views模块显示日历日期的Calendar模块。

Drupal7 日期/日历

操作指南:为drupal7准备事件-日历

贡献模块

核心模块

版本发行

基础知识教程

站点建设工具箱

站点建设:初级、中级、高级

建站秘诀