移至主內容
首頁  >  Drupal目錄  >  在Twig模板中修改變數:過濾器

在Twig模板中修改變數:過濾器

Tag :
twig, filters
Written by Shiuan on 13 December 2023

在 Twig 中,可以使用過濾器來修改變數。過濾器與變數之間由一個管道符號分隔。它們可能在括號中具有可選參數。可將多個過濾器連鎖在一起,將一個過濾器的輸出應用於下一個。

例子:

{{ content|safe_join(", ")|lower }}

在過濾變數之前,可能需要渲染一個項目:

{{ item|render|filter }}

Twig 內建了許多過濾器,您可以在官方文件中查看 Drupal 內建的各種過濾器 official documentation

Drupal 9的更改可參考 Preparing for use of Twig 2 in Drupal 9

Drupal特定的過濾器

這些聲明於 TwigExtension::getFilters()

翻譯過濾器

trans

這個過濾器(或者t)將變數透過 Drupal t() 函數運行,該函數將返回一個翻譯後的字符串。應該將此過濾器用於手動放置在模板中,並將出現給用戶的任何界面之字符串。

例子:

<a href="{{ url('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo"></a>

帶替換的例子(有關t()函數的更多詳細信息,請參見t() function ):

{% set name = '@label Introduction' |t({'@label': node.title.value}) %}

placeholder

這個過濾器將內容轉譯為 HTML 並使用 drupal_placeholder() 格式化,使其顯示為強勢文本。

例子:

{% trans %}Submitted on {{ date|placeholder }}{% endtrans %}

不安全的翻譯

有一些模式則是不安全的,不應使用,因為它們直接將變數傳遞給翻譯。這不僅擴大了翻譯字符串的列表,而且還是一個潛在的漏洞,特別是如果輸出可以由用戶輸入。一些不適當的翻譯例子如下:

{# DO NOT DO THIS #}
{{ var1|t }}
{{ var1|placeholder }}
{% trans %}{{ var1 }}{% endtrans %}

其他的過濾器

clean_class

這個過濾器為在 HTML class name 中使用的字符串進行準備。參見 Html::getClass()

clean_id

這個過濾器為在 HTML ID 中使用的字符串進行準備。參見 Html::getID()

format_date

這個過濾器為將時間戳記準備為格式化日期字符串進行準備。參見 DateFormatter::format()

  • 格式化時間戳記:{{ created|format_date }}

  • 使用特定日期類型格式化:{{ created|format_date('short') }}

  • 使用PHP樣式格式化自定義日期類型:{{ created|format_date('custom', 'M j, Y') }}

raw

盡量避免使用這個過濾器,特別是如果您正在輸出可能需要由用戶輸入的數據。有關 Drupal 8 中自動轉譯的更多訊息,請參見 Twig autoescape enabled and text sanitization APIs updated

在 Drupal 9 Twig 2 中,{% raw %} 標籤已被 {% verbatim %} 取代。(另一方面,|raw 過濾器並沒有被棄用。)

render

這個過濾器是 render() 函數的包裝。它接受一個渲染陣列並輸出已渲染的 HTML 標記。如果您想應用其他過濾器(例如剝離標籤)或者如果您想基於已渲染的輸出進行條件判斷(例如,如果您有一個返回空字符串的非空渲染陣列),這可能很有用。它也可以用於字符串和某些對象,主要是那些實現 toString() 方法的對象。

safe_join

safe_join 過濾器使用提供的分隔符號,將多個字符串連接在一起。參見 TwigExtension::safeJoin()

例子:

{{ items|safe_join(', ') }}

這將使 items 變數中的每個字符串連接在一起,並使用逗號分隔每個項目。

without

without 過濾器透過過濾器傳遞參數指定的鍵,創建渲染陣列的副本,並刪除子元素。可以打印此副本而不包含這些元素。原始渲染陣列仍可使用,並且可在 twig 模板中用於完全打印的子元素。參見 twig_without

例子:

{{ content|without('links') }}

這將打印 content 變數中除了 content.links 之外的所有內容。

{{ content|without('links', 'field_some_data') }}

排除兩個元素以便顯示的例子。這將排除 links 和 field_some_data。

add_suggestion

add_suggestion 過濾器允許向使用 #theme 呈現的渲染陣列添加主題建議。例如,如果 content.body 具有 '#theme' => 'field' 的渲染陣列,則使用 |add_suggestion 過濾器與變數 {{ content.body|add_suggestion('details') }} 將允許加載模板 field--details.html.twig

使用 |add_suggestion 添加的主題建議將具有優先權,並且將優先於任何預先存在的主題建議。此過濾器要求Drupal 版本 10.0.0 或更高版本。

例子:

{# in the main template #}  
 
{{ content.field_items|add_suggestion('unordered-list') }} 
{# field--unordered-list.html.twig #}

{% extends 'field.html.twig' %}

{% block content %}
 <ul{{ attributes }}>
   {{ parent() }}
 </ul>
{% endblock content %}

{% block item %}
 <li{{ item.attributes }}>{{ parent() }}</li>
{% endblock item %}

更多的例子可以在 change record introducing the add_suggestion 過濾器中找到。

clean_unique_id

在 Drupal 10.1 及更高版本中新增了一個 clean_unique_id Twig 過濾器。這可用於獲取唯一的ID。該過濾器確保即使模板多次呈現,ID對於每個用途仍然是唯一的。

例子:

<div{{ attributes.setAttribute('id', 'my-id'|clean_unique_id) }}></div>

這將在div標籤中設置一個具有唯一ID的屬性,即使模板多次呈現,該ID仍然是唯一的。

返回Drupal
首頁  >  Drupal  >  在Twig模板中修改變數:過濾器

在Twig模板中修改變數:過濾器

Tag :
twig, filters
Written by Shiuan on 13 December 2023

在 Twig 中,可以使用過濾器來修改變數。過濾器與變數之間由一個管道符號分隔。它們可能在括號中具有可選參數。可將多個過濾器連鎖在一起,將一個過濾器的輸出應用於下一個。

例子:

{{ content|safe_join(", ")|lower }}

在過濾變數之前,可能需要渲染一個項目:

{{ item|render|filter }}

Twig 內建了許多過濾器,您可以在官方文件中查看 Drupal 內建的各種過濾器 official documentation

Drupal 9的更改可參考 Preparing for use of Twig 2 in Drupal 9

Drupal特定的過濾器

這些聲明於 TwigExtension::getFilters()

翻譯過濾器

trans

這個過濾器(或者t)將變數透過 Drupal t() 函數運行,該函數將返回一個翻譯後的字符串。應該將此過濾器用於手動放置在模板中,並將出現給用戶的任何界面之字符串。

例子:

<a href="{{ url('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo"></a>

帶替換的例子(有關t()函數的更多詳細信息,請參見t() function ):

{% set name = '@label Introduction' |t({'@label': node.title.value}) %}

placeholder

這個過濾器將內容轉譯為 HTML 並使用 drupal_placeholder() 格式化,使其顯示為強勢文本。

例子:

{% trans %}Submitted on {{ date|placeholder }}{% endtrans %}

不安全的翻譯

有一些模式則是不安全的,不應使用,因為它們直接將變數傳遞給翻譯。這不僅擴大了翻譯字符串的列表,而且還是一個潛在的漏洞,特別是如果輸出可以由用戶輸入。一些不適當的翻譯例子如下:

{# DO NOT DO THIS #}
{{ var1|t }}
{{ var1|placeholder }}
{% trans %}{{ var1 }}{% endtrans %}

其他的過濾器

clean_class

這個過濾器為在 HTML class name 中使用的字符串進行準備。參見 Html::getClass()

clean_id

這個過濾器為在 HTML ID 中使用的字符串進行準備。參見 Html::getID()

format_date

這個過濾器為將時間戳記準備為格式化日期字符串進行準備。參見 DateFormatter::format()

  • 格式化時間戳記:{{ created|format_date }}

  • 使用特定日期類型格式化:{{ created|format_date('short') }}

  • 使用PHP樣式格式化自定義日期類型:{{ created|format_date('custom', 'M j, Y') }}

raw

盡量避免使用這個過濾器,特別是如果您正在輸出可能需要由用戶輸入的數據。有關 Drupal 8 中自動轉譯的更多訊息,請參見 Twig autoescape enabled and text sanitization APIs updated

在 Drupal 9 Twig 2 中,{% raw %} 標籤已被 {% verbatim %} 取代。(另一方面,|raw 過濾器並沒有被棄用。)

render

這個過濾器是 render() 函數的包裝。它接受一個渲染陣列並輸出已渲染的 HTML 標記。如果您想應用其他過濾器(例如剝離標籤)或者如果您想基於已渲染的輸出進行條件判斷(例如,如果您有一個返回空字符串的非空渲染陣列),這可能很有用。它也可以用於字符串和某些對象,主要是那些實現 toString() 方法的對象。

safe_join

safe_join 過濾器使用提供的分隔符號,將多個字符串連接在一起。參見 TwigExtension::safeJoin()

例子:

{{ items|safe_join(', ') }}

這將使 items 變數中的每個字符串連接在一起,並使用逗號分隔每個項目。

without

without 過濾器透過過濾器傳遞參數指定的鍵,創建渲染陣列的副本,並刪除子元素。可以打印此副本而不包含這些元素。原始渲染陣列仍可使用,並且可在 twig 模板中用於完全打印的子元素。參見 twig_without

例子:

{{ content|without('links') }}

這將打印 content 變數中除了 content.links 之外的所有內容。

{{ content|without('links', 'field_some_data') }}

排除兩個元素以便顯示的例子。這將排除 links 和 field_some_data。

add_suggestion

add_suggestion 過濾器允許向使用 #theme 呈現的渲染陣列添加主題建議。例如,如果 content.body 具有 '#theme' => 'field' 的渲染陣列,則使用 |add_suggestion 過濾器與變數 {{ content.body|add_suggestion('details') }} 將允許加載模板 field--details.html.twig

使用 |add_suggestion 添加的主題建議將具有優先權,並且將優先於任何預先存在的主題建議。此過濾器要求Drupal 版本 10.0.0 或更高版本。

例子:

{# in the main template #}  
 
{{ content.field_items|add_suggestion('unordered-list') }} 
{# field--unordered-list.html.twig #}

{% extends 'field.html.twig' %}

{% block content %}
 <ul{{ attributes }}>
   {{ parent() }}
 </ul>
{% endblock content %}

{% block item %}
 <li{{ item.attributes }}>{{ parent() }}</li>
{% endblock item %}

更多的例子可以在 change record introducing the add_suggestion 過濾器中找到。

clean_unique_id

在 Drupal 10.1 及更高版本中新增了一個 clean_unique_id Twig 過濾器。這可用於獲取唯一的ID。該過濾器確保即使模板多次呈現,ID對於每個用途仍然是唯一的。

例子:

<div{{ attributes.setAttribute('id', 'my-id'|clean_unique_id) }}></div>

這將在div標籤中設置一個具有唯一ID的屬性,即使模板多次呈現,該ID仍然是唯一的。