ノードのみを移行する方法はありますか?


7

完全な移行をしたくありません。ノードのみ(できればメタタグメタデータも含む)のみを移行したい。ビュー、パネル、コンテキスト、URLリダイレクトではなく、ノードのみ...

完全なD7 >> D8アップグレードでいくつかの問題が発生した後、およびDrupalアップグレードモジュールを使用するときに、これについて尋ねます(DAでこのスレッドを開きました)。したがって、部分的な移行のみを行う方法、または部分的に移行する方法を探しています。

ノードに関しては可能ですか?


1
XMLにエクスポートし、フィードをインポートに使用することをお勧めしますが、「このモジュールは現在Drupal 8に移植されていますが、まだ使用できません。」オプションではありません。まだ。
Mołot

drupal.org/project/bundle_copyを見てください。データではなく構造のみがエクスポートされ、フィードモジュールを使用してインポートデータがエクスポートされます
Bala

@ Bala、D7 >> D8移行に関してそれを試しましたか?または、少なくとも、あなたはそれが最もうまくいくと思いますか?

@benosまだです!私はオプションを提案しています、それはあなた次第です
バラ

回答:


9

完全な移行を行う必要はありません。古いサイトに接続してアップグレードプロセスを初期化すると、移行が作成されます。その後、それらを自動的に実行する代わりに、upgrade_toolsプロジェクトが提供するUIを使用してそれらの一部のみを実行できます(私はそう思いますか?)。

ただし、移行には依存関係があります。ノードの移行を実行できるようにするには、デフォルトで、ユーザー、テキスト形式、フィールドなど、他のいくつかを実行する必要があります。

drush ceditまたはexport / importを使用して、作成されたマイグレーションを編集することで、これを変更することができます。誰かがそのためのUIにも取り組んでいると思います。

マッピングやフィールドの移行方法をカスタマイズすることもできます。デフォルトの動作では、すべてのフィールドと構成が1対1で移行されますが、正直なところ、ほとんどのサイトでこれが実行されることは想像できません。代わりに、彼らが新しいD8サイトを構築し、コンテンツをインポートすることを想像しています。

移行のドキュメントをご覧ください。そのトピックの周りにはすでにたくさんのブログ投稿がありますが、それは簡単なことではありません。

または、コメントで述べたように、コンテンツをエクスポート/インポートすることもできます。フィードはまだ準備ができていませんが、カスタムコードを記述してビューのエクスポートとインポートを使用できます。


Drupalアップグレードモジュールで深刻な問題が発生し(現在まで続いています)、使用できないようです。:私はここでは詳細にそれを説明してきたdrupal.stackexchange.com/questions/185364/...

Berdir、あなたは「私は彼らが新しいD8サイトを構築してからコンテンツをインポートすると思います」と書いた。まあ、それは私にとって素晴らしい音です、コンテンツを直接インポートする方法はありますか?つまり、現在の(おそらくまだ実験的な)モジュールを使用せずに、D7サイトのすべてのノードを同じサーバー上のD8サイトに書き換えるボットがあるのですか?

、私は今、同様のリンクをチェックしますが、あなたがあなた自身の言葉で上記の私の質問にここで答えることができれば、それは素晴らしいことができ

5

これには移行が少し重くなります。drupal 7では、コンテンツのインポート/エクスポートのみのモジュールがいくつかありました。drupal 8では、準備ができているものはまだ見つかりませんでした。だから私は少しのコードで即興で:

私はモジュールの助けを借りてcsvへのビューでdrupal 7でエクスポートを行いました:

views_data_export

drupal 8では、php-libraryを使用しました。

parsecsv-for-php

そしてこのコード:

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がすでにそこにあるかどうかを確認できます。


1

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のリストを取得し、必要に応じてそれらをスキップします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.