web-dev-qa-db-ja.com

プレーンテキストをHTMLとしてDrupal 8 twig

Svg画像のマークアップコードをプレーンテキストフィールドからhtmlにレンダリングしようとしている壁に遭遇しました。

他の場所でのプレーンテキストフィールドのレンダリングを上書きせずに、プレーンテキストフィールドからsvgコードをレンダリングしたいと考えています。

現在、プレーンテキスト形式では、すべてのhtmlタグと<>が&lt; &gt;に変換されます。

私はフィールドテンプレートを作成し、フィールドコンテンツを

{{ item.content.context.value }}

そして

{{ item.content|raw }}

どちらも、値を「引用符」ですべての行をラップする文字列としてレンダリングし、改行を<br/>タグに変換します。

以前はフィールドタイプでフォーマットされたテキストがありましたが、すべてのタグが許可されている場合でも、<pre>タグですべてが囲まれていました。私はそれをプレーンテキストで動作させたいです。

フィールドがテキスト形式で保持する必要があるsvg-codeの例:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         viewBox="0 0 290 290" enable-background="new 0 0 290 290" xml:space="preserve">
    <g>
        <path fill="none" stroke="#78C681" stroke-width="3" stroke-miterlimit="10" d="M261.1,273.1H28.9c-6.6,0-12-5.4-12-12V28.9
            c0-6.6,5.4-12,12-12h232.1c6.6,0,12,5.4,12,12v232.1C273.1,267.7,267.7,273.1,261.1,273.1z"/>
        <circle fill="none" stroke="#1B435D" stroke-width="2" stroke-miterlimit="10" cx="145.2" cy="166.9" r="62.7"/>
        <line fill="none" stroke="#78C681" stroke-width="3" stroke-miterlimit="10" x1="16.9" y1="60.8" x2="273.1" y2="60.8"/>
        <circle fill="none" stroke="#1B435D" stroke-width="2" stroke-miterlimit="10" cx="178.3" cy="152.3" r="6.8"/>
        <path fill="none" stroke="#1B435D" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" d="M115.1,167.9
            c8.8,0,22.3,3.2,28.4,4.7"/>
        <path fill="none" stroke="#1B435D" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" d="M151.9,216.9
            c0,0,17.2-1.5,29.6-14.8"/>
    </g>
</svg>

誰かが助けてくれることを願っています。

ベスト、

アラリ

15
Alari Truuts

Drupalコミュニティからのiworkyonによる解決策:

フィールド-ノード-[フィールド名] .html.twig:

{% if svg %}
  <div class="my-svg">
    {{ svg|raw }}
  </div>
{% endif %}

THEME.info:

/**
* Implements hook_preprocess_field().
*/
function MYTHEME_preprocess_field(&$variables, $hook) {
    switch ($variables['element']['#field_name']) {
      case 'field_svg_test':
        $variables['svg'] = $variables['items'][0]['content']['#context']['value'];
        break;
    }
}
17
Alari Truuts

これは私のために働きました:

{{ item.content['#context'].value|raw }}
8
Janey

値に生のフィルターを適用しようとしましたか?

{{ item.content.context.value|raw }}

しかし、これは安全ではありません。ファイルを出力するには、ファイルフィールドを使用できます。これには、リンクを生成するための正しいフィールドフォーマッターがあります。必要に応じてUIのリンクを構成できない場合は、twigまたはこの特定のフィールドの前処理を変更できます。

8
4k4