爲模版設計師而生的Twig(上)-Twig使用指南

掌握了如何安裝Twig模版引擎以後,接下來就要學習Twig的語法和語義,而後建立Twig模版。而本文的將花費較大的篇幅來介紹模板引擎的語法和語義,這對於模版設計師將會是很是有用的參考。因爲本文的原文篇幅較長,因此就分紅兩部分進行翻譯。本文爲第一部分。php


1. 概要html

模板是一個簡單的文本文件。它能夠生成任何基於文本的格式(HTML、XML、CSV等)。它不具備特定擴展名,html或xml都OK。 模板中包含的變量或表達式,用來控制模板的邏輯。當模版被預處理時,它們會被替換爲變量值。git

下面是說明了一些基本要素的最小模板。稍後咱們將介紹更多細節:github

<!DOCTYPE html>
<html>
    <head>
        <title>My Webpage</title>
    </head>
    <body>
        <ul id="navigation">
        {% for item in navigation %}
            <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
        {% endfor %}
        </ul>
        <h1>My Webpage</h1>
        {{ a_variable }}
    </body>
</html>

Twig有兩種類型的分隔符:{%...%} 和 {{...}} 。第一個是用於執行諸如for循環的控制語句,後者則在模板中打印一個表達式的結果。web


2. IDEs 集成vim

許多IDE支持Twig語法高亮和自動完成標籤: api

※ TextMate 經過 Twig Bundle數組

※ Vim 經過 Jinja syntax 插件 或 vim-twig 插件 ide

※ NetBeans 經過 Twig syntax 插件(7.2+) 函數

※ PhpStorm(原生2.1+) 

※ Eclipse 經過 Twig plugin

※ Sublime 經過 Twig bundle 

※ GtkSourceView 經過 Twig language definition

※ Coda and SubEthaEdit 經過 Twig syntax mode 

※ Coda 2 經過 other Twig syntax mode

※ Komodo and Komodo Edit 經過 Twig highlight/syntax check mode

※ Notepad++ 經過 Notepad++ Twig Highlighter

※ Emacs 經過 web-mode.el


3. 變量

應用程序將變量傳遞到操做的模板中。你也能夠訪問變量的屬性或元素。一個變量的可視化表示在很大程度上依賴於應用程序提供的值。你可使用點(.)或所謂的下標語法([])來訪問變量的屬性(PHP對象的方法或屬性,PHP數組的元素)。

{{ foo.bar }}
{{ foo['bar'] }}


當屬性中包含特殊字符(如 - 這會被解釋爲減號操做符),使用attribute()函數來替代使用點(.)訪問變量屬性:

{# equivalent to the non-working foo.data-foo #}
{{ attribute(foo, 'data-foo') }}

 重要提示:要知道,大括號不是變量的一部分,print語句除外。當訪問標籤內的變量,不要把大括號加在變量上。


若是一個變量或屬性不存在,strict_variables選項設置爲false時,您將收到一個空值;另外,若是strict_variables設置爲true,Twig將會拋出一個錯誤(參照見 environment options


變量調用機制

爲了方便起見,在PHP表現層調用foo.bar時,會進行如下操做:

a.1 檢查foo是不是個數組,並檢查bar是不是有效的元素

a.2 若是不是,foo是個對象,並檢查bar是不是有效的屬性

a.3 若是不是,foo是個對象,並檢查bar是不是有效方法。(即便bar是一個構造器。那麼請使用__construct()方法替代

a.4 若是不是,foo是個對象,會檢查getBar()是不是有效的方法

a.5 若是不是,foo是個對象,會檢查isBar()是不是有效的方法

a.6 若是不是,返回空值(null)

a.7 檢查foo是一個數組和bar是一個有效的元素; 

a.8 若是沒有,則返回null值。

 提示:若是你想訪問一個變量的動態屬性,使用attribute()函數來代替。


4. 全局變量

下面的變量在模板中老是可用:

_self: 引用當前模版;

_context: 引用當前的上下文;

_charset: 引用當前的字符集。


5. 設置變量

您能夠將值賦給內部代碼塊中的變量。賦值使用 set 標籤:

{% set foo = 'foo' %}
{% set foo = [1, 2] %}
{% set foo = {'foo': 'bar'} %}


6. 過濾器

變量能夠經過過濾器進行修改。過濾器和變量之間使用管道符號(也就是豎線 | )分隔開,過濾器括號中可能有可選的參數。多個過濾器能夠串連使用,濾波器的輸出會被應用於下一個過濾器。 

下面的示例是從名稱中刪除全部的HTML標籤並應用title-cases格式化:

{{ name|striptags|title }}


過濾器接受括號中的參數。 這個例子將用逗號鏈接一個列表:

{{ list|join(', ') }}


要對一段代碼應用過濾器,只要使用 filter 標籤把它包起來:

{% filter upper %}
    This text becomes uppercase
{% endfilter %}

訪問 Filters 頁面,以瞭解更多關於內置過濾器。


7. 函數

函數能夠被調用來生成內容。函數是經過它們的[函數名+()]進行調用的,可能還帶有參數。

例如,range()函數返回一個包含一個整數等差數列的列表:

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

訪問  Functions 頁面,以瞭解更多關於內置函數。


8. 命名參數

1.12版本新特性:對命名參數的支持被添加到Twig 1.12版。

{% for i in range(low=1, high=10, step=2) %}
    {{ i }},
{% endfor %}


使用命名參數,讓你的模板更明確的瞭解,您做爲參數傳遞的值的含義:

{{ data|convert_encoding('UTF-8', 'iso-2022-jp') }}
{# versus (對比) #}
{{ data|convert_encoding(from='iso-2022-jp', to='UTF-8') }}


命名參數還容許您跳過一些你不但願更改默認值的參數:

{# the first argument is the date format, which defaults to the global date format if null is passed #}
{{ "now"|date(null, "Europe/Paris") }}
{# or skip the format value by using a named argument for the time zone #}
{{ "now"|date(timezone="Europe/Paris") }}


您也能夠在一個調用中使用佔位參數和命名參數,在這種狀況下,佔位參數必須在命名參數以前:

{{ "now"|date('d/m/Y H:i', timezone="Europe/Paris") }}

 提示:每一個函數和過濾器的文檔頁面,都有一段內容,列出它們支持的全部參數名稱。


9. 控制結構

控制結構指的是全部這些控制程序流程的代碼:條件語句(如:if/elseif/else)、for循環以及相似的代碼塊。控制結構出如今{%...%}塊內。

例如,要顯示一個由變量(users)提供的用戶列表,使用 for 標籤:

<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>


if 標籤能夠用於測試表達式:

{% if users|length > 0 %}
    <ul>
        {% for user in users %}
            <li>{{ user.username|e }}</li>
        {% endfor %}
    </ul>
{% endif %}

訪問 tags 頁面,以瞭解更多關於內置標籤。


10. 註釋

要在模板中註釋掉一部分,使用註釋語法{#...#}。這對於調試或添加信息給其餘模板設計者或本身看會頗有用:

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


11. 包含其餘模板

包含一個模板時,include標籤頗有用,它會返回該模板(子模版)的內容呈現到當前模版(父模版):

{% include 'sidebar.html' %}


默認狀況下每一個被包含的模板都會傳遞當前上下文(context)。傳遞給父模板的上下文,還包括在子模板中定義的變量:

{% for box in boxes %}
    {% include "render_box.html" %}
{% endfor %}

被包含的模板 render_box.html 可以訪問變量 box。


模板的文件名取決於模板加載器。例如,Twig_Loader_Filesystem 容許你經過給文件名來訪問其餘模板。您能夠訪問以斜線分隔的子目錄中的模板:

{% include "sections/articles/sidebar.html" %}

此行爲取決於應用程序中嵌入Twig。


原文標題: 爲模版設計師而生的Twig(上)-Twig使用指南

原文連接: http://loiy.net/post/776.html

相關文章
相關標籤/搜索