Nu știu despre niciun plugin pentru acest caz.
Dar tu poti scrieți pluginul dvs. personalizat.
În pluginul personalizat, va trebui să analizați textul printr-o expresie obișnuită și să creați manual entități media YouTube din acesta.
Iată câteva exemple de cod pentru a vă îndruma către direcția corectă.
Pluginul pentru procesul de migrare va analiza textul și va procesa părțile încorporate:
<?php
spațiu de nume Drupal\my_migrate\Plugin\migrate\process;
utilizați Drupal\migrate\ProcessPluginBase;
utilizați Drupal\migrate\MigrateExecutableInterface;
utilizați Drupal\migrate\Row;
/**
* Oferă un plugin pentru procesul de migrare a textului corpului.
*
* @MigrateProcessPlugin(
* id = "body_text"
* )
*/
clasa BodyText extinde ProcessPluginBase {
/**
* {@inheritdoc}
*/
Transformare funcție publică ($valoare, MigrateExecutableInterface $migrate_executable, Rând $rând, $proprietate_destinație) {
$corp = '';
if (preg_match_all('/[embed](.*)[/embed]/Usi', $text, $match)) {
// Părți de text împărțite prin încorporare.
$text_parts = preg_split('/[embed](.*)[/embed]/Usi', $text);
$body = $text_parts[0];
unset($text_parts[0]);
$text_parts = array_values($text_parts);
// Buclă părți de text, creează încorporare media.
foreach ($text_parts ca $key => $text_part) {
if (isset($match[1][$key])) {
$embed = $match[1][$key];
dacă (!$text) {
$this->addTag(MigrationTags::TAG_MISSING_QUOTE);
}
$body .= $this->createYoutubeEmbed($embed);
}
$body .= $text_part;
}
}
returnează $corp;
}
funcția protejată createYoutubeEmbed($embed) {
// 1. Creați o entitate media YouTube folosind adresa URL.
// 2. Generați încorporare media.
}
}
În createYoutubeEmbed
metoda de care va trebui
- Creați o entitate media YouTube folosind adresa URL.
- Generați încorporare media. Pentru a vă da seama cum ar trebui să arate conținutul media YouTube, creați manual un conținut în Drupal și vedeți codul sursă în CKEditor.
Acesta este un exemplu de încorporare a imaginii media pe care l-am implementat în migrarea mea:
/**
* Creează încorporarea imaginilor media pentru paragrafele de text.
*
* @param \Drupal\media\MediaInterface $media
* Imaginea media.
* @param șir $align
* (opțional) Alinierea imaginii, valori permise: stânga, dreapta, centru.
* @param șir $display
* (opțional) Varianta de afișare a imaginii. Valori permise: mari (implicit),
* mediu, mic.
* @param șir $link
* (opțional) URL link.
*
* @return șir
* Codul de încorporare.
*/
funcția protejată createMediaImageEmbed(MediaInterface $media, $align = '', $display = 'mare', $link = NULL) {
$atribute = [
'data-embed-button' => $media->bundle(),
'data-entity-embed-display' => 'view_mode:media.' . $display,
'data-align' => $align,
'data-entity-type' => 'media',
'data-entity-uuid' => $media->uuid(),
'data-langcode' => 'de',
];
dacă ($link) {
$link = str_inlocuire("/", "\/", $link);
$attributes['data-entity-embed-display-settings'] = '{"link_url":"' . $link . „\/","link_url_target":0}”;
}
$embed = '<entitate-drupal';
foreach ($atribute ca $cheie => $valoare) {
$embed .= " $key=\"$valoare\"";
}
$embed .= '></drupal-entity>';
returnează $embed;
}