web-dev-qa-db-ja.com

twigで特殊文字をHTMLに変換する方法

drupal 8にいくつかのリストアイテムがあります。これはitem_listテンプレートによって作成されました。<a>タグ付きのデータをitem_listテンプレートに送信しています。私のアイデアは出力を<a href="/this-is-new.html">This is new page</a>として取得します。

ただし、出力は<li>&lt;a href="/this-is-new.html"&gt;This is new page&lt;/a&gt;</li>として返されます。

これをtwigテンプレートに印刷する必要があります。ただし、出力では、HTMLアンカータグとしてではなく、テンプレート内の文字列としてレンダリングしました。別のページへのリンクを表示する必要がありました。テンプレートですが、得られるのは<a href="/this-is-new.html">This is new page</a>の文字列だけです。どうすればよいですか?

5
i am batman

注:これはコメントに記載されているように悪い習慣と見なされているため、ここにtoを残して、回避する必要があります避けるべき例

あなたのtwigテンプレート内でこれを試してください

  {{ var|raw }}

ここで、varは出力される変数です。

詳細については こちら

3
GiorgosK

Convert_encoding( 'UTF-8'、 'HTML-ENTITIES')twig filter。たとえば、{{item | convert_encoding( 'UTF-8'、 'HTML-ENTITIES')}}を使用してみてください。

2
Aditya Joshi

HTMLマークアップをテンプレートに送信するには、#markupレンダー要素を使用します

$variables['link'] = [
  '#markup' => '<a href="/this-is-new.html">This is new page</a>',
];

変数をtwigで出力するときにhtmlタグがエスケープされないようにします。

{{ link }}

ここのリンクはほんの一例です。リンクを作成するより良い方法があります。 リンクを作成するにはどうすればよいですか?

2
4k4

ただし、出力は<li>&lt;a href="/this-is-new.html"&gt;This is new page&lt;/a&gt;</li>として返されます。

この理由は、TwigはHTMLを自動的にエスケープするためです。リストでは、<li>などのリスト関連のHTMLタグのみが許可されます。

drupal 8

私の考えは、出力を<a href="/this-is-new.html">This is new page</a>として取得することでした

フィールドタイプとしてListを使用せず、代わりにLinkを使用してunlimitedに設定します。

enter image description here


新しいノードを追加すると、次のようになります。

enter image description here

1
No Sssweat

レンダリングシステムを通じて安全な文字列を渡すオブジェクトを定義するMarkup classを使用できます。

1.)最初にモジュール内にTwigExtension.phpクラスを作成し、フォーマットされた文字列を実際に返す関数を定義する必要があります。

2.)twigファイル内でその関数を使用して、フォーマットされた文字列をレンダリングします。

3.)Drush crを使用して、キャッシュを再構築します。

-> modules/module_nameの下にmodule_name.services.ymlファイルを作成:

services:
  module_name.twig.TwigExtension:
    class: Drupal\module_name\TwigExtension
    tags:
      - {name: twig.extension}

-> modules/module_name/src/TwigExtension.phpの下にTwigExtension.phpを作成します:

<?php

namespace Drupal\module_name;

use Drupal\Core\Render\Markup;

/**
 * Class DefaultService.
 *
 * @package Drupal\module_name
 */
class TwigExtension extends \Twig_Extension {

  /**
   * {@inheritdoc}
   * This function must return the name of the extension. It must be unique.
   */
  public function getName() {
    return 'block_display';
  }

  /**
   * In this function we can declare the extension function
   */
  public function getFunctions() {
    return array(
      new \Twig_SimpleFunction('render_string', array($this, 'render_string'), array('is_safe' => array('html'))),
    );
  }

  /**
   * Function to decode html special chars
   */
  public function render_string($string) {
    $render_string = Markup::create($string);
    return $render_string;
  }

-> ** twig関数を内部に挿入twigファイル:**

{% set str = render_string('<a href="/this-is-new.html">This is new page</a>') %}
....
....
{{ str }}

これがあなたを助けることを願っています。

1
Ashish Deynap