Drupal

蒙懵猛孟今日裸奔

in Drupal, web

一年一度的CSS裸奔节到了。
我也在今天脱去CSS的外衣,将优雅的层次结构展示出来。
想参与或了解更多,请点击http://naked.webrebuild.org/

如何把博客从WordPress迁移到Drupal

in Drupal, web, WordPress

这个博客已经在Wordpress上呆了一年半,写的不多,但内容却杂乱不堪。当我把博客地址放到SNS,twitter或者邮件签名的时候,我都有点儿不自信:我为什么要把这个乱七八糟的博客作为自己的一个标识呢?

于是我下定决心要大力整顿它。但是我在WordPress的后台看着杂乱的url,不规则的tag我就慢慢失去信心。虽然说WordPress是很优秀的博客程序,但是我还是觉得驾驭它的能力有限,尤其当Drupal放在我面前的时候。一个对于自己几乎是黑盒,一个对于自己相对来说要透明一些。在这种情况下,我在测试环境实验了几次之后,决定将博客从WordPress迁移到Drupal。迁移过程还算顺利。

安装纯净的Drupal

为了不让其他的Drupal数据污染到你的迁移,有必要配置一个纯净的Drupal,然后完美变身为你的WordPress数据承载器。

使用wp2drupal来整体迁移数据库

wp2drupal能完美迁移WordPress到Drupal,包括日志、页面、分类、标签和用户。使用wp2drupal的前提是你希望迁移到的服务器能够访问原来WordPress所在服务器的数据库。我在第一次测试的时候就遇到过这样的问题。我在wp2drupal的setting页面填入了wordpress所在的服务器和数据库信息,但是试了好几次都没有成功。我本来以为是帐号或者密码输错了,去服务器上检查了好几次,但是都是一致的,最后查到原因是原来博客所在的主机数据库不允许localhost以外的host访问。我把数据库导进另外一个服务器就成功了。所以我建议做迁移的时候在本地做,把WordPress的数据库导在本地,然后直接在本地进行迁移,迁移好确认没有问题之后直接把本地配置好的Drupal部署到服务器上。
wp2drupal的使用很容易,输入各种参数就OK。但是貌似wp2drupal的path redirect有问题,说明里说把wp2drupal的目录设置为可写才可以用,但是我设置好了之后那个选项仍然是灰的。而且wp2drupal的path redirect是自己设计了一套redirect机制,我想倒不如直接用apache rewrite来设置,就没有使用wp2drupal的path redirect。
这样在不设置path redirect的前提下,迁移好之后的日志和页面没有任何的alias

使用path和apache rewrite设置alias

我这次设置alias有两层目的。第一是想把原来博客不统一的url格式统一起来,第二是把url设置到Drupal的别名系统里。

日志

我原来博客的日志url因为自己不明白改过很多次,导致现在在搜索引擎里的数据主要有两种,第一种是 Y/m/[article-title],比如"mengxy.net/2009/08/立秋",第二种是后来勤奋起来之后给每篇日志都另起了一个别名,比如"2010/01/luanke-unbelievable-holly/"。现在我的目标是把所有url都改成"url-alias"这种格式,不要日期,更干净。
那么我要做的是先把node path pattern设成[title-raw],把所有日志都改成标题的url,然后我再手动把自己改过的名字填上去,这样日志的标题就统一了。但是还有一个问题,我要把原来的url里的年和月去掉,这就需要做301定向了。
在根目录下的.htacess文件里填上下面的设置,

RewriteRule ^\d{4}/\d{2}/(.+)$ http://mengxy.net/$1 [R=301,L]

注意,这句话要放在下面这句话的前面:
  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.

这样日志的url就改好了。

标签

我原来的标签url格式是?tag=[tag-name],我现在想把它改成/[tag-name]。首先把现在的taxonomy设好url alias pattern:[catpath-raw],然后就要把原来的url做301定向了,在.htaccess里加下面这句:

RewriteCond %{QUERY_STRING} ^tag=(.*)$
RewriteRule ^$ <a href="http://mengxy.net/%1" title="http://mengxy.net/%1">http://mengxy.net/%1</a>? [R=301,L]

归档页

图省事,我打算新的归档页就用Views附送的那个归档格式,archive/Y+m,也就是archive/200910。而原来的格式是/2009/10。好吧,继续rewrite url,代码如下:

RewriteRule ^(\d{4})/(\d{2})$ http://mengxy.net/archive/$1$2 [R=301,L]

好了,这样折腾一番,原来WordPress的大部分常规链接就应该都迁移过来了。

Drupal hacks: 改变CCK的“Add another item”

in CCK, Drupal

从今天开始,我要陆续把工作中遇到的一些跟Drupal有关的小问题发上来,希望会给其他同学一些参考。这些问题基本上都是Drupal Core和一些比较常用Contribututed Module衍生出来的,在不修改核心代码的前提下,通过Hook系统或者主题来完成我们想要的效果。

Drupal的CCK模块有一个很方便的特性:多值字段。在field的setting里面,可以选择Number of values。官方的Help是这样描述的:

Maximum number of values users can enter for this field.
'Unlimited' will provide an 'Add more' button so the users can add as many values as they like.

当选择Unlimited之后,编辑node的时候在这个field的下面会出现一个"Add another item"的按钮。这样用户可以添加无数个这样的字段。我们可以利用这个特性让用户上传无限量的文件,图片。