drupal 8にいくつかのリストアイテムがあります。これはitem_list
テンプレートによって作成されました。<a>
タグ付きのデータをitem_list
テンプレートに送信しています。私のアイデアは出力を<a href="/this-is-new.html">This is new page</a>
として取得します。
ただし、出力は<li><a href="/this-is-new.html">This is new page</a></li>
として返されます。
これをtwigテンプレートに印刷する必要があります。ただし、出力では、HTMLアンカータグとしてではなく、テンプレート内の文字列としてレンダリングしました。別のページへのリンクを表示する必要がありました。テンプレートですが、得られるのは<a href="/this-is-new.html">This is new page</a>
の文字列だけです。どうすればよいですか?
注:これはコメントに記載されているように悪い習慣と見なされているため、ここにtoを残して、回避する必要があります避けるべき例
あなたのtwigテンプレート内でこれを試してください
{{ var|raw }}
ここで、var
は出力される変数です。
詳細については こちら
Convert_encoding( 'UTF-8'、 'HTML-ENTITIES')twig filter。たとえば、{{item | convert_encoding( 'UTF-8'、 'HTML-ENTITIES')}}を使用してみてください。
HTMLマークアップをテンプレートに送信するには、#markup
レンダー要素を使用します
$variables['link'] = [
'#markup' => '<a href="/this-is-new.html">This is new page</a>',
];
変数をtwigで出力するときにhtmlタグがエスケープされないようにします。
{{ link }}
ここのリンクはほんの一例です。リンクを作成するより良い方法があります。 リンクを作成するにはどうすればよいですか?
ただし、出力は
<li><a href="/this-is-new.html">This is new page</a></li>
として返されます。
この理由は、TwigはHTMLを自動的にエスケープするためです。リストでは、<li>
などのリスト関連のHTMLタグのみが許可されます。
drupal 8
私の考えは、出力を
<a href="/this-is-new.html">This is new page</a>
として取得することでした
フィールドタイプとしてListを使用せず、代わりにLinkを使用してunlimitedに設定します。
新しいノードを追加すると、次のようになります。
レンダリングシステムを通じて安全な文字列を渡すオブジェクトを定義する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 }}
これがあなたを助けることを願っています。