Вот как я смог этого добиться.
Перенос абзаца:
идентификатор: fup_balance_csv_import
....
....
процесс:
поле_загрузка: поле_загрузка
field_download: field_download
общее_поле: общее_поле
пункт назначения:
плагин: entity_reference_revisions:абзац
default_bundle: fup_balance
Миграция узла:
идентификатор: subscribe_list_csv_import
.............
........
процесс:
# Поле абзацев.
псевдо_поле_фуп_детали:
-
плагин: migration_lookup
миграция: fup_balance_csv_import
источник: title # Уникальный идентификатор.
field_fup_details:
-
плагин: sub_process
источник:
- '@pseudo_field_fup_details'
процесс:
target_id: '0'
target_revision_id: '1'
Для этого используется стандартный процесс миграции. Иногда это может быть бесполезно, тогда вам нужно написать свой собственный плагин миграции. Ниже приведен способ сделать это.
# Поле абзацев.
field_country_time_zones:
-
плагин: country_timezones_paragraphs
источник:
поле_1: исходное_поле_1
поле_2: исходное_поле_2
Плагин миграции:
<?php
пространство имен Drupal\countries_list_migration\Plugin\migrate\process;
используйте Drupal\Core\Plugin\ContainerFactoryPluginInterface;
используйте Drupal\migrate\MigrateExecutableInterface;
используйте Drupal\migrate\ProcessPluginBase;
используйте Drupal\migrate\Row;
используйте Symfony\Component\DependencyInjection\ContainerInterface;
используйте Drupal\paragraphs\Entity\Paragraph;
используйте Drupal\Core\Logger\LoggerChannelFactoryInterface;
/**
* Предоставляет подключаемый модуль миграции country_timezones.
*
* Применение:
*
* @код
* процесс:
* бар:
* плагин: country_timezones_paragraphs
* источник: source_field_name
* @конечный код
*
* @MigrateProcessPlugin(
* id = "country_timezones_paragraphs",
* handle_multiples = ИСТИНА
* )
*/
класс CountryTimezonesParagraphs расширяет ProcessPluginBase, реализует ContainerFactoryPluginInterface {
/**
* Сервис регистратора.
*
* @var\Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
защищенный регистратор $;
/**
* Создает плагин CountryTimezones.
*
* @param массив $configuration
* Конфигурация плагина.
* @param строка $plugin_id
* Идентификатор плагина.
* @param смешанный $plugin_definition
* Определение плагина.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger
* Служба регистратора.
*/
публичная функция __construct (массив $configuration, $plugin_id, $plugin_definition, LoggerChannelFactoryInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->logger = $logger->get('countries_list_migration');
}
/**
* {@inheritdoc}
*/
общедоступная статическая функция create(ContainerInterface $container, массив $configuration, $plugin_id, $plugin_definition) {
вернуть новую статику(
$ конфигурация,
$plugin_id,
$plugin_definition,
$container->get('logger.factory')
);
}
/**
* {@inheritdoc}
*/
общедоступная функция преобразования ($ значение, MigrateExecutableInterface $ migrate_executable, строка $ строка, $ destination_property) {
$параграфы =[];
если (установить ($ значение)) {
$paragraphs[] = $this->createCountryTimezonesParagraphsItem($value);
}
вернуть $параграфы;
}
/**
* {@inheritdoc}
*/
публичная функция множественная(): bool {
вернуть ИСТИНА;
}
защищенная функция createCountryTimezonesParagraphsItem (массив $ item): массив {
$абзац = абзац::создать([
'type' => 'country_timezones',
'поле_1' => [
'значение' => $item['field_1'],
],
'поле_2' => [
'значение' => $item['field_2'],
],
]);
$абзац->сохранить();
возвращаться [
'target_id' => $paragraph->id(),
'target_revision_id' => $paragraph->getRevisionId(),
];
}
}
Надеюсь, это полезно.