Skip to main content

Twig教學 - 基本語法

Submitted by admin on Mon, 01/13/2020 - 09:05

0.Twig介紹

Twig是Drupal 8所採用的模板語言。當我們的網頁要輸出HTML內容時,Twig會找到對應的template,也就是Drupal資料中的.html.twig檔案,並把這份檔案轉換成一個編譯過的php模板檔案。

我們可以在 sites/default/files/php/twig找到twig編譯而成的php模板檔案。這些檔案只有在網頁頁面第一次被存取的時候會被編譯,之後就會存在於資料夾中重複使用,直到我們clear cache為止。

 

1.透過{{}}印出內容

{{}}符號可以印出包裹在裡面的內容,例如當我們想要透過php輸出一個名為content的變數到HTML時:

<div class="content"><?php print $content; ?></div>

在twig裡面則是

<div class="content">{{ content }}</div>

我們也可以透過一個點.(dot)符號來存取變數更深層的內容,例如

{{ foo.bar }}

在上面這個情況,Twig會在PHP層依序做下列檢查:

  • 檢查foo是否是個陣列且bar是個有效的元素;
  • 若上述檢查為否,檢查foo是否是個物件,且bar是否是個有效的物件成員;
  • 若上述檢查為否,且foo是個物件,則檢查bar是否是物件的方法  (even if bar is the constructor - use __construct() instead);
  • 若上述檢查為否,且foo是個物件,依序檢查此物件是否有getBarisBarhasBar方法可以呼叫並回傳;
  • 若上述檢查為否,且foo是個物件, 回傳null。

 

當然,Twig也可以透過方括號存取陣列內容,例如

{{ foo['bar'] }}

此時,Twig會對foo進行以下檢查

  • 檢查foo是否是個陣列且bar是個有效的元素;
  • 若上述檢查為否, 回傳null。

 

在Twig當中。我們也可以使用「|」符號將變數透過濾鏡,進行過濾與篩選。例如下面的範例會將變數name去掉所有的HTML tag,並把所有的英文單字字首改成大寫,其餘改成小寫。

{{ name|striptags|title }}        {# 如果$name='<div>learn twig</div>',輸出'Learn Twig' #}

我們可以在Twig的官方網站找到濾鏡一覽表。

 

2.透過{%%}進行邏輯操作

{%%}符號所包裹的內容會被當作程式執行,例如下面這個範例會輸出0, 1, 2, 3

{% for i in range(0, 3) %}
    {{ i }},
{% endfor %}

 

如果要在一整個段落中使用上面提到的濾鏡,我們可以在{%%}符號中使用apply標籤,並在後面接上濾鏡名稱。例如

{% apply upper %}
    This text becomes uppercase
{% endapply %}

 

下面這個if範例搭配了一些HTML。如果變數有內容則輸出其HTML標籤,是在Drupal的Twig模板中很常見到的表示形式

{% if site_slogan %}
  <div class="site-slogan">{{ site_slogan }}</div>
{% endif %}

 

Twig的變數大部分來自外部輸入,但有時候我們會需要定義Twig自己的變數。下面的範例分別定義了一個變數與一個陣列

{% set foo="bar" %}

{%
  set foo_array = [
    'foo',
    'bar',
  ]
%}

 

3.透過{##}進行註解

{##}符號內的文字會被無視,除了註解之外可以利用這點進行快速的debug測試。

{# note: disabled template because we no longer use this
    {% for user in users %}
        ...
    {% endfor %}
#}

 

Tags