Миграция поле изображения с D7 на D8

Главные вкладки

Аватар пользователя nikkrop nikkrop 22 августа 2019 в 16:45

Пишу миграцию новостей с D7 на D8. Застрял на миграции поля изображения (тизера). Остальная нода переезжает нормально. Посоветуйте пожалуйста какие-нибудь похожие примеры.
Использую модуль migrate_files для переноса файлов в одной миграции с нодой. Пишу source плагин, но опыта практически нет.

Конфиг миграции:

<?php
id
migrate_explode_node_news
label
Migrate explode node news
migration_group
migrate_explode
dependencies
:
  
enforced:
    
module:
      - 
migrate_explode
source
:
  
pluginmigrate_explode_node_news
  
#provide the drupal7 connection name here
  
targetmigrate
  
#specify the node types that to be migrarted
  
node_typenews
  constants
:
    
file_destination'public://news/img_teaser/'
process:
  
nidnid
  type
:
    
plugindefault_value
    default_value
news
  langcode
:
    
plugindefault_value
    source
language
    default_value
"und"
  
titletitle
  status
status
  created
created
  changed
changed
  promote
promote
  sticky
sticky
  path
alias
#  field_news: news_terms

  

field_news:
    
pluginarray_build
    key
tid
    value
tid
    source
field_news

#Проблемы в этом поле
  
field_image_teaser:
    
pluginimage_import
    source
url
    target_id
field_img_teaser_fid
    destination
constants/file_destination
    title
title
    alt
field_img_teaser_alt
    width
field_img_teaser_width
    height
field_img_teaser_height
    skip_on_missing_source
true
    
  field_paragraphs
paragraphs
  
destination
:
  
#how to store the data fetched from the source
  
pluginentity:node
migration_dependencies
:
  
required:
    - 
migrate_explode_term?>

Source плагин

<?php

namespace Drupal\migrate_explode\Plugin\migrate\source;

use 

Drupal\migrate\Row;
use 
Drupal\node\Plugin\migrate\source\d7\Node;
use 
Drupal\paragraphs\Entity\Paragraph;

/**
 * @MigrateSource(
 *   id = "migrate_explode_node_news"
 * )
 */
class NodeNews extends Node {

  public function 

query() {
    
$query parent::query();
    
$query->condition('n.nid'121);
    return 
$query;
  }

  

/**
   * {@inheritdoc}
   */
  
public function prepareRow(Row $row) {
    
$nid $row->getSourceProperty('nid');

    

// Prepare paragraphs array.
    
$paragraphs = [];

    

// News Terms Referrence Field.
    
$news_terms = [];
    
$result $this->select('field_data_field_news''fdn')
     ->
fields('fdn', ['field_news_tid'])
     ->
condition('fdn.entity_id'$nid)
     ->
execute();
    while (
$record $result->fetchObject()) {
      
$news_terms[] = $record->field_news_tid;
    }
    if (!empty(
$news_terms)) {
      
$row->setSourceProperty('news_terms'$news_terms);
    }

    

// Migrate URL alias.
    
$query $this->select('url_alias''ua')
     ->
fields('ua', ['alias''pid'])
     ->
condition('ua.source''node/' $nid);
    
$alias $query->execute()->fetchAllAssoc('pid');
    if (!empty(
$alias)) {
      
$alias '/' end($alias)['alias'];
      
$row->setSourceProperty('alias'$alias);
    }

    

// Body field with value.
    
$result $this->select('field_data_body''fdb')
     ->
fields('fdb', ['body_value'])
     ->
condition('fdb.entity_id'$nid)
     ->
execute();
    while (
$record $result->fetchObject()) {
      
$body $record->body_value;
    }
    if (!empty(
$body)) {
      
// Create paragraph;
      
$paragraph Paragraph::create([
         
'type' => 'text',
         
'field_body' => [
           
'value' => strip_tags($body'<p><a><br><i><b><strong><em>'),
           
'format' => "full_html"
         
],
      ]);
      
$paragraph->save();
      
$paragraphs[] = $paragraph->id();
    }
    
    
// Migrate teaser image
    
$path_to_file 'http://localD7site.loc/sites/default/files/news/img_teaser/';
    
$query $this->select('field_data_field_img_teaser''fdfit')
     ->
fields('fdfit', [
       
'field_img_teaser_fid',
       
'field_img_teaser_alt',
       
'field_img_teaser_width',
       
'field_img_teaser_height'])
     ->
condition('fdfit.entity_id'$nid);
    
$image $query->execute()->fetchAllAssoc('field_img_teaser_fid');
    if (!empty(
$image)) {
      
$query $this->select('file_managed''fm')
       ->
fields('fm', ['filename'])
       ->
condition('fm.fid'$image['field_img_teaser_fid']);
      
$image_name $query->execute()->fetchAllAssoc('fid');
      if (!empty(
$imge_name)) {
        
$url $path_to_file $image_name;
        
$row->setSourceProperty('url'$url);
        
$row->setSourceProperty('field_image_teaser'$image);
      }
    }

    

// Set paragraphs field.
    
if (!empty($paragraphs)) {
      
$row->setSourceProperty('paragraphs'$paragraphs);
    }

    return 

parent::prepareRow($row);
  }

}

?>

Комментарии