2016-10-12 3 views
0

단락을 사용하여 Drupal 6 인스턴스의 일부 사용자 정의 필드 데이터를 Drupal 8 인스턴스로 가져와야합니다. D8은 D6과 같은 별도의 링크 된 노드 대신 단일 노드에 모든 번역을 저장하기 때문에 번역 된 내용을 단락으로 가져 와서 노드 (페이지)에 삽입하는 데 문제가 있습니다. 기본 언어 (영어)가 올바르게 작동합니다. 여기에 내 코드 (필자는 D6 인스턴스에서 덤프이었다 JSON 파일에서 가져 오기입니다)입니다 :Drupal 8 문제 단락 가져 오기

... 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->language = $data['language']; 

이 모든 지침은 평가 될 것입니다 :

나는 시도하고 노드에서 번역에 액세스하거나 무언가 같이, 단락 객체의 번역을 추가 할 필요가 있는지 확실하지 않습니다! 고맙습니다!

+0

마이그레이션을 통해 맞춤 코드를 사용해야하는 이유가 있습니까? – VJamie

+0

리드 개발자에 따르면 마이그레이션은 플렉스 필드 데이터를 단락으로 변환하는 것처럼 작동하지 않습니다. – lerxstrulz

답변

0

댓글에 응답 :

을이 단락으로 변환 flexfields 데이터를 그대로 마이그레이션이 작동하지 않습니다 리드 dev에 따르면.

이전을 통해 이전 사이트에 저장된 형식에 관계없이 입출력 데이터를 완전히 자유롭게 관리 할 수 ​​있습니다.

D6 데이터를 노출하는 옵션은 다양하지만 더 쉽고 유연한 방법은 이전 소스 플러그인을 사용하는 것입니다. Drupal 8은 6 및 7과 같은 이전 Drupal 버전의 데이터를 추출하고 관리하는 유용한 플러그인과 함께 제공됩니다. 클래스에 예를 들어 보라 : 나는 다음과 같이 할 제안 문제에 대해서는 드루팔 \ 노드 \ 플러그인 \ 마이그레이션 \ 소스 \의 D6의 \ 노드

는 :

1) 소스 플러그인을 만드는 것이 SQL 쿼리를 실행하여 D6 데이터를 수집합니다 (https://www.drupal.org/docs/8/api/migrate-api/migrate-source)

2)는 D8 단락 구조 (https://www.drupal.org/docs/8/api/migrate-api/migrate-process-plugins)

3) 대상 플러그인 기업의 핵심 사용 반영하기 위해 들어오는 데이터를 조작 할 과정을 플러그인을 만들기 : 노드 당신은 수업에 활용할 수를 그 D6 노드를 추출하는 유용한 방법을 포함합니다.

<?php 

/** 
* @file 
* Contains \Drupal\custom_d6_migration\Plugin\migrate\source\MyCustomMigration. 
*/ 

namespace Drupal\custom_d6_migration\Plugin\migrate\source; 

use Drupal\migrate\Row; 
use Drupal\node\Plugin\migrate\source\d6\Node; 

/** 
* Source plugin for D6 content. 
* 
* @MigrateSource(
* id = "my_custom_migration" 
*) 
*/ 
class MyCustomMigration extends Node { 

    /** 
    * {@inheritdoc} 
    */ 
    public function query() { 
    // .. your custom query $this->select('tablename'); ... 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function prepareRow(Row $row) { 
    // If you need to alter the current row (running further queries to gather additional data..).. 

    return $row; 
    } 

} 

:

당신은 몇 가지 사용자 정의 쿼리를 필요로하고, 그래서 여기에 사전 처리 행 아마 것

소스 플러그인 (yourmodule/SRC/플러그인// 소스를 마이그레이션/MyCustomMigration.php)의 간단한 예입니다 이 질문이 몇 달 전에 게시 되었더라도 거의 모든 종류의 데이터 마이그레이션 문제를 해결하는 데 마이그레이션이 유용하기 때문에이 답변이 다른 사람에게 도움이되기를 바랍니다.