首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用[embed]*[/embed]标记迁移正文内容?

如何使用[embed]*[/embed]标记迁移正文内容?
EN

Drupal用户
提问于 2021-09-28 14:33:19
回答 1查看 309关注 0票数 0

目前,我正在将Drupal 7站点迁移到Drupal 9,站点中的节点的内容类似于下面的内容。

代码语言:javascript
复制
WHAT WILL YOUR NEXT MEAL BE?
[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]
Lorem Ipsum is simply dummy text of the printing and typesetting industry galley of type and Lorem Ipsum

我尝试使用Rich过滤器将值转储到Body字段中,但是节点显示时使用的是[embed][/embed]之间的链接,而不是呈现项。

谁能建议一个迁移插件或者将

[embed]https://www.youtube.com/watch?v=Np28O3Y_P2o[/embed]

转换成Drupal9Media实体的方法呢?

EN

回答 1

Drupal用户

回答已采纳

发布于 2021-09-29 15:49:56

我不知道这种情况下的插件。

但你可以编写您的自定义插件

在自定义插件中,您需要通过正则表达式解析文本并手动创建youtube媒体实体。

下面是一些代码示例,为您指出正确的方向。

迁移过程插件将解析文本,并处理嵌入部分:

代码语言:javascript
复制
 $text_part) {
        if (isset($matches[1][$key])) {
          $embed = $matches[1][$key];
          if (!$text) {
            $this->addTag(MigrationTags::TAG_MISSING_QUOTE);
          }
          $body .= $this->createYoutubeEmbed($embed);
        }

        $body .= $text_part;
      }
    }
    return $body;
  }

  protected function createYoutubeEmbed($embed) {
    // 1. Create youtube media entity using the URL.
    // 2. Generate media embed.
  }

}

createYoutubeEmbed方法中,您需要

  1. 使用URL创建youtube媒体实体。
  2. 生成媒体嵌入。要弄清楚youtube媒体嵌入应该是什么样子,请手动创建Drupal中的一些内容,并查看CKEditor中的源代码。

这是我在迁移中实现的媒体图像嵌入的一个示例:

代码语言:javascript
复制
/**
   * Creates media image embed for text paragraphs.
   *
   * @param \Drupal\media\MediaInterface $media
   *   The media image.
   * @param string $align
   *   (optional) The image alignment, allowed values: left, right, center.
   * @param string $display
   *   (optional) The image display variant. Allowed values: large (default),
   *   medium, small.
   * @param string $link
   *   (optional) Link URL.
   *
   * @return string
   *   The embed code.
   */
  protected function createMediaImageEmbed(MediaInterface $media, $align = '', $display = 'large', $link = NULL) {
    $attributes = [
      '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',
    ];
    if ($link) {
      $link = str_replace("/", "\/", $link);
      $attributes['data-entity-embed-display-settings'] = '{"link_url":"' . $link . '\/","link_url_target":0}';
    }
    $embed = ' $value) {
      $embed .= " $key=\"$value\"";
    }
    $embed .= '>';
    return $embed;
  }
票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/307378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档