Iată cum am reușit să o obțin.
Paragraf Migrație:
id: fup_balance_csv_import
....
....
proces:
field_upload: field_upload
field_download: field_download
field_total: field_total
destinaţie:
plugin: entity_reference_revisions:paragraph
default_bundle: fup_balance
Migrarea nodului:
id: subscription_list_csv_import
.............
........
proces:
Câmp # Paragrafe.
pseudo_field_fup_details:
-
plugin: migration_lookup
migrare: fup_balance_csv_import
sursa: titlu # Identificator unic.
field_fup_details:
-
plugin: sub_proces
sursă:
- „@pseudo_field_fup_details”
proces:
target_id: „0”
target_revision_id: „1”
Acest lucru se face prin utilizarea procesului standard de migrare. Uneori s-ar putea să nu fie util, atunci trebuie să vă scrieți propriul plugin de migrare. Mai jos este modalitatea de a face acest lucru.
Câmp # Paragrafe.
field_country_time_zones:
-
plugin: country_timezones_paragraphs
sursă:
câmp_1: câmp_sursă_1
câmp_2: câmp_sursă_2
Plugin de migrare:
<?php
namespace Drupal\countries_list_migration\Plugin\migrate\process;
utilizați Drupal\Core\Plugin\ContainerFactoryPluginInterface;
utilizați Drupal\migrate\MigrateExecutableInterface;
utilizați Drupal\migrate\ProcessPluginBase;
utilizați Drupal\migrate\Row;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
utilizați Drupal\paragraphs\Entity\Paragraph;
utilizați Drupal\Core\Logger\LoggerChannelFactoryInterface;
/**
* Oferă un plugin de migrare country_timezones.
*
* Utilizare:
*
* @code
*proces:
* bar:
* plugin: country_timezones_paragraphs
* sursă: nume_câmp_sursă
* @endcode
*
* @MigrateProcessPlugin(
* id = „country_timezones_paragraphs”,
* handle_multiples = TRUE
* )
*/
clasa CountryTimezonesParagraphs extinde ProcessPluginBase implementează ContainerFactoryPluginInterface {
/**
* Serviciu logger.
*
* @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
protejat $logger;
/**
* Construiește un plugin CountriesTimezones.
*
* @param array $configurare
* Configurația pluginului.
* @param șir $plugin_id
* ID-ul pluginului.
* @param mixat $plugin_definition
* Definiția pluginului.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger
* Serviciul logger.
*/
funcția publică __construct(matrice $configurație, $id_plugin, $definiție_plugin, LoggerChannelFactoryInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->logger = $logger->get('countries_list_migration');
}
/**
* {@inheritdoc}
*/
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
returnează static nou (
$configurare,
$plugin_id,
$plugin_definition,
$container->get('logger.factory')
);
}
/**
* {@inheritdoc}
*/
Transformare funcție publică ($valoare, MigrateExecutableInterface $migrate_executable, Rând $rând, $proprietate_destinație) {
$paragrafe =[];
dacă (isset($valoare)) {
$paragrafe[] = $this->createCountryTimezonesParagraphsItem($valoare);
}
returnează $paragrafe;
}
/**
* {@inheritdoc}
*/
funcția publică multiple(): bool {
returnează TRUE;
}
funcția protejată createCountryTimezonesParagraphsItem(array $item): matrice {
$paragraf = Paragraf::create([
'type' => 'country_timezones',
'field_1' => [
'value' => $item['field_1'],
],
'field_2' => [
'value' => $item['field_2'],
],
]);
$paragraf->salvare();
întoarcere [
'target_id' => $paragraph->id(),
'target_revision_id' => $paragraph->getRevisionId(),
];
}
}
Sper că este de ajutor.