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

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文件。

上面的屏幕截圖顯示了info.yml所需的鍵。
一旦info.yml文件被創建,我們需要創建一個遷移組的遷移。 這個遷移組需要在路徑中創建: test_migration > config > install 。 組的名稱應該是migrate_plus.migration_group.test_migration.yml 。

上面的屏幕截圖顯示了創建遷移組的文件夾結構。
在migrate_plus.migration_group.test_migration.yml文件中,我們需要為遷移組編寫 id、label 和 description,如下面的屏幕截圖所示。

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

現在,我們將為用戶、分類術語、段落、內容類型編寫遷移腳本。 請注意,您以相同的順序遷移,因為這些實體之間將存在鏈接。 例如,內容將由特定用戶創建 - 因此我們首先需要遷移用戶,然後是分類法、內容類型。
現在讓我們在yaml文件中編寫一個用於用戶遷移的腳本。 因此,為了編寫用戶遷移,我們需要名為migrate_plus.migration.test_migration_users.yml 的用戶yaml文件 和遷移腳本如下所示。

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


路徑- 表示 csv 文件的路徑。
header_row_count - 這將給出作為特定列的標題的行數。
鍵- 每一行都應該是唯一的。
過程- 在這個過程中,我們將 csv 文件映射到字段。

上圖顯示了字段和 csv 之間的映射。 這裡,name 是用戶名字段的機器名稱,title 是 csv 列標題。 如果單個字段有多個數據,則我們使用分隔符。 在這種情況下,用戶可能有多個角色,我們像上圖所示那樣編寫。
通過編寫自定義插件遷移圖像。 自定義插件可以寫在路徑src > plugin > migrate > process 中。 在上圖中可以看到user_image_import_process是一個自定義插件,用於遷移用戶圖像。

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

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

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

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

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

最後,讓我們遷移內容類型。 內容類型的 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將包含以下安裝。

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

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

要遷移,請使用命令drush mim migration-id 。 我們可以在上圖中看到遷移 ID。
完成後,如果您檢查遷移狀態,您可以看到遷移的項目數。

現在您可以觀察到所有內容都已遷移。 如果數據遷移中出現任何錯誤,則該過程將在該特定實例處終止。 檢查該內容的問題,然後您可以再次重新啟動遷移。
要記住的事情
如果遷移在進程之間終止,遷移狀態將顯示為“正在導入”。 為了將狀態更改為空閒,您需要運行命令drush mrs migration-id 。 接下來,運行命令drush mim migration-id
如果要回滾遷移的內容,則運行命令drush mr migration-id
如果您在開始遷移過程後更改了代碼中的任何內容,請確保運行命令drush cdi test_migration 。 此命令將幫助您在遷移時反映更改。 完成後,對您的網站進行徹底檢查,看看是否所有內容都已遷移。
