ฉันไม่ทราบเกี่ยวกับปลั๊กอินสำหรับกรณีนี้
แต่คุณทำได้ เขียนปลั๊กอินที่คุณกำหนดเอง.
ในปลั๊กอินที่กำหนดเอง คุณจะต้องแยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป และสร้างเอนทิตีสื่อ youtube จากปลั๊กอินด้วยตนเอง
ต่อไปนี้คือตัวอย่างโค้ดบางส่วนที่จะชี้ให้คุณเห็นทิศทางที่ถูกต้อง
ปลั๊กอินกระบวนการย้ายข้อมูลจะแยกวิเคราะห์ข้อความ และประมวลผลส่วนที่ฝัง:
<?php
เนมสเปซ Drupal\my_migrate\Plugin\migrate\process;
ใช้ Drupal\migrate\ProcessPluginBase;
ใช้ Drupal\migrate\MigrateExecutableInterface
ใช้ Drupal\migrate\Row;
/**
* จัดเตรียมปลั๊กอินกระบวนการย้ายข้อความเนื้อหา
*
* @MigrateProcessPlugin(
* id = "body_text"
* )
*/
คลาส BodyText ขยาย ProcessPluginBase {
/**
* {@inheritdoc}
*/
การแปลงฟังก์ชันสาธารณะ ($value, MigrateExecutableInterface $migrate_executable, แถว $row, $destination_property) {
$body = '';
ถ้า (preg_match_all('/[embed](.*)[/embed]/Usi', $text, $match)) {
// ส่วนข้อความแยกโดยการฝัง
$text_parts = preg_split('/[embed](.*)[/embed]/Usi', $text);
$body = $text_parts[0];
unset($text_parts[0]);
$text_parts = array_values($text_parts);
// วนส่วนข้อความ สร้างการฝังสื่อ
foreach ($text_parts เป็น $key => $text_part) {
ถ้า (isset($matches[1][$key])) {
$embed = $match[1][$key];
ถ้า (! $ ข้อความ) {
$this->addTag(MigrationTags::TAG_MISSING_QUOTE);
}
$body .= $this->createYoutubeEmbed($embed);
}
$body .= $text_part;
}
}
กลับ $body;
}
ฟังก์ชันป้องกัน createYoutubeEmbed($embed) {
// 1. สร้างเอนทิตีสื่อ YouTube โดยใช้ URL
// 2. สร้างสื่อฝัง
}
}
ใน สร้าง YoutubeEmbed
วิธีที่คุณจะต้อง
- สร้างเอนทิตีสื่อ YouTube โดยใช้ URL
- สร้างสื่อฝัง หากต้องการทราบว่าการฝังสื่อ YouTube ควรมีลักษณะอย่างไร ให้สร้างเนื้อหาบางส่วนใน Drupal ด้วยตนเองและดูซอร์สโค้ดใน CKEditor
นี่คือตัวอย่างสำหรับการฝังภาพสื่อที่ฉันนำมาใช้ในการย้ายข้อมูล:
/**
* สร้างภาพสื่อฝังสำหรับย่อหน้าข้อความ
*
* @param \Drupal\media\MediaInterface $media
* ภาพสื่อ
* @param สตริง $align
* (ไม่บังคับ) การจัดตำแหน่งรูปภาพ ค่าที่อนุญาต: ซ้าย ขวา กึ่งกลาง
* @param สตริง $display
* (ไม่บังคับ) รูปแบบการแสดงภาพ ค่าที่อนุญาต: ใหญ่ (ค่าเริ่มต้น)
* กลาง, เล็ก
* @param สตริง $link
* (ไม่บังคับ) ลิงค์ URL
*
* @return สตริง
* รหัสฝัง
*/
ฟังก์ชันป้องกัน createMediaImageEmbed (MediaInterface $media, $align = '', $display = 'large', $link = NULL) {
$แอตทริบิวต์ = [
'ปุ่มฝังข้อมูล' => $media->bundle(),
'data-entity-embed-display' => 'view_mode:media.' . $ดิสเพลย์,
'จัดแนวข้อมูล' => $จัดแนว
'data-entity-type' => 'สื่อ',
'data-entity-uuid' => $media->uuid(),
'data-langcode' => 'de',
];
ถ้า (ลิงก์ $) {
$link = str_replace("/", "\/", $ลิงค์);
$attributes['data-entity-embed-display-settings'] = '{"link_url":"' . $ลิงค์ '\/","link_url_target":0}';
}
$embed = '<drupal-เอนทิตี';
foreach (แอตทริบิวต์ $ เป็น $key => $value) {
$embed .= " $key=\"$value\"";
}
$embed .= '></drupal-entity>';
ส่งคืน $embed;
}