因为工作的原因,需要基于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 -> perfromance 

  • 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  | 文章有帮助,可以请我喝杯咖啡