Điểm:0

Làm cách nào để di chuyển nội dung cơ thể bằng các thẻ [embed]*[/embed]?

lá cờ fr

Hiện tại tôi đang tiến hành di chuyển trang web Drupal 7 sang Drupal 9. Các nút trong trang web có các nút có nội dung tương tự như nút sau.

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

Tôi đã cố gắng đổ giá trị vào Thân thể lĩnh vực với Bộ lọc văn bản đa dạng thức, nhưng các nút được hiển thị với một liên kết giữa [nhúng][/nhúng], thay vì một mục hiển thị.

Bất cứ ai có thể vui lòng đề xuất một plugin di chuyển hoặc một cách để chuyển đổi <p>[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]</p> cho các thực thể Drupal 9 Media?

Điểm:1
lá cờ in

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

  1. Tạo thực thể phương tiện youtube bằng URL.
  2. 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;
  }
miststudent2011 avatar
lá cờ fr
Cảm ơn câu trả lời của bạn, phần Đánh dấu là phần còn thiếu trong Plugin Di chuyển tùy chỉnh của tôi, sẽ cố gắng tích hợp phần đánh dấu trong plugin của tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.