นี่คือวิธีที่ฉันสามารถบรรลุได้
การย้ายย่อหน้า:
รหัส: fup_balance_csv_import
....
....
กระบวนการ:
field_upload: field_upload
field_download: field_download
field_total: field_total
ปลายทาง:
ปลั๊กอิน: entity_reference_revisions:ย่อหน้า
default_bundle: fup_balance
การโยกย้ายโหนด:
รหัส: subscribe_list_csv_import
.............
........
กระบวนการ:
# ฟิลด์ย่อหน้า
pseudo_field_fup_details:
-
ปลั๊กอิน: การโยกย้าย_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
แหล่งที่มา:
field_1: source_field_1
field_2: source_field_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
* @endcode
*
* @MigrateProcessPlugin(
* id = "country_timezones_paragraphs",
* handle_multiples = จริง
* )
*/
คลาส CountryTimezonesParagraphs ขยาย ProcessPluginBase ใช้ ContainerFactoryPluginInterface {
/**
* บริการตัดไม้
*
* @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
ป้องกัน $logger;
/**
* สร้างปลั๊กอิน CountryTimezones
*
* @param อาร์เรย์ $configuration
* การกำหนดค่าปลั๊กอิน
* @param สตริง $plugin_id
* รหัสปลั๊กอิน
* @param ผสม $plugin_definition
* คำจำกัดความของปลั๊กอิน
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger
* บริการคนตัดไม้
*/
ฟังก์ชันสาธารณะ __construct (อาร์เรย์ $configuration, $plugin_id, $plugin_definition, LoggerChannelFactoryInterface $logger) {
พาเรนต์::__construct($configuration, $plugin_id, $plugin_definition);
$this->logger = $logger->get('countries_list_migration');
}
/**
* {@inheritdoc}
*/
การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
ส่งคืนค่าคงที่ใหม่ (
$configuration,
$plugin_id,
$plugin_definition,
$container->get('logger.factory')
);
}
/**
* {@inheritdoc}
*/
การแปลงฟังก์ชันสาธารณะ ($value, MigrateExecutableInterface $migrate_executable, แถว $row, $destination_property) {
$วรรค =[];
ถ้า (isset($value)) {
$paragraphs[] = $this->createCountryTimezonesParagraphsItem($value);
}
กลับ $paragraphs;
}
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะหลายรายการ (): บูล {
กลับ TRUE;
}
ฟังก์ชันที่มีการป้องกัน createCountryTimezonesParagraphsItem(array $item): array {
$paragraph = ย่อหน้า::create([
'type' => 'country_timezones',
'field_1' => [
'value' => $item['field_1'],
]
'field_2' => [
'value' => $item['field_2'],
]
]);
$วรรค->บันทึก();
กลับ [
'target_id' => $paragraph->id(),
'target_revision_id' => $paragraph->getRevisionId(),
];
}
}
หวังว่ามันจะเป็นประโยชน์