1つのDrupal 7インストールから別のインストールにファイルを移行するために、migrate/migrate_d2dを使用してファイルの移行を書いています。
画像には、テキストフィールド「field_boilerplate」を含むカスタムフィールドが添付されています。このフィールドは、宛先サイトの画像タイプに存在します。移行を実行すると、イメージ自体が移行されてイメージエンティティが作成されますが、field_boilerplateは入力されません。
何が問題なのですか、またファイルに添付されたフィールドを移行するにはどうすればよいですか?
Mymodule.moduleで:
/**
* Implements hook_flush_caches().
*/
function mymodule_flush_caches() {
mymodule_migrate_register_classes();
}
/**
* Register dynamic migration classes
*/
function mymodule_migrate_register_classes() {
// Arguments common to all migrations
$common_args = array(
'source_connection' => 'mysite_legacy',
'source_version' => 7,
'group_name' => 'mymodule_migration',
);
// Other migration arguments redacted for length
// Image migration arguments
$image_args = array(
'machine_name' => 'images',
'class_name' => 'MyModuleImageMigration',
'description' => t('Migrate images'),
'user_migration' => 'users',
'default_uid' => 1,
'source_dir' => 'http://example.com/sites/default/files',
'destination_dir' => 'public://',
'skip_pictures' => TRUE,
);
Migration::registerMigration('MyModuleImageMigration', 'images', $image_args + $common_args);
}
/**
* Implements hook_migrate_api().
*/
function mymodule_migrate_api() {
return array('api' => 2);
}
インクルードファイル:
<?php
class MyModuleImageMigration extends DrupalFile7Migration {
public function __construct($arguments) {
parent::__construct($arguments);
// Mappings
$this->addFieldMapping('field_boilerplate', 'field_boilerplate');
}
}
動的移行を登録するときに、バンドルタイプを指定する必要があります。
$image_args = array(
'machine_name' => 'images',
'class_name' => 'MyModuleImageMigration',
'description' => t('Migrate images'),
'user_migration' => 'users',
'default_uid' => 1,
'source_dir' => 'http://example.com/sites/default/files',
'destination_dir' => 'public://',
'skip_pictures' => TRUE,
'bundle' => 'image', // Need to add the bundle type
);
Migration::registerMigration('MyModuleImageMigration', 'images', $image_args + $common_args);