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 。 此命令将帮助您在迁移时反映更改。 完成后,对您的网站进行彻底检查,看看是否所有内容都已迁移。
