因为工作的原因,需要基于 Drupal 做开发,因此不得不从零开始系统的了解 Drupal 以及尝试完成以下的一系列工作,包括:

  • 升级 Drupal 6 到 Drupal 7
  • 编写一个灵活性非常高的 Drupal 模板
  • 将其他系统通过模块组合的形式在 Drupal 中实现,并迁移数据
  • 基于多台服务器,通过 Nginx+Memcached 对 Drupal 做简单的分布式部署
  • 通过一套 Drupal 系统支持多个子域名并实现不同模板,不同功能

经过 2 周的时间,基本完成了前 2 项工作,觉得有必要将很多东西记录下来备忘及分享。那么首先还是谈一些我对 Drupal 的整体感受以及开发中要注意的点

# Drupal 为什么难

提起 Drupal 似乎看到最多的字眼就是“难上手”、“学习曲线陡峭”这样的词汇,而实际体验了一下,确实如此。但是问题应该进一步化简为:Drupal 为什么难,可以归结到哪些问题点?这样才有可能将其一一解决,让难事变得简单,而不是一味的抱怨。

在我看来,Drupal 之所以难,主要可以归结到下面的点:

  1. 中文资料稀缺,需要比较好的资料查找能力和英文阅读能力。
  2. Drupal 教程中很多有很多基础的注意事项没有说清楚,环境搭建往往被一笔带过,而这些很细小的问题却往往是最困扰初学者的。
  3. Drupal 教程总是侧重于介绍工作原理,缺少对于实际情况的应对方法。
  4. Drupal 的进阶功能几乎都是基于第三方模块的,有些模块的复杂程度甚至高于内核,但是一般教程中只涉及 Drupal 内核,给人的感觉是看完一本 Drupal 的书,还是什么都干不了。
  5. Drupal 自定义的规则非常多,无论是主题开发还是模块开发,要求开发者对系统的了解程度高于其他框架

那么对于这些存在的问题应当如何解决呢。

对于问题 1,我在之前的关于不要重复造轮子的二三事中也有过一些解决方法。可以说英文阅读能力是程序员的核心基本功了,如果不去设法提高自己的能力,而靠为数不多的中文资料过活或者转投一些不成熟的国产 CMS,无形中你就已经给自己设置了一道难以跨越的 GFW。

对于教程的问题,我本人一向是彻底的实践派,尤其鉴于 Drupal 大量依赖模块的特性,可能即便从头到尾看完一本书,遇到实际项目还是无从下手。只是有一些事项需要注意一下,详见后文。

而对于 Drupal 繁多琐碎的 Hook 系统,可以说是一把双刃剑,既带来了灵活的处理方式,相应的也带来了更重的学习负担。不过其实还是可以在一定程度上取巧的,比如主题开发,按 Drupal 的设计,合格的主题需要复用 Drupal 规定的标签及属性,这样做的目的是可以借助 CMS 的 Block 管理管理员在后台可以自由组织页面,这样意味着我们没有办法自由组织 HTML 标签,让主题定制有很大的限制。但其实实际项目中我们无需那么规范的主题,因为大部分页面都会有唯一固定的布局。活用 Views/Services 完全可以在短时间内以不依赖 Drupal 规则快速上手,关于这一点可能会在之后的日志中说明。

# 开始 Drupal 项目的注意点

下面都是一些我在开始 Drupal 项目后总结的注意点/坑点,总结如下:

# 经验谈 1:恢复后台界面为英文

虽然中文界面可能在短期内用起来会舒服一点,但是从长远计,无论是检索资料还是参考其他文章时,英文关键词能带来更准确的结果,避免因为翻译引起的操作误区。

# 经验谈 2:安装模块后第一时间到权限页面去开启

安装模块后,需要提醒自己第一时间去模块的权限页面去设置权限, 即 Administration › People › Permissions

只有开启权限后才能在后台进行进一步的设置。

# 经验谈 3:开发时关闭缓存

Drupal 内置了大量的缓存机制来提升性能,但是在开发环境中,最好将其全部关闭,才能最快的看到修改的结果

进入后台

administer -> configuration -> performance

  • Cache pages for anonymous users
  • Cache blocks

都取消勾选。

另外为了让主题的修改即时生效,需要在主题的 template.php 的最上方加入

drupal_theme_rebuild();

# 经验谈 4:避免修改 Drupal 核心文件

在 Drupal 的文件结构中,模块与主题可以安装在drupal/modulesdrupal/themes下,也可以安装在drupal/sites/all/modulesdrupal/sites/all/themes下。建议选择后者,这也是官方所推荐的。因为这样一来,项目的修改可以集中在sites目录下,当 Drupal 版本升级时,可以直接覆盖所有核心文件而无需有其他的担心。

当然 Drupal 由于将 web 根目录设定在代码的根目录,从安全角度考虑不注意的话可能会被访问到类库的文件,所以可以控制一下除sites目录以外的文件权限。

# 经验谈 5:Drupal 报错时的处理

由于 Drupal 自己接管了 php 的错误处理,所以一般发生数据库错误时,屏幕只会出现

The website encountered an unexpected error. Please try again later.

的提示。

一般来说如果发生这种错误,可以在后台 Administration › Reports › Recent log messages 查看错误日志。

但如果有时候发生了更恶劣的情况,比如安装了某些模块,可能会报出上述错误并且连后台都无法进入。

那么此时可以去数据库查看 watchdog 数据表,variables 字段保存了错误信息,可以用编辑器打开查看错误明细(这需要启用 Database logging 模块)。

Tags :Drupal

Donate:Buy me a coffee|文章有帮助,可以请我喝杯咖啡