Puncte:0

Cum migrez conținutul corpului cu etichetele [embed]*[/embed]?

drapel fr

În prezent lucrez la migrarea unui site Drupal 7 la Drupal 9. Nodurile din site au noduri cu conținut similar celui de mai jos.

<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>

Am încercat să arunc valoarea în Corp câmp cu Filtru de text îmbogățit, dar nodurile sunt afișate cu o legătură între [încorporare] și [/încorporare], în loc de un element de randare.

Poate cineva să sugereze un plugin de migrare sau o modalitate de conversie <p>[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]</p> către entitățile Drupal 9 Media?

Puncte:1
drapel in

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

  1. Creați o entitate media YouTube folosind adresa URL.
  2. 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;
  }
miststudent2011 avatar
drapel fr
Vă mulțumesc pentru răspuns, partea de marcare a fost piesa lipsă din pluginul meu personalizat de migrare, voi încerca să integrez marcajul în pluginul meu.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.