Tôi không biết về bất kỳ plugin nào cho trường hợp này.
Nhưng bạn có thể viết plugin tùy chỉnh của bạn.
Trong plugin tùy chỉnh, bạn sẽ cần phân tích cú pháp văn bản theo biểu thức chính quy và tạo các thực thể phương tiện youtube từ đó theo cách thủ công.
Dưới đây là một số ví dụ mã để chỉ cho bạn một hướng đi đúng.
Plugin quy trình di chuyển sẽ phân tích cú pháp văn bản và xử lý các phần nhúng:
<?php
không gian tên Drupal\my_migrate\Plugin\migrate\ process;
sử dụng Drupal\migrate\ProcessPluginBase;
sử dụng Drupal\migrate\MigrateExecutableInterface;
sử dụng Drupal\di chuyển\Row;
/**
* Cung cấp plugin quy trình di chuyển văn bản nội dung.
*
* @MigrateProcessPlugin(
* id = "body_text"
* )
*/
lớp BodyText mở rộng ProcessPluginBase {
/**
* {@inheritdoc}
*/
hàm công khai biến đổi($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
$body = '';
if (preg_match_all('/[embed](.*)[/embed]/Usi', $text, $matches)) {
// Các phần văn bản được chia nhỏ bằng cách nhúng.
$text_parts = preg_split('/[embed](.*)[/embed]/Usi', $text);
$body = $text_parts[0];
bỏ đặt($text_parts[0]);
$text_parts = array_values($text_parts);
// Lặp lại các phần văn bản, tạo phần nhúng phương tiện.
foreach ($text_parts as $key => $text_part) {
if (isset($matches[1][$key])) {
$embed = $matches[1][$key];
nếu (!$text) {
$this->addTag(MigrationTags::TAG_MISSING_QUOTE);
}
$body .= $this->createYoutubeEmbed($embed);
}
$body .= $text_part;
}
}
trả lại cơ thể $;
}
hàm được bảo vệ createYoutubeEmbed($embed) {
// 1. Tạo thực thể phương tiện youtube bằng URL.
// 2. Tạo phương tiện nhúng.
}
}
bên trong tạoYoutubeEmbed
phương pháp bạn sẽ cần phải
- Tạo thực thể phương tiện youtube bằng URL.
- Tạo nhúng phương tiện truyền thông. Để tìm hiểu cách nhúng phương tiện youtube trông như thế nào, hãy tạo một số nội dung trong Drupal theo cách thủ công và xem mã nguồn trong CKEditor.
Đây là một ví dụ về nhúng hình ảnh phương tiện mà tôi đã triển khai trong quá trình di chuyển của mình:
/**
* Tạo nhúng hình ảnh phương tiện cho các đoạn văn bản.
*
* @param \Drupal\media\MediaInterface $media
* Hình ảnh truyền thông.
* @param chuỗi $align
* (tùy chọn) Căn chỉnh hình ảnh, các giá trị được phép: trái, phải, giữa.
* chuỗi @param $display
* (tùy chọn) Biến thể hiển thị hình ảnh. Các giá trị được phép: lớn (mặc định),
* vừa, nhỏ.
* @param chuỗi liên kết $
* (tùy chọn) URL liên kết.
*
* chuỗi @return
* Mã nhúng.
*/
chức năng được bảo vệ createMediaImageEmbed(MediaInterface $media, $align = '', $display = 'large', $link = NULL) {
thuộc tính $ = [
'nút nhúng dữ liệu' => $media->bundle(),
'data-entity-embed-display' => 'view_mode:media.' . $hiển thị,
'căn chỉnh dữ liệu' => $align,
'kiểu thực thể dữ liệu' => 'phương tiện',
'dữ liệu-thực thể-uuid' => $media->uuid(),
'dữ liệu-langcode' => 'de',
];
nếu ($link) {
$link = str_replace("/", "\/", $link);
$attributes['data-entity-embed-display-settings'] = '{"link_url":"' . liên kết $. '\/","link_url_target":0}';
}
$embed = '<thực thể drupal';
foreach ($thuộc tính là $key => $value) {
$embed .= " $key=\"$value\"";
}
$embed .= '></drupal-entity>';
trả về $embed;
}