Рейтинг:0

Как перенести содержимое тела с помощью тегов [embed]*[/embed]?

флаг fr

В настоящее время я работаю над переносом сайта Drupal 7 на Drupal 9. Узлы на сайте имеют узлы с содержимым, подобным следующему.

<h3><strong>WHAT WILL YOUR NEXT MEAL BE?</strong></h3>
<p>[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]</p>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry galley of type and Lorem Ipsum</p>

Я попытался сбросить значение в Тело поле с Фильтр расширенного текста, но узлы отображаются со связью между [вставить] и [/вставить], вместо элемента рендеринга.

Может ли кто-нибудь предложить плагин миграции или способ конвертировать <p>[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]</p> для Drupal 9 медиаобъектов?

Рейтинг:1
флаг in

Я не знаю о каких-либо плагинах для этого случая.

Но вы можете написать свой собственный плагин.

В пользовательском плагине вам нужно будет анализировать текст с помощью регулярного выражения и создавать из него медиаобъекты youtube вручную.

Вот несколько примеров кода, которые укажут вам правильное направление.

Плагин процесса миграции будет анализировать текст и обрабатывать встраиваемые части:

<?php

пространство имен Drupal\my_migrate\Plugin\migrate\process;

используйте Drupal\migrate\ProcessPluginBase;
используйте Drupal\migrate\MigrateExecutableInterface;
используйте Drupal\migrate\Row;

/**
 * Предоставляет подключаемый модуль процесса переноса основного текста.
 *
 * @MigrateProcessPlugin(
 * id = "тело_текст"
 * )
 */
класс BodyText расширяет ProcessPluginBase {

  /**
   * {@inheritdoc}
   */
  общедоступная функция преобразования ($ значение, MigrateExecutableInterface $ migrate_executable, строка $ строка, $ destination_property) {
    $тело = '';

    if (preg_match_all('/[embed](.*)[/embed]/Usi', $text, $matches)) {
      // Части текста, разделенные вставками.
      $text_parts = preg_split('/[embed](.*)[/embed]/Usi', $text);

      $тело = $text_parts[0];
      сбросить ($ text_parts [0]);
      $text_parts = array_values($text_parts);

      // Зацикливаем текстовые части, создаем вставки мультимедиа.
      foreach ($text_parts как $key => $text_part) {
        если (isset($matches[1][$key])) {
          $embed = $matches[1][$key];
          если (!$текст) {
            $this->addTag(MigrationTags::TAG_MISSING_QUOTE);
          }
          $body .= $this->createYoutubeEmbed($embed);
        }

        $тело .= $text_part;
      }
    }
    вернуть $тело;
  }

  защищенная функция createYoutubeEmbed($embed) {
    // 1. Создайте медиа-объект YouTube, используя URL-адрес.
    // 2. Создать медиа-вставку.
  }

}


в создатьYoutubeВставить метод, который вам понадобится

  1. Создайте медиа-объект YouTube, используя URL-адрес.
  2. Создать вставку мультимедиа. Чтобы выяснить, как должно выглядеть встраивание медиафайлов YouTube, создайте некоторый контент в Drupal вручную и просмотрите исходный код в CKEditor.

Это пример встраивания медиа-изображения, который я реализовал в своей миграции:

/**
   * Создает вставку медиа-изображения для текстовых абзацев.
   *
   * @param \Drupal\media\MediaInterface $медиа
   * Образ СМИ.
   * @param строка $align
   * (опционально) Выравнивание изображения, допустимые значения: слева, справа, по центру.
   * @param строка $display
   * (опционально) Вариант отображения изображения. Допустимые значения: большой (по умолчанию),
   * средний, маленький.
   * @param строка $ссылка
   * (необязательно) URL ссылки.
   *
   * @возвратная строка
   * Код для вставки.
   */
  защищенная функция createMediaImageEmbed(MediaInterface $media, $align = '', $display = 'large', $link = NULL) {
    $ атрибуты = [
      'data-embed-button' => $media->bundle(),
      'data-entity-embed-display' => 'view_mode:media.' . $ дисплей,
      'выравнивание данных' => $ выравнивание,
      'data-entity-type' => 'носитель',
      'data-entity-uuid' => $media->uuid(),
      'data-langcode' => 'de',
    ];
    если ($ссылка) {
      $link = str_replace("/", "\/", $link);
      $attributes['data-entity-embed-display-settings'] = '{"link_url":"' . $ ссылка . '\/","link_url_target":0}';
    }
    $embed = '<сущность drupal';
    foreach ($ атрибуты как $ ключ => $ значение) {
      $embed .= "$key=\"$value\"";
    }
    $embed .= '></drupal-entity>';
    вернуть $ вставить;
  }
miststudent2011 avatar
флаг fr
Спасибо за ваш ответ, часть разметки была недостающей частью моего пользовательского плагина миграции, я попытаюсь интегрировать разметку в свой плагин.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.