Drupal 8问题导入段落

时间:2016-10-12 21:36:04

标签: drupal translation drupal-8 paragraph

我需要使用Paragraphs将一些自定义字段数据从Drupal 6实例导入到Drupal 8实例中。由于D8将所有翻译存储在单个节点中而不是像D6这样的单独链接节点,因此我在尝试将已翻译的内容转换为段落并插入节点(页面)时遇到问题。默认语言(英语)工作正常。这是我的代码(我从一个JSON文件导入,它是D6实例的转储):

... Code to read JSON file here and load into $data variable ...

// create paragraph ($fields is an array of fields from the JSON file)
$paragraph = Paragraph::create($fields);

// load existing node
$node = Node::load($nodeId);

// Get the translated node...according to the docs, this should 
// return a node that behaves just like the original node
$language = \Drupal::languageManager()->getLanguage($data['language'])->getId();
$node = $node->getTranslation($language);

$paragraphs = $node->field_paragraph_group;
$paragraphs[] = $paragraph;

$node->field_paragraph_group = $paragraphs;
$node->save();

似乎保存确定但是一旦运行,网站将停止使用

The website encountered an unexpected error. Please try again later.

所以它显然会破坏某些东西。

我不确定是否需要尝试从节点访问翻译或在Paragraph对象中添加翻译,例如:

$paragraph->language = $data['language'];

任何指导将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

回答你的评论:

  

根据主要负责人的说法,迁移不会像以前一样有效   弹性域数据转换为段落。

通过迁移,您可以完全自由地管理输入和输出数据,无论它们存储在旧网站中的格式如何。

您有很多选项可以公开您的D6数据,但更简单,更灵活的方法是使用迁移源插件,因为Drupal 8附带了一些有用的插件,用于从较旧的Drupal版本(如6和7)中提取和管理数据。 请查看该类的示例:Drupal \ node \ Plugin \ migrate \ source \ d6 \ Node

关于你的问题,我建议如下:

1)创建插件,该插件运行SQL查询以收集D6数据(DEMO

2)创建一个进程插件来操作传入数据以反映D8段落结构(https://www.drupal.org/docs/8/api/migrate-api/migrate-source

3)使用核心目标插件实体:节点 您可以利用包含有用方法的类来提取D6节点。

您可能需要一些自定义查询和行预处理,所以这里是一个插件的简单示例(yourmodule / src / Plugin / migrate / source / MyCustomMigration.php):

 date = new SimpleDateFormat("EEE, dd. MM. yyyy", Locale.GERMAN).parse("Mittwoch, 28. 06. 2017")

即使这个问题是在几个月前发布的,我希望这个答案对其他人来说仍然有用,因为迁移对于解决几乎任何类型的数据迁移问题都非常有帮助。