完全な移行をしたくありません。ノードのみ(できればメタタグメタデータも含む)のみを移行したい。ビュー、パネル、コンテキスト、URLリダイレクトではなく、ノードのみ...
完全なD7 >> D8アップグレードでいくつかの問題が発生した後、およびDrupalアップグレードモジュールを使用するときに、これについて尋ねます(DAでこのスレッドを開きました)。したがって、部分的な移行のみを行う方法、または部分的に移行する方法を探しています。
ノードに関しては可能ですか?
完全な移行をしたくありません。ノードのみ(できればメタタグメタデータも含む)のみを移行したい。ビュー、パネル、コンテキスト、URLリダイレクトではなく、ノードのみ...
完全なD7 >> D8アップグレードでいくつかの問題が発生した後、およびDrupalアップグレードモジュールを使用するときに、これについて尋ねます(DAでこのスレッドを開きました)。したがって、部分的な移行のみを行う方法、または部分的に移行する方法を探しています。
ノードに関しては可能ですか?
回答:
完全な移行を行う必要はありません。古いサイトに接続してアップグレードプロセスを初期化すると、移行が作成されます。その後、それらを自動的に実行する代わりに、upgrade_toolsプロジェクトが提供するUIを使用してそれらの一部のみを実行できます(私はそう思いますか?)。
ただし、移行には依存関係があります。ノードの移行を実行できるようにするには、デフォルトで、ユーザー、テキスト形式、フィールドなど、他のいくつかを実行する必要があります。
drush ceditまたはexport / importを使用して、作成されたマイグレーションを編集することで、これを変更することができます。誰かがそのためのUIにも取り組んでいると思います。
マッピングやフィールドの移行方法をカスタマイズすることもできます。デフォルトの動作では、すべてのフィールドと構成が1対1で移行されますが、正直なところ、ほとんどのサイトでこれが実行されることは想像できません。代わりに、彼らが新しいD8サイトを構築し、コンテンツをインポートすることを想像しています。
移行のドキュメントをご覧ください。そのトピックの周りにはすでにたくさんのブログ投稿がありますが、それは簡単なことではありません。
または、コメントで述べたように、コンテンツをエクスポート/インポートすることもできます。フィードはまだ準備ができていませんが、カスタムコードを記述してビューのエクスポートとインポートを使用できます。
これには移行が少し重くなります。drupal 7では、コンテンツのインポート/エクスポートのみのモジュールがいくつかありました。drupal 8では、準備ができているものはまだ見つかりませんでした。だから私は少しのコードで即興で:
私はモジュールの助けを借りてcsvへのビューでdrupal 7でエクスポートを行いました:
drupal 8では、php-libraryを使用しました。
そしてこのコード:
require_once('parsecsv.lib.php');
$csv = new parseCSV();
$csv->auto($filepath);
foreach ($csv->data as $key => $row) {
$node = entity_create('node', array('type' => 'article', 'title' => $row['title'], 'uid' => $row['uid']));
$node->langcode->value = 'en';
$body = $row['body'];
$body = str_replace('http://host1.com/', 'http://host2.com/', $body);
$node->body->value = $body;
$node->body->format = 'full_html';
...
$node->save();
}
利点は、drupal 7のパスを置き換えるなどの独自の調整を行ったり、固定言語を設定したりできることです。そして、すべての依存関係が満たされているかどうか、たとえばuidがすでにそこにあるかどうかを確認できます。
D8の移行モジュールはデフォルトですべてのコンテンツタイプを移行するため、一部のコンテンツタイプは移行からスキップしました。カスタムモジュールのコンテンツタイプをスキップするために、hook_migrate_prepare_rowを使用しました。
function hook_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
// Ignore content types from being migrated.
if ($migration->id() == 'd6_node_type') {
$ignore_content_types = array('content_type1', 'content_type2');
if (in_array($row->getSource()['type'], $ignore_content_types)) {
return FALSE;
}
}
// Ignoring content of 4 content types.
$ignore_content_types_content = array('d6_node__content_type1', 'd6_node__content_type2');
if (in_array($migration->id(), $ignore_content_types_content)) {
return FALSE;
}
}
より詳しい情報。- https://www.drupal.org/node/2641912
drush migrate-statusコマンドを使用して移行IDのリストを取得し、必要に応じてそれらをスキップします。