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