logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

已知问题:从 Drupal 6 或 7 升级到 Drupal 8 时

01/10/2025, by Ivan

Drupal 6 到 8

聚合器分类

在 Drupal 8 中不再存在聚合器分类的概念,因此它们不会被迁移到 Drupal 8。

允许的协议

Drupal 8 现在将协议保存在容器参数 “filter_protocols” 中,因此,如果您更改了变量 “filter_allowed_protocols”,请将其输入到 services.yml 文件中。

允许的分类参考字段词汇表

在 Drupal 6 中,某个词汇表适用的内容类型列表是在词汇表设置中定义的。在 Drupal 8 中,允许的词汇表可以在分类术语引用字段的设置中定义。此设置目前不会迁移,这意味着在 Drupal 8 中可以引用所有词汇表。您可以在升级后手动编辑 Drupal 8 中的分类术语引用字段设置,并选择允许的词汇表。

[已修复] 日期格式

仅迁移默认的短、中、长三种格式。所有其他格式都有备用格式,并且需要在迁移后重新配置。

在编辑表单或查看页面中缺失的字段

另一个可能导致混淆的问题是,当您运行迁移后,看起来一切成功,但却在编辑表单中看不到您的字段。请进入内容类型的管理页面并打开“表单显示管理”标签。迁移添加的字段可能在编辑表单中被隐藏。如果是这样,请将它们拖动到上方以显示。同样,如果它们没有显示在节点视图中,可能是迁移添加的字段在“显示管理”标签中被隐藏,您可能需要在那里将它们设为可见。迁移用户字段到实体时,Migrate Plus 模块可能会有所帮助。

主页加载问题与主题损坏

执行迁移时,有时页面会变成空白,仅加载少量元素。这看起来像是主题损坏。访问 /user 页面然后返回主页通常能解决此问题。

菜单 UI

变量 menu_primary_links_source 和 menu_secondary_links_source 不会迁移,因为它们在 Drupal 8 中没有对应项。

模块与主题

在开始迁移之前,您需要启用新的模块和主题,并设置管理员主题(如果存在)。

节点内容类型

Drupal 6 的默认配置中包含 Story 和 Page 两种内容类型。Drupal 8 的默认内容类型为 Article 和 Basic Page(其机器名称为 “page”,与 Drupal 6 相同)。

  • 迁移会将 Drupal 6 的 Page 内容类型映射到 Drupal 8 的 Page 内容类型,因为这两个内容类型的机器名称相同。
  • 迁移会为 Drupal 8 创建一个 Story 内容类型。如果您不需要 Drupal 8 的 Article 内容类型,可能需要删除它。更多详细信息请参见 #2236289: 从 D6 迁移 Story 节点到 D8 时会创建新的内容类型

节点翻译

在 Drupal 6 和 7 中,节点翻译存储为单独的节点,而在 Drupal 8 中,它们被合并到其源语言节点中。迁移系统会执行节点翻译的合并,但这意味着某些链接可能会指向已不存在的节点。请参见 #2746527: [META] 处理 D6 和 D7 节点翻译相关的数据

请注意,翻译节点的修订版本尚未迁移。参见 #2746541: [backport] 将 D6 和 D7 节点修订迁移到 D8

升级多语言 Drupal 6 到 Drupal 8 的概述

用户资料分类

在 Drupal 6 中由 Profile 模块分组的字段不会在 Drupal 8 中分组。

用户资料字段(列表选择)

Drupal 8 中生成字段的“允许值”设置将是 Drupal 6 中所有已选自定义值与当前允许值的组合,而不仅仅是 Drupal 6 的允许值。

统计

访问日志设置和统计数据不会迁移 i18n。i18n 统计整合已在 Drupal 8.5.2 中迁移。参见 #2930101: i18n / statistics - 节点计数器不会更新翻译

文本/输入格式

Drupal 8 无法识别的过滤器格式会迁移为 filter_null,一种只返回空字符串的过滤器。这意味着使用未知过滤器格式的输入格式不会显示字段内容,尽管数据仍在数据库中。这可能会让人困惑。参见 #2618332: 使用 filter_null 更好地处理缺失过滤器的替代#2630578: D6 升级中重复的格式

Drupal 8 无法识别的过滤器格式包括臭名昭著的 PHP 代码过滤器,以及任何由 contrib 模块提供、但在您的 Drupal 8 安装中不可用的过滤器。

PHP 过滤器在 Drupal 8 核心中不再支持 —— 这是非常糟糕的做法,但如果确实需要,您可以使用 PHP 模块

要修复这种情况,您有几个替代方案:

  • 检查提供过滤器的模块是否有 Drupal 8 版本,并安装它们
  • 编辑并保存受影响的输入格式。这将删除对 format_null 的引用,内容将开始显示。注意:由于原始过滤器不存在,内容不会被过滤,可能会显示未替换的令牌,甚至使网站面临安全问题
  • 编辑内容并更改为其他输入格式。这与上一点一样存在相同问题

时区和日期

Drupal 6 使用时区偏移量来计算本地时间。Drupal 7 和 Drupal 8 使用时区名称。不幸的是,PHP 函数 timezone_name_from_abbr() 会根据服务器是否开启夏令时返回不同的时区名称。例如,偏移量 3600 如果夏令时关闭会转换为 Europe/Paris,如果开启则为 Europe/London。迁移设置为忽略夏令时。根据服务器配置,迁移后 Drupal 8 的时区设置可能错误(#2353679: D6->D8 迁移缺失变量 date_default_timezone)。

在使用夏令时的时区中,Drupal 8 可能会与 Drupal 6 不同地解释日期。例如,如果时间接近午夜,日期可能会被视为另一天。这会引发问题,尤其是在使用日期令牌生成路径时(如 URL 别名、文件字段路径)。两个可能的解决方案见 #2926421: 处理 D6 与 D8 之间的日期不一致

URL 别名

当迁移未在 Drupal 8 新站点启用的语言的 URL 别名时,在启用该语言前,这些别名不会生效。

Views

Views 尚未迁移,您需要在 Drupal 8 中手动创建视图。更多信息请参见 #2500547: 从 Drupal 6 和 7 的 Views 升级路径Views Migration 模块

用户活动区块设置

用户活动设置不会迁移。这需要在相应视图的过滤器/访问部分手动编辑(#2169327: 迁移用户活动区块设置)。

Drupal 7 到 8

[已修复] 分类术语引用字段的允许词汇表

在 Drupal 7 中,分类术语引用字段的允许词汇表是在该字段的设置中定义的。此设置目前不会迁移,这意味着在 Drupal 8 中可以引用所有词汇表。(参见 #2763637: D7 分类术语字段未迁移允许词汇表)。您可以在升级后手动编辑 Drupal 8 的分类术语引用字段设置并选择允许的词汇表。

被封锁的 IP 地址

Drupal 7 中 ban_ip 表的 id 列不会迁移。

评论类型

Drupal 7 允许不同内容类型的评论具有不同字段。通常评论包含作者、主题和评论字段。由于不同的 D7 评论可能有不同的字段,迁移时会为每个内容类型在 D8 中创建单独的评论类型:

  • 内容类型 Foo 会有评论类型 comment_node_foo
  • 内容类型 Bar 会有评论类型 comment_node_bar

唯一的例外是论坛评论。当启用 D8 Forum 模块时,会自动创建评论类型 comment_forum。D7 论坛评论会迁移到该类型中。

重要提示:Drupal 8 标准安装配置文件与 Article 内容类型
如果您的 Drupal 8 站点是使用标准安装配置文件安装的,您将拥有一个名为 Article 的内容类型。

  • 该内容类型自带一个名为 comment 的评论字段。
  • 迁移系统不会假设 D8 站点是使用标准配置文件安装的。因此会创建一个 comment_node_article 评论类型,并将 D7 Article 内容类型的评论迁移到该类型中。

结果是,Article 内容类型会有两个评论字段:

  • comment,来自 D8 标准安装配置文件但未使用
  • comment_node_article,由迁移系统创建

您很可能不希望 Article 内容类型拥有两个评论字段,因此需要手动从 Article 中删除 comment 评论字段(admin/structure/types/manage/article/fields)。完成后,如果您未在任何地方使用 comment 评论类型,还可以在 admin/structure/comment 中删除它。

建议在运行迁移之前先删除 Article 中不必要的评论字段,因为 Drupal 8 核心目前存在删除评论字段的 bug。参见 #2906470: 删除评论字段实例后丢失评论和 comment_entity_statistics 条目

PHP 代码

Drupal 8 无法识别的过滤器格式会迁移为 filter_null,一种只返回空字符串的过滤器。这意味着使用未知过滤器格式的输入格式不会显示字段内容,尽管数据仍在数据库中。

Drupal 8 无法识别的过滤器格式包括臭名昭著的 PHP 代码过滤器,以及任何由 contrib 模块提供、但在您的 Drupal 8 安装中不可用的过滤器。

PHP 过滤器在 Drupal 8 核心中不再支持 —— 这是非常糟糕的做法,但如果确实需要,您可以使用 PHP 模块。

要修复这种情况,您有几个替代方案:

  • 检查提供过滤器的模块是否有 Drupal 8 版本,并安装它们
  • 编辑并保存受影响的输入格式。这将删除对 format_null 的引用,内容将开始显示。注意:由于原始过滤器不存在,内容不会被过滤,可能会显示未替换的令牌,甚至使网站面临安全问题
  • 编辑内容并更改为其他输入格式。这与上一点一样存在相同问题

纯文本字段

Drupal 7 中的文本处理设置冲突
在 Drupal 7 中,文本处理选项是在字段实例的设置中定义的。换句话说,同一个字段可以被两个(或更多)内容类型使用,但在一个内容类型中是“纯文本”,另一个内容类型中是“过滤文本”。

Drupal 8 有单独的存储类型:Text(纯文本)和 Text(格式化)。还有 Text(纯文本,长)和 Text(格式化,长)。关键在于,这个选择是在字段存储级别做出的。换句话说,纯文本/格式化不能按内容类型变化。

迁移系统不会做假设。如果检测到冲突的文本处理设置,这些字段会被跳过并记录日志。站点构建者有两个选项:

1. 在 Drupal 7 中统一文本处理设置,使所有使用该字段的内容类型采用相同的设置。

  • 注意选择时要避免可能的跨站脚本(XSS)安全问题。
  • 如果您的字段在 Drupal 7 中为“纯文本”,并且不受信任的用户可以发布内容,那么这些字段可能包含恶意输入。在 Drupal 7 中不会导致 XSS,因为字段是纯文本,恶意输入不会被执行。如果您现在改为格式化文本,请确保文本格式不是完整 HTML 或允许恶意输入的类似设置。

2. 如果您需要在 Drupal 8 中保留两种不同的格式设置,则需要开发自定义迁移,将 Drupal 7 的字段拆分为两个独立的 Drupal 8 字段。更多信息请参见 升级到 Drupal 8 时自定义迁移

带摘要的长文本 + Drupal 7 中纯文本设置
Drupal 7 有 Long text and summary 字段类型。Drupal 8 对应字段为 Text(格式化,长,带摘要)。在 Drupal 7 中可以设置文本处理为“纯文本”。而在 Drupal 8 中,Text(格式化,长,带摘要)字段始终是格式化文本。

迁移系统不会做假设。如果检测到 Long text and summary 字段为纯文本设置,则会跳过该字段并记录日志。站点构建者有两个选项:

1. 在 Drupal 7 中将字段的文本处理从纯文本改为过滤文本。

  • 上文提到的 XSS 安全注意事项在此同样适用。

2. 开发自定义迁移路径,定义如何迁移这些字段到 Drupal 8。更多信息请参见 升级到 Drupal 8 时自定义迁移

统计

访问日志设置和统计数据不会迁移 i18n。i18n 统计整合已在 Drupal 8.5.2 中迁移。参见 #2930101: i18n / statistics - 节点计数器不会更新翻译

Views

Views 尚未迁移,您需要在 Drupal 8 中手动创建视图。更多信息请参见 #2500547: 从 Drupal 6 和 7 的 Views 升级路径Views Migration 模块

潜在的 ID 冲突(从 D6 或 D7 到 Drupal 8)

问题

升级准备 页面所述,Drupal 8 站点在升级过程中必须完全为空。迁移过程会保留