本文纯属模块文档翻译,原文请移步:Getting started with Migrate,基于Drupal的Migrate模块(7.x-2.5)来意译,可能随时间增长会有少量改动。如果您需要转载原文请同时提供原文的URL地址,如果要引用这篇中文的翻译文章,也请在清晰的地方提供本文的原文地址,谢谢。
如果想要基于Migrate的框架来开发,那么你需要在你自己写的模块中实现你自己的Migration相关的class。
举例
Migrate模块已经包含了一些可以直接工作的示例模块。可以从migrate_example模块开始迅速的进行开发。首先你可以从头到尾的开一下migrate_example/beer.inc这个文件,其中包含了开发Migrate整个过程的主要方面。如果想要了解一个migration模块的结构,也可以看migrate_example.info、migrate_example.migrate.inc、migrate_example.module(which would be empty if it didn't have to explain why it's empty!这句话不明白怎么表达了)等文件。
winc.inc文件包含了更多高级的开发技术,同时也为simpletests模块提供了测试用例。另外还有migrate_example_baseball模块,展示了动态注册迁移(dynamic registration of migrations)和从CSV文件导入的方法,以及migrate_example_oracle模块展示了如果从Oracle数据服务器导入数据。
实现你自己的Migration
在你自己的modules目录下创建一个目录(通常在sites/all/modules/custom)并添加.info、.migrate.inc和.module文件。例如,如果遗留下来的CMS名字叫XYZ,那么你可以创建一个migrate_xyz目录来存放这些文件。
migrate_xyz.info
在.info文件中你需要写明白那些模块是你这个模块运行所需要的依赖模块,以及其他的相关的文件,例如:
name = "Migrate from XYZ"
description = "Module to migrate my old site content to Drupal 7"
package = "Migration"
core = 7.x
dependencies[] = migrate
# include the files that contain your Migrate classes
files[] = migrate_xyz.migrate.inc
files[] = user.inc
files[] = forum.inc
files[] = gallery.inc
files[] = roles.inc
你必须在这里罗列那些包含了你自己实现migration类的文件,这样Drupal自身的类注册机制能找到这些类。当你改动(添加或者重命名.inc文件)了在这里罗列的文件后,需要清除缓存以便重新注册你的这些类。
migrate_xyz.migrate.inc
为了让Migrate模块认出你定义的这些类,你必须实现hook_migrate_api()。最好将代码写在migrate_xyz.migrate.inc文件中,这样这些代码只会在需要使用的时候加载进来。
在你自己实现的hook_migrate_api()中,你需要返回一个包含你自己migration的代码的数组:
- api:代码支持的Migrate模块的版本(当前只支持2.x)
- groups:一个数组(包含‘title’作为key的域,操作人员能看的组名,具体看实例代码)
- migrations:一个数组(包含‘class_name’作为key的域,值是那个你自己实现的类名)
- destination handlers:一个包含了那些你自己实现destination handlers类的名字的数组
- field handlers:一个包含了那些你自己实现的field handlers类的名字的数组
举例:
<?php
function migrate_xyz_migrate_api() {
$api = array(
'api' => 2,
'groups' => array(
'xyz' => array(
'title' => t('XYZ Migrations'),
),
),
'migrations' => array(
'XyzUser' => array(
'class_name' => 'MigrateXyzUserMigration',
'group_name' => 'xyz',
),
'XyzArticle' => array(
'class_name' => 'MigrateXyzArticleMigration',
'group_name' => 'xyz',
),
),
);
return $api;
}
?>
migrate_xyz.module
这个文件一般是空的,除非你需要实现一些其他的Drupal的Hooks(例如,如果你这个模块需要提供一个UI界面,那你最少需要实现migrate_xyz_menu())。
View your migration classes
当你启用了你的模块,你可以通过drush的命令看到可以使用Migrate UI dashboard的migrations,命令是
drush migrate-status:
$ drush migrate-status
Group: xyz Total Imported Unprocessed Status Last imported
XyzUser 28 28 0 Idle 2012-04-05 22:26:33
XyzArticle 2102 2102 0 Idle 2012-04-02 16:00:18
本文作者的其他联系方式: