Getting started with Migrate

本文纯属模块文档翻译,原文请移步: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

本文作者的其他联系方式:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值