有些drupal的模块也许更有名、更流行,我却觉得不好用。

比如说freelinking。freelinking能基本实现上述wiki式链接的第2、3点功能,即[[]]自动变成链接,点击链接能转到文章,文章不存在则创建。freelinking几乎无需设置,使用方便。然而,它有一个巨大的缺点:URL不能自己设置,必须带有freelinking字样

freelinking会自动生成形如http://example.com/freelinking/wolfram的URL,如果是中文更糟糕,会变成一串“乱码”:http://example.com/freelinking/%25E5%2593%2588%25E5%2593%2588。

URL的/freelinking/部分是自己生成的,不能修改,然而,点击之后它会跳转到真正的链接。这样,同样的内容页面却有了多个不同的URL,不论是用户感受还是搜索引擎优化方面都很不利。

即使用global redirect模块进行URL重定向也不能解决这个问题。因为global redirect只能决定跳转到哪个链接,却无法改变实际显示在页面上的、freelinking生成的链接。

一个网站的链接结构应该是有整体规划的,并且带有一定语义,易于访问者理解。比如,我可能希望有http://example.com/wiki/和http://example.com/blog/这两个二级目录,并让它们都支持wiki风格的链接。但我可不喜欢让它们都变成http://example.com/freelinking/xxx。

此外,将/freelinking/这样的字符串硬编码到模块中,本身也不是值得推荐的作法。

将默认链接中的/freelinking/字样去掉,或者改成可以设置的,那样会好很多。我不明白他们为什么不这样做。

后来听说freelinking推出了一个开发中的新版本(6.x-3.0-alpha1),做了许多改进,于是我想试一试,结果发现了freelinking的另一个很让人不满的缺点:

安装时freelinking往数据库中记录了许多数据,却没有提供卸载的功能。当我想安装新版本时,旧版本总横在路上,无论是覆盖、升级还是并存都不行。最后无奈,我只得到数据库中手动删除了freelinking的表,也不知删得干不干净。

往数据库中写入大量数据却不提供清除的功能,显然也是欠考虑的作法。

此外,新版freelinking必须先安装Prepopulate模块。Prepopulate模块的作用是根据URL里提供的参数自动填写表单,比如http://example.com/node/add/blog?edit[title]=thistitle,会自动把title字段填上thistitle字样。

这个功能听上去挺不错的,然而令人很囧的是,我把这个模块卸载之后,发现drupal仍然具有这个功能。在从未装过此模块的drupal上试验,仍然有此功能。那么此模块的意义何在呢……

我的drupal是6.x版本,也许Prepopulate模块是为较古老的版本设计的?然而freelinking的6.x-3.0-alpha1版显然是为drupal 6.x开发的。所以,我完全不能理解他们了。

最后,freelinking 6.x-3.0-alpha1版自动生成的URL更让人无语:不管目标页面是否存在,它显示的URL都是http://example.com/node/add/blog?edit[title]=thistitle 的形式。并且,如果目标页面存在的话,点击进去的会是浏览页面而不是edit(编辑)页面

这种反逻辑的URL形式我实在难以接受。

说了这些缺点,并不代表freelinking是个一无是处的模块。如果你对自定义的要求不是很高,只希望简单方便上手快的话,freelinking也不失为一个好的选择。