我正在尝试编写自定义迁移以将我的Drupal 7网站迁移到Drupal 8。我目前正在使用Drupal 8.6.7和Drupal 7.61作为生产网站的副本。
到目前为止,我已经用composer建立了D8网站(docroot是path/to/web) (https://www.drupal.org/docs/develop/using-composer/using-composer-to-manage-drupal-site-dependencies )
我一直使用Drush进行D7站点上的维护操作,并且在大多数操作中使用Drush 9,包括D8站点上的迁移。
我已经在D8站点中安装了最相关的模块,以便我可以开始迁移,最显著的是我在文本格式/过滤器以及migrate_plus、migrate_tools和migrate_upgrade中使用的模块的所有D8等价物。
迁移文件是使用Drush命令生成的:
drush @dev migrate-upgrade "$LEGACYDB" "$LEGACYURL" --configure-only --migration-prefix=osn_custom_
到目前为止,我已经成功地迁移了用户和他们的角色,所以我对迁移是如何工作的有一些了解。
我目前正在处理的问题是迁移名为“机密”的自定义内容类型。此类型具有默认的Drupal 7 body字段和字段“field _image”。太普通了。
当我使用默认生成的迁移文件时,看起来所有的东西都被迁移了,但是文本是不可见的。经过研究,我发现这是由于输入格式被设置为D7代码(在我的例子中是‘完整的html'),而在D8中没有被称为'2’的过滤器代码。(src:https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#d7_至_d8 )。
我决定将2转换为“基本html”,使用D8配置,而根本不迁移D7文本过滤器。
我创建了一个带有静态映射的迁移查找插件,它将所有D7代码转换为首选的D8代码。它可能工作得很好,但我遇到了一个问题,就是我无法让迁移插件处理“机密”迁移配置的迁移。因此,我决定简化它,并将格式设置为默认值'basic_html‘。
下面是我在migrate_plus.migration.osn_custom_d7_node_classified.yml
中尝试过的代码片段,下面的代码片段只显示了主体配置,因为其他字段配置是使用drush命令生成的,而不是修改的。
body: body
默认的。内容被迁移,输入格式被设置为'2‘。
这个:https://www.phase2technology.com/blog/drupal-8-migrations
应该这样做:
'body/format':
plugin: default_value
default_value: basic_html
'body/value': body
但是,这会导致以下错误:
InvalidArgumentException:如果要用一个值数组展开占位符,则占位符必须有一个尾随[]。在/path/to/dev/web/core/lib/Drupal/Core/Database/Connection.php).中如果要用一个值数组展开占位符,则占位符必须有一个尾部[]。(/path/to/dev/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php:783)
我不知道哪里出了问题,我应该做什么。我也不知道如何调试它来找出它期望的是什么。
有人能给我一些指点吗?
发布于 2019-01-19 19:16:06
多亏了@Jdrupal,我终于在此链接中找到了解决方案。
body:
plugin: sub_process
source: body
process:
value: value
format:
plugin: default_value
default_value: basic_html
(对不起,我似乎没有得到适当的格式)
https://drupal.stackexchange.com/questions/275378
复制相似问题