程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Twig 的 tags學習(中文) 之一

Twig 的 tags學習(中文) 之一

編輯:關於PHP編程

Twig 是個 簡單而強力的模板,因為在學習sf 所以看看她。

本文來源http://twig.sensiolabs.org/doc/tags/index.html

 


目前支持的tags包括

    for    if    macro    filter    set    extends    block    include    import    from    use    spaceless    autoescape    raw    flush    do

twig在html分為3種

{{...}} 直接輸出其中的變量


{#...#} 注釋標簽


{%...%} 命令標簽,就是我們要學習的這些


for標簽
這個最簡單,就是循環。

基於數組的循環


<h1>Members</h1> 
<ul> 
    {% for user in users %} 
        <li>{{ user.username|e }}</li> 
    {% endfor %} 
</ul> 
<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>
基於數字的循環,特別要注意,這裡會輸出0-10 也就是11個數字。

 

{% for i in 0..10 %} 
    * {{ i }} 
{% endfor %} 
{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

基於字母的循環


{% for letter in 'a'..'z' %} 
    * {{ letter }} 
{% endfor %} 
{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}
在循環體內部的變量 

變量名 描述 loop.index 循環的次數(從1開始) loop.index0 循環的次數(從0開始) loop.revindex 循環剩余次數(最小值為1) loop.revindex0 循環剩余次數(最小值為0) loop.first 當第一次循環的時候返回true loop.last 當最後一次循環的時候返回true loop.length 循環的總數 loop.parent 被循環的數組  

loop.length, loop.revindex, loop.revindex0,loop.last 這幾個值只有在被循環的是 php數組 或實現了Countable 接口的類,才有效。


添加一個條件
跟PHP不一樣,在循環內部不支持break和continue語句,你只能通過過濾器去跳過一些循環,就像這樣


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


else 分支
如果 users是個空數組就會輸出no user found 。

<ul> 
    {% for user in users %} 
        <li>{{ user.username}}</li> 
    {% else %} 
        <li><em>no user found</em></li> 
    {% endfor %} 
</ul> 
<ul>
    {% for user in users %}
        <li>{{ user.username}}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

 

按keys循環

<h1>Members</h1> 
<ul> 
    {% for key in users|keys %} 
        <li>{{ key }}</li> 
    {% endfor %} 
</ul> 
<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>


按keys, values循環


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

 

if標簽
這個不用多說,直接看例子{% if users %} 
    <ul> 
        {% for user in users %} 
            <li>{{ user.username|e }}</li> 
        {% endfor %} 
    </ul> 
{% endif %} 
 
{% if kenny.sick %} 
    Kenny is sick. 
{% elseif kenny.dead %} 
    You killed Kenny!  You bastard!!! 
{% else %} 
    Kenny looks okay --- so far 
{% endif %} 
{% if users %}
    <ul>
        {% for user in users %}
            <li>{{ user.username|e }}</li>
        {% endfor %}
    </ul>
{% endif %}

{% if kenny.sick %}
    Kenny is sick.
{% elseif kenny.dead %}
    You killed Kenny!  You bastard!!!
{% else %}
    Kenny looks okay --- so far
{% endif %}

 

macro標簽
macro(宏標簽)類似於其他語言中的函數,常用於填充html標簽,以下是一個例子,用來渲染<input>


{% macro input(name, value, type, size) %} 
    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> 
{% endmacro %} 
{% macro input(name, value, type, size) %}
    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
{% endmacro %}
macro與函數的不同之處在於:

1、參數的默認值是通過macro塊內部的 default過濾器來定義的。

2、參數總是可選的。

另外,就跟php函數一樣,macro內部是無法使用外部的變量的。但你可以傳遞一個特殊變量_context作為參數來獲取整個內容。

macro可以被定義在任何的模板內,但在你使用之前需要使用 imported


{% import "forms.html" as forms %} 
{% import "forms.html" as forms %}然後就可以這樣使用了


<p>{{ forms.input('username') }}</p> 
<p>{{ forms.input('password', null, 'password') }}</p> 
<p>{{ forms.input('username') }}</p>
<p>{{ forms.input('password', null, 'password') }}</p>如果你要在定義macro的模板裡使用,就不需要imported 可以使用特殊變量_self


<p>{{ _self.input('username') }}</p> 
<p>{{ _self.input('username') }}</p>
如果你要定義一個macro裡 包含另一個macro,並且兩個macro在同一個文件裡,可以使用特殊變量_self


{% macro input(name, value, type, size) %} 
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> 
{% endmacro %} 
 
{% macro wrapped_input(name, value, type, size) %} 
    <div class="field"> 
        {{ _self.input(name, value, type, size) }} 
    </div> 
{% endmacro %} 
{% macro input(name, value, type, size) %}
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
{% endmacro %}

{% macro wrapped_input(name, value, type, size) %}
    <div class="field">
        {{ _self.input(name, value, type, size) }}
    </div>
{% endmacro %}
如果兩個macro在不同的文件裡,你需要使用import


{# forms.html #} 
 
{% macro input(name, value, type, size) %} 
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> 
{% endmacro %} 
 
{# shortcuts.html #} 
 
{% macro wrapped_input(name, value, type, size) %} 
    {% import "forms.html" as forms %} 
    <div class="field"> 
        {{ forms.input(name, value, type, size) }} 
    </div> 
{% endmacro %} 
{# forms.html #}

{% macro input(name, value, type, size) %}
  <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
{% endmacro %}

{# shortcuts.html #}

{% macro wrapped_input(name, value, type, size) %}
    {% import "forms.html" as forms %}
    <div class="field">
        {{ forms.input(name, value, type, size) }}
    </div>
{% endmacro %}


filter標簽
就是給整個區塊使用過濾器


{% filter upper %} 
    This text becomes uppercase 
{% endfilter %} 
{% filter upper %}
    This text becomes uppercase
{% endfilter %}
{% filter lower|escape %} 
    <strong>SOME TEXT</strong> 
{% endfilter %} 

摘自 jiaochangyun的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved