跳转到主要内容
络绎 提交于 6 January 2013

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

最佳实践就是将所有的贡献module和主题都放在sites/all/modulessites/all/themes文件夹下,这样做比较恰当。如果你正在升级版本,或者已经在主目录/modules 或/themes下安装了他们,但你希望移动他们,这是可以的,但你需要让Drupal知道你在做什么。

  1. 进入Administer > Site Building > Modules(或Themes),禁用你想挪动的module/主题。
  2. 将他们移动到你想要放置它们的地方。
  3. 现在回到管理菜单重新启用它们。Drupal会定位它们的新目录,然后根据需要更新系统配置数据表。

偶尔你会得到一个PHP错误:

Fatal error: Call to undefined function myfunction()

这是因为Drupal不知道你的module被放在哪儿了。如果这样,你可能需要强制重新构建系统数据表。

 

重新构建系统表

每次你访问admin/build/modules的时候,系统表都会重新构建。所以如果你移动了module但忘记事先禁用它了,只要访问modules页面应该就会好了。

但是这个方法在Drupal 6以上的版本可能不奏效。一些贡献的module因为存储在设置里的路径原因可能不会回来,还可能引发一系列的数据库错误。这些情况下,试试完全卸载这个module。或者把它放回到原来的路径下。直接更改数据库中的路径也是可以的。

始终记得要先备份。

在Drupal 7下使用Drush

如果在Drupal 7下挪动一个module,就完全不用通过禁用module这一系列的艰难步骤。有Drushregistry rebuild功能可以帮你做到这一切。Registry Rebuild可以抹掉注册的信息,然后重写module在数据库中的路径。

如果你在服务器上没有使用Drush的权限,或者你不使用Drush,你还可以按照项目上的指导使用PHP实现。当然,首先还是推荐Drush。

使用Drush重建注册表

把module移动到你想要的地方。然后运行drush rrdrush cc all,然后可能还要再运行一次drush rr。这样就完成了。

这个命令仅仅修改系统表,如果其他的module存储了路径,那么移动后,这些module就不会工作了,就像之前所说的。然而,这些module应该是特例,重建注册表大多数时候都会生效的。