web-dev-qa-db-ja.com

entity_embedモジュールのマークアップを解析する

Drupal 8.1.1をAcquiaのLightningディストリビューションで使用しています。メディアエンティティ(ツイート、instagram投稿、youtubeビデオ、画像など)を埋め込んでキャプチャできるようにする必要があります結果のHTML出力はフックで出力されますが、$ node-> body-> valueは次のような奇妙なマークアップを提供します。

<drupal-entity data-align=\"none\" data-caption=\"\" data-embed-button=\"media_library\" data-entity-embed-display=\"entity_reference:entity_reference_entity_view\" data-entity-embed-settings=\"{&quot;view_mode&quot;:&quot;media_library&quot;}\" data-entity-id=\"21\" data-entity-type=\"media\" data-entity-uuid=\"ea90ea95-6b7e-4e44-a1a6-4e7baabe3cb7\"></drupal-entity>\r\n"

そして、レンダラーサービスを介してエンティティをレンダリングすると、前述のマークアップに相当するHTMLだけでなく、ノードの出力全体が得られます。

この出力を解析して、埋め込まれたエンティティの実際のHTMLを取得する方法はありますか?

3
Daniel Peraza

本体には、ckeditorで埋め込みボタンを押したときに設定されるトークンが含まれています。

この未加工のボディコンテンツは、次のフィルターで処理されます。

http://cgit.drupalcode.org/entity_embed/tree/src/Plugin/Filter/EntityEmbedFilter.php

 public function process($text, $langcode) {
    $result = new FilterProcessResult($text);

    if (strpos($text, 'data-entity-type') !== FALSE && (strpos($text, 'data-entity-embed-display') !== FALSE || strpos($text, 'data-view-mode') !== FALSE)) {
      $dom = Html::load($text);
      $xpath = new \DOMXPath($dom);

      foreach ($xpath->query('//drupal-entity[@data-entity-type and (@data-entity-uuid or @data-entity-id) and (@data-entity-embed-display or @data-view-mode)]') as $node) {
        /** @var \DOMElement $node */
....

本文フィールドのみを使用してUIでビューモードを構築するか、コードでフィルターを適用する必要があります。

3
4k4

最後の正しい答え here の助けを借りて、エンティティ埋め込みマークアップを目的のHTMLマークアップに変換することができました。

0
neetu morwani