CSV 導入以將 Drupal 7 遷移到 8 - 完整指南

已發表: 2020-02-11

Drupal 7 到 8 遷移絕不是無聊,因為有很多方法可以執行遷移! 根據項目的複雜程度,我們可以選擇最適合它的技術。 我們將在本博客中討論的內容和配置是使用 CSV 導入方法將內容和配置從 Drupal 7 遷移到 Drupal 8。

CSV-importer-drupal

Drupal 提供了各種模塊,用於從不同來源(如 JSON、XML 和 CSV)導入數據。 Drupal 8 核心遷移 API 系統提供了一整套 API,基本上可以處理從以前版本的 Drupal 到 Drupal 8 的任何類型的遷移。

Drupal 7 到 8 遷移之前的一些準備工作

為了使用 CSV 導入從 Drupal 7 遷移到 Drupal 8,我們需要這些模塊。

Drupal 7 模塊 -

  • 視圖數據導出:此模塊需要安裝在我們的 Drupal 7 站點中。 視圖數據導出模塊有助於以 CSV 格式導出數據。

  • 查看密碼字段:此模塊有助於遷移密碼,這些密碼將以散列格式發送密碼。

Drupal 8 模塊 -

  • Migrate – Drupal 8 Migrate 模塊有助於從各種來源提取數據到 Drupa 8。

  • Migrate Plus –這個 Drupal 8 模塊將有助於操作導入的源數據

  • 遷移 Drupal –該模塊支持將內容和配置遷移到 Drupal 8。

  • 遷移源 CSV –該模塊提供了一個源插件,可以將實體和內容從 .csv 文件遷移到 Drupal 8。

  • 遷移工具——這個 Drupal 8 模塊通過提供 UI 工具/Drush 命令來幫助管理遷移。

  • 配置開發模塊- 該模塊有助於將配置文件導入 Drupal 8。

讓 Drupal 8 遷移開始吧!

首先,我們需要為我們的Drupal 8 遷移創建一個自定義模塊 讓我們將此模塊命名為test_migrate 我們知道在創建自定義模塊後,我們需要創建info.yml文件。

csv1

上面的屏幕截圖顯示了info.yml所需的

一旦info.yml文件被創建,我們需要創建一個遷移組的遷移。 這個遷移組需要在路徑中創建: test_migration > config > install 組的名稱應該是migrate_plus.migration_group.test_migration.yml

csv2

上面的屏幕截圖顯示了創建遷移組的文件夾結構。

migrate_plus.migration_group.test_migration.yml文件中,我們需要為遷移組編寫 id、label 和 description,如下面的屏幕截圖所示。

csv3

創建遷移組後,我們需要在info.yml文件中安裝該組

文件

現在,我們將為用戶、分類術語、段落、內容類型編寫遷移腳本。 請注意,您以相同的順序遷移,因為這些實體之間將存在鏈接。 例如,內容將由特定用戶創建 - 因此我們首先需要遷移用戶,然後是分類法、內容類型。

現在讓我們在yaml文件中編寫一個用於用戶遷移的腳本 因此,為了編寫用戶遷移,我們需要名為migrate_plus.migration.test_migration_users.yml 的用戶yaml文件 和遷移腳本如下所示。

csv5

這些是我們需要遷移的源 csv 文件遷移所需的密鑰。 CSV文件應放置在路徑assets > csv > user.csv 中 下面還顯示了Users.csv

csv6

csv7

路徑- 表示 csv 文件的路徑。

header_row_count - 這將給出作為特定列的標題的行數。

- 每一行都應該是唯一的。

過程- 在這個過程中,我們將 csv 文件映射到字段。

csv8

上圖顯示了字段和 csv 之間的映射。 這裡,name 是用戶名字段的機器名稱,title 是 csv 列標題。 如果單個字段有多個數據,則我們使用分隔符。 在這種情況下,用戶可能有多個角色,我們像上圖所示那樣編寫。

通過編寫自定義插件遷移圖像。 自定義插件可以寫在路徑src > plugin > migrate > process 中 在上圖中可以看到user_image_import_process是一個自定義插件,用於遷移用戶圖像。

csv9

UserImportProcess.php 中,我們正在編寫將復製圖像並將其保存到目的地的函數。 腳本如下圖所示。

csv10

為了確定圖像應該保存在哪裡,我們將再編寫一個函數ImageImportprocess 在該函數中,我們將提及圖像的機器名稱。

csv11

在用戶info.yml文件中有一個目標部分,它將指示遷移數據的存儲位置以及哪個是實體。 這在下圖中標記。

csv12

在為用戶創建代碼後,我們需要為分類術語編寫 yaml。 請注意,如果您的分類法中只有標題字段,則無需編寫單獨的 yaml 文件。 如果分類術語中有多個字段,則需要編寫單獨的 yaml 文件。 在分類術語中,我們將tid作為關鍵,因為tid對於每個術語都是唯一的。

csv13

在此之後,我們將遷移段落。 為此,我們需要創建一個單獨的 yaml 文件。 要遷移的代碼如下圖所示。

csv14

最後,讓我們遷移內容類型。 內容類型的 yaml 文件顯示在下面的代碼中。

label : '從 csv 文件遷移內容類型數據'

遷移組:測試遷移

來源 id :test_migration_content

插件:.csv

# 文件的完整路徑。

路徑 'modules/custom/test_migrate/assets/csv/content.csv'

header_row_count : 1

- 無

過程

# 添加字段和csv列之間的映射。

標題:標題

提升:promoted_to_front_page

粘性:粘性

字段顯示名稱:顯示名稱

field_marketing_tagline :marketing_tagline

field_taxonomy

插件:entity_lookup

來源:分類學

entity_type : taxonomy_term

bundle_key : 視頻

捆綁:分類

value_key : 名稱

身體/值:身體

正文/格式

插件:default_value

DEFAULT_VALUE:“full_html”

字段段

-插件:爆炸

分隔符 “|”

來源:fcid

-插件:skip_on_empty

方法:過程

-插件:migration_lookup

遷移:test_migration_paragraphs

no_stub : 真

-插件:迭代器

過程

目標 ID '0'

target_revision_id : '1'

目的地

插件 '實體:節點'

default_bundle : 內容

遷移依賴

要求

- test_migration_paragraph

- test_migration_taxonomy

依賴項:{}

寫入所有 yaml 文件後,遷移test_migrate.info.yml包含以下安裝。

csv15

完成所有這些步驟後,轉到您的站點並安裝您的自定義模塊。

csv16

接下來,在終端中轉到您的項目並運行此“drush ms”命令以檢查遷移狀態,如下圖所示。

csv17

要遷移,請使用命令drush mim migration-id 我們可以在上圖中看到遷移 ID。

完成後,如果您檢查遷移狀態,您可以看到遷移的項目數。

csv18

現在您可以觀察到所有內容都已遷移。 如果數據遷移中出現任何錯誤,則該過程將在該特定實例處終止。 檢查該內容的問題,然後您可以再次重新啟動遷移。

要記住的事情

  • 如果遷移在進程之間終止,遷移狀態將顯示為“正在導入”。 為了將狀態更改為空閒,您需要運行命令drush mrs migration-id 接下來,運行命令drush mim migration-id

  • 如果要回滾遷移的內容,則運行命令drush mr migration-id

  • 如果您在開始遷移過程後更改了代碼中的任何內容,請確保運行命令drush cdi test_migration 此命令將幫助您在遷移時反映更改。 完成後,對您的網站進行徹底檢查,看看是否所有內容都已遷移。