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

ฉันพยายามดัมพ์ค่าลงใน ร่างกาย สนามกับ ตัวกรอง Rich Textแต่โหนดจะแสดงพร้อมลิงก์ระหว่าง [ฝัง] และ [/ฝัง]แทนที่จะเป็นรายการแสดงผล

ใครช่วยแนะนำปลั๊กอินการโยกย้ายหรือวิธีแปลงได้ไหม <p>[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]</p> ไปยังเอนทิตี Drupal 9 Media หรือไม่

Score:1
ธง in

ฉันไม่ทราบเกี่ยวกับปลั๊กอินสำหรับกรณีนี้

แต่คุณทำได้ เขียนปลั๊กอินที่คุณกำหนดเอง.

ในปลั๊กอินที่กำหนดเอง คุณจะต้องแยกวิเคราะห์ข้อความด้วยนิพจน์ทั่วไป และสร้างเอนทิตีสื่อ 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 วิธีที่คุณจะต้อง

  1. สร้างเอนทิตีสื่อ YouTube โดยใช้ URL
  2. สร้างสื่อฝัง หากต้องการทราบว่าการฝังสื่อ 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;
  }
miststudent2011 avatar
fr flag
Thank you for your answer, Markup part was the missing piece in my custom Migration Plugin, will try to integrate the markup in my plugin .

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา