Drupal 7から8に移行するためのCSVインポート-完全ガイド
公開: 2020-02-11Drupal 7から8への移行は、移行を実行する方法が非常に多いため、退屈ではありません。 プロジェクトの複雑さに応じて、プロジェクトに最適な手法を選択できます。 このブログで説明するのは、CSVインポート方法を使用してコンテンツと構成をDrupal7からDrupal8に移行することです。

Drupalは、JSON、XML、CSVなどのさまざまなソースからデータをインポートするためのさまざまなモジュールを提供します。 Drupal 8コア移行APIシステムは、以前のバージョンのDrupalからDrupal8へのあらゆる種類の移行を本質的に処理できるAPIのスイート全体を提供します。
Drupal7から8への移行前の準備作業
CSVインポートを使用してDrupal7からDrupal8に移行するには、これらのモジュールが必要です。
Drupal7モジュール-
ビューデータのエクスポート:このモジュールは、Drupal7サイトにインストールする必要があります。 ビューデータエクスポートモジュールは、CSV形式でデータをエクスポートするのに役立ちます。
ビューパスワードフィールド:このモジュールは、ハッシュ形式でパスワードを送信するパスワードの移行に役立ちます。
Drupal8モジュール-
移行– Drupal 8 Migrateモジュールは、さまざまなソースからDrupa8にデータを抽出するのに役立ちます。
Migrate Plus –このDrupal 8モジュールは、インポートされたソースデータの操作に役立ちます
Drupalの移行–このモジュールは、コンテンツと構成をDrupal8に移行するためのサポートを提供します。
ソースCSVの移行–このモジュールは、エンティティとコンテンツを.csvファイルからDrupal8に移行できるソースプラグインを提供します。
移行ツール–このDrupal 8モジュールは、移行を管理するためのUIツール/ Drushコマンドを提供することで役立ちます。
構成開発モジュール–このモジュールは、構成ファイルをDrupal8にインポートするのに役立ちます。
Drupal 8の移行を始めましょう!
まず、 Drupal8移行用のカスタムモジュールを作成する必要があります。 このモジュールにtest_migrateという名前を付けましょう。 また、カスタムモジュールを作成した後、 info.ymlファイルを作成する必要があることもわかっています。

上のスクリーンショットは、 info.ymlに必要なキーを示しています。
info.ymlファイルが作成されたら、移行用の移行グループを作成する必要があります。 この移行グループは、次のパスに作成する必要があります: test_migration> config> install 。 グループの名前はmigrate_plus.migration_group.test_migration.ymlである必要があります。

上のスクリーンショットは、移行グループを作成するためのフォルダー構造を示しています。
次のスクリーンショットに示すように、 migrate_plus.migration_group.test_migration.ymlファイル内に、移行グループのID、ラベル、および説明を書き込む必要があります。

移行グループを作成したら、このグループをinfo.ymlファイルにインストールする必要があります。

次に、ユーザー、分類用語、段落、コンテンツタイプの移行スクリプトを作成します。 これらのエンティティ間にリンクがあるため、同じ順序で移行することに注意してください。 たとえば、コンテンツは特定のユーザーによって作成されるため、最初にユーザーを移行し、その後、コンテンツタイプを移行する必要があります。
それでは、ユーザー移行用のスクリプトをyamlファイルに記述しましょう。 したがって、ユーザー移行を作成するには、 migrate_plus.migration.test_migration_users.ymlという名前のユーザーyamlファイルが必要です。 移行のスクリプトを以下に示します。

これらは、移行する必要があるここでのソースcsvファイルの移行に必要なキーです。 Csvファイルは、パスアセット> csv> user.csvに配置する必要があります。 Users.csvも以下に表示されます。


パス-csvファイルのパスを示します。
header_row_count-これは、特定の列のヘッダーである行数を示します。
キー-すべての行で一意である必要があります。
プロセス-これでは、csvファイルをフィールドにマッピングしています。

上の画像は、フィールドとcsvの間のマッピングを示しています。 ここで、nameはユーザー名フィールドのマシン名であり、titleはcsv列のタイトルです。 1つのフィールドに複数のデータがある場合は、区切り文字を使用します。 ユーザーは複数の役割を持っている可能性があります。その場合、上の画像に示すように記述します。
カスタムプラグインを作成することにより、画像が移行されます。 カスタムプラグインは、パスsrc>プラグイン>移行>プロセスで記述できます。 上の図では、 user_image_import_processがユーザーイメージを移行するために作成されたカスタムプラグインであることがわかります。

UserImportProcess.php内に、画像をコピーして宛先に保存する関数を記述しています。 スクリプトは下の画像に示されています。

画像を保存する場所を特定するために、もう1つの関数ImageImportprocessを記述します。 その関数では、イメージのマシン名について説明します。

ユーザーのinfo.ymlファイルには、移行されたデータが保存される場所とエンティティを示す宛先セクションがあります。 これは下の画像でマークされています。

ユーザー向けのコードを作成したら、分類用語のyamlを作成する必要があります。 分類法にタイトルフィールドしかない場合は、別のyamlファイルを作成する必要がないことに注意してください。 分類用語に複数のフィールドがある場合は、別のyamlファイルを作成する必要があります。 TIDは、各用語に対して一意になりますので、分類学の用語では、我々は、キーとしてTIDています。

この後、段落を移行します。 そのためには、別のyamlファイルを作成する必要があります。 移行するコードを次の画像に示します。

最後に、コンテンツタイプを移行しましょう。 コンテンツタイプのyamlファイルを以下のコードに示します。
label : 'csvファイルからコンテンツタイプデータを移行します'
移行グループ:test_migration
ソース: id :test_migration_content
プラグイン:csv

#ファイルへのフルパス。
パス: 'modules / custom / test_migrate / Assets / csv / content.csv'
header_row_count :1
キー:
--nid
プロセス:
#フィールドとcsv列の間にマッピングを追加します。
タイトル:タイトル
プロモート:promoted_to_front_page
スティッキー:スティッキー
field_display_name :display_name
field_marketing_tagline :marketing_tagline
field_taxonomy :
プラグイン:entity_lookup
出典:分類法
entity_type :taxonomy_term
bundle_key :vid
バンドル:分類法
value_key :名前
本体/値:本体
本文/フォーマット:
プラグイン:default_value
default_value : "full_html"
field_paragraph :
-プラグイン:爆発
区切り文字: "|"
ソース:fcid
-プラグイン:skip_on_empty
メソッド:プロセス
-プラグイン:migration_lookup
移行:test_migration_paragraphs
no_stub :true
-プラグイン:イテレータ
プロセス:
target_id : '0'
target_revision_id : '1'
目的地:
プラグイン: 'entity:node'
default_bundle :コンテンツ
migration_dependencies :
必須:
--test_migration_paragraph
--test_migration_taxonomy
依存関係:{}
すべてのyamlファイルを書き込んだ後、移行test_migrate.info.ymlには以下のインストールが含まれます。

これらの手順をすべて完了したら、サイトに移動してカスタムモジュールをインストールします。

次に、ターミナルでプロジェクトに移動し、この「drush ms」コマンドを実行して、次の図に示すように移行ステータスを確認します。

移行するには、コマンドdrush mimmigration-idを使用します。 上の画像で移行IDを確認できます。
完了したら、移行ステータスを確認すると、移行されたアイテムの数を確認できます。

これで、すべてのコンテンツが移行されていることを確認できます。 データ移行でエラーが発生した場合、プロセスはその特定のインスタンスで終了します。 そのコンテンツの問題を確認してから、もう一度移行を再開できます。
覚えておくべきこと
プロセスの途中で移行が終了した場合、移行のステータスは「インポート中」と表示されます。 ステータスをアイドルに変更するには、コマンドdrush mrsmigration-idを実行する必要があります。 次に、コマンドdrush mimmigration-idを実行します
移行されたコンテンツをロールバックする場合は、コマンドdrush mrmigration-idを実行します。
移行プロセスの開始後にコード内で何かを変更した場合は、必ずコマンドdrush cditest_migrationを実行してください。 このコマンドは、移行中に変更を反映するのに役立ちます。 完了したら、サイトを徹底的にチェックして、すべてのコンテンツが移行されているかどうかを確認します。
