永久免费观看美女裸体的网站,尤物视频在线观看,亚洲人成网站18禁止人,亚洲欧洲日韩综合色天使,亚洲乱妇亚洲乱妇xinglu

企業(yè)微信服務(wù)商
當前位置:首頁文檔模板語法volt 模板引擎介紹

volt 模板引擎介紹

更新時間:2019-12-10

簡介

Volt 是一個用C編寫的超快的并且對設(shè)計師友好的模板語言。
Volt 提供一組輔助工具有助于你以一種更簡單的的方式編寫頁面模板。五星網(wǎng)站的頁面及模板,都是基于volt模板引擎開發(fā),它是網(wǎng)站頁面模板構(gòu)建的基礎(chǔ),熟練掌握模板引擎的語法結(jié)構(gòu),可以讓你快速地構(gòu)建自己的個性化網(wǎng)站。

基本用法

下面介紹一些基礎(chǔ)用法:

開始與結(jié)束標記

Volt模板在不同的場景使用不同的開始和結(jié)束標記:
{% 和 %} 用于執(zhí)行流程控制語句如if判斷、for循環(huán)及賦值處理等
{{ 和 }} 用于在模板中輸出變量、函數(shù)或表達式的執(zhí)行結(jié)果。
{# 和 #} 用于輸出注釋內(nèi)容

變量(Variables)

變量有三種:字符變量、對象變量、數(shù)組變量
字符變量賦值: {%?set?title?=?'我是標題'?%}
訪問字符變量:{{?title?}}
對象變量賦值: {%?set?product?=?Object?%}
通過foo.bar的形式訪問變量屬性: {{?product.name?}}
?
數(shù)組的幾種形式:
{#?創(chuàng)建簡單數(shù)組?#}
{%?set?array?=?['Apple',?1,?2.5,?false,?null]?%}
{#?創(chuàng)建多維數(shù)組?#}
{%?set?array?=?[[1,?2],?[3,?4],?[5,?6]]?%}
{#?創(chuàng)建關(guān)聯(lián)數(shù)組?#}
{%?set?array?=?['first':?1,?'second':?4/2,?'third':?'3']?%}
通過foo['bar']的形式訪問數(shù)組變量: {{?array[0]?}}? {{?array['first']?}}

過濾器(Filters)

輸出變量的時候可以通過為變量添加過濾器來過濾/格式化變量
操作符 | 用于為變量添加過濾器
{{ product.name|e }}
{{ product.name|striptags }}
{{ product.name|capitalize|trim }}

以下是Volt模板內(nèi)置的過濾器列表:

過濾器 描述
trim 刪除左右兩側(cè)多余的字符
left_trim 刪除左側(cè)多余的字符
right_trim 刪除右側(cè)多余的字符
striptags 刪除變量中的html標記
slashes 在字符串中的單引號(')、雙引號(")、反斜線()與 NUL字符前加上反斜線
stripslashes 去除字符串中的轉(zhuǎn)義反斜線
capitalize 將字符串中每個單詞的首字母轉(zhuǎn)換為大寫
lower 將變量中的字符轉(zhuǎn)換為小寫
upper 將變量中的字符轉(zhuǎn)換為大寫
length 計算字符長度或數(shù)組與對象的數(shù)量
nl2br 在字符串所有新行之前插入 HTML 換行標記
sort 對數(shù)組進行排序并保持索引關(guān)系
keys 返回數(shù)組的所有鍵值
join 將一個數(shù)組分割為字符串
format 把格式化的字符串寫入變量中(sprintf)
json_encode 對變量進行 JSON 編碼
json_decode 對 JSON 格式的字符串進行解碼
abs 取絕對值
url_encode 編碼 URL 字符串
default 為變量設(shè)置一個默認值(如果變量為空或未設(shè)置)
convert_encoding 轉(zhuǎn)換字符編碼
① trim
輸入:
{#?默認不傳參數(shù)為刪除左右兩側(cè)的空格?#}
{%?set?name='?小明?'?%} {{?name|trim?}}
{#?傳參數(shù)則為刪除左右兩側(cè)參數(shù)中的字符串?#}

{%?set?name='aaa小明aaa'?%} {{?name|trim('aaa')?}}

輸出:? 小明 小明

② left_trim

輸入:?{%?set?name='?小明?'?%} {{?name|left_trim?}}
輸出:??小明
?
③ right_trim
?
輸入:{%?set?name='?小明?'?%} {{?name|right_trim?}}? ? ? ?
輸出:?小明

④ striptags

輸入:{%?set?name='小明'?%} {{?name|striptags?}}

輸出:小明

⑤ slashes

輸入:{%?set?name='"小明"'?%} {{?name|slashes?}}

輸出:"小明"

⑥ capitalize

輸入:{%?set?name='my?name'?%} {{?name|capitalize?}}

輸出:My?Name

⑦ lower

輸入: {%?set?name='MY?Name'?%} {{?name|lower?}}

輸出: my?name

⑧ upper

輸入:{%?set?name='my?name?你好'?%} {{?name|upper?}}

輸出:MY?NAME?你好

⑨ length

輸入:
{%?set?data=['小明','小紅','小強']?%} {{?data|length?}}
{%?set?data='小強'?%} {{?data|length?}}
{%?set?data='abcd'?%} {{?data|length?}}

輸出:3 2 4

⑩ nl2br

輸入:{%?set?name='a b c'?%} {{?name|nl2br?}}

輸出:a b c

? sort

輸入:{%?set?data=['a':3,'b':1,'c':2]?%} {%?set?data=data|sort?%} {{?dump(data)?}}

輸出:array(3)?{?["b"]=>?int(1)?["c"]=>?int(2)?["a"]=>?int(3)?}

? keys

輸入:{%?set?data=['a':3,'b':1,'c':2]?%} {%?set?data=data|keys?%} {{?dump(data)?}}

輸出:array(3)?{?[0]=>?string(1)?"a"?[1]=>?string(1)?"b"?[2]=>?string(1)?"c"?}

? join

輸入:{%?set?data=['a':3,'b':1,'c':2]?%} {{?data|join(",")?}}

輸出:3,1,2

? format

輸入:{%?set?myname='xiaoming'?%} {{?"My?real?name?is?%s"|format(myname)?}}

輸出:My?real?name?is?xiaoming

? json_encode

用法示例:{%?set?encoded?=?data|json_encode?%}

? json_decode

用法示例:{%?set?decoded?=?'{"one":1,"two":2,"three":3}'|json_decode?%}

? abs

用法示例:

輸入:{%?set?a?=?2?%} {{?a|abs?}} {%?set?a?=?-3?%} {{?a|abs?}}

輸出:2 3

? url_encode

用法示例:

輸入:{%?set?url?=?'http://www.baidu.com'?%} {{?url|url_encode?}}

輸出:http%3A%2F%2Fwww.baidu.com

? default

用法示例:

輸入:{%?set?name?=?'小紅'?%} {{?name|default('小明')?}} {%?set?name?=?''?%} {{?name|default('小明')?}}

輸出:小紅 小明

? convert_encoding

用法示例: {#?從EUC-JP編碼轉(zhuǎn)換為UTF-7?#} {{?"abasds"|convert_encoding("UTF-7",?"EUC-JP")?}}

注釋(Comments)

在{# 和 #} 之間的內(nèi)容在輸出的時候?qū)⒈缓雎?,只作為注釋?nèi)容在源碼中展示

在源碼中輸入以下內(nèi)容:

輸入: {#?這里是注釋?#}abcd

輸出:abcd

流程控制

① 循環(huán)語句for
?
輸入:
{%?set?data?=?['one':?1,?'two':?2,?'three':?3]?%}
{%?for?value?in?data?%} ????
Value:?{{?value?}} ??
{%?endfor?%}
?
輸出:
Value:1
Value:2
Value:3
?
輸入:
{%?for?name,?value?in?data?%} ???
?Name:?{{?name?}}?
Value:?{{?value?}}
{%?endfor?%}
?
輸出:
Name:?one?Value:1
Name:?two?Value:2
Name:?three?Value:3
?
② for循環(huán)與if語句連用:
{%?for?name,value?in?data?if?value?
Value:?{{?value?}}

{%?endfor?%}

輸出:??Value:1? ?Value:2

③ for循環(huán)與else/elsefor連用(當data中的元素個數(shù)為0時,else/elsefor語句將被執(zhí)行)

用法示例:

{%?set?data?=?[]?%}

{%?for?name,value?in?data?%} ??Value:?{{?value?}} {%?else?%} 暫無內(nèi)容 {%?endfor?%}

{%?for?name,value?in?data?%} ??Value:?{{?value?}} {%?elsefor?%}暫無內(nèi)容 {%?endfor?%}

④ break

break語句用于跳出循環(huán)

用法示例:

輸入:
{%?set?data?=?['one':?1,?'two':?2,?'three':?3]?%} {%?for?name,value?in?data?%} ??{%?if?name?==?'two'?%} ????{%?break?%} ??{%?endif?%} ??{{?value?}} {%?endfor?%}

輸出:?1

條件判斷語句if

① if...else

{#?判斷data變量是否為非空?#}

{%?if?data?is?not?empty?%} ?????...????? {%?else?%}
{%?break?%}
{%?endif?%}

② if

{#?判斷index的值是否等于7?#} {%?if?index?is?7?%} ????{%?break?%} {%?endif?%}

循環(huán)上下文(Loop Context)

循環(huán)上下文關(guān)鍵字 loop 在for循環(huán)中可用,使用它,你可以方便的進行一些判斷和計數(shù)操作。 我們可以把它看做是一個循環(huán)計數(shù)器,用它來記錄元素在當前循環(huán)中的位置。 loop中主要包含以下可用屬性:

變量 描述
loop.index 當前元素在從1開始計數(shù)的循環(huán)計數(shù)器中的位置
loop.index0 當前元素在從0開始計數(shù)的循環(huán)計數(shù)器中的位置
loop.revindex 當前元素在逆向從1開始計數(shù)的循環(huán)計數(shù)器中的位置
loop.revindex0 當前元素在逆向從0開始計數(shù)的循環(huán)計數(shù)器中的位置
loop.first 是否是循環(huán)中的第一個元素
loop.last 是否是循環(huán)中的最后一個元素
loop.length 循環(huán)中的元素個數(shù)

用法示例:

① loop.index
輸入:
{%?set??data=?['a','b','c']?%} {%?for?value?in?data?%} ????{{?loop.index?}}? {%?endfor?%} {%?for?value?in?data?%} ????{{?loop.index0?}}? {%?endfor?%} {%?for?value?in?data?%} ????{{?loop.revindex?}}? {%?endfor?%} {%?for?value?in?data?%} ????{{?loop.revindex0?}}? {%?endfor?%}

輸出

1?2?3
0?1?2
3?2?1
2?1?0?

{%?set?data?=?[['id':0,'name':'a'],['id':1,'name':'b'],['id':2,'name':'c']]?%}
{%?for?value?in?data?%}
??{%?if?loop.first?%}
???#IdName?
{%?endif?%} ?{{?loop.index?}}?????
?{{?value['id']?}}???
?{{?value['name']?}}???
{%?if?loop.last?%} {%?endif?%} {%?endfor?%}

表達式(Expressions)

① volt模板引擎提供表達式支持,包括文字和常見操作符

輸入:? {{?(1?+?1)?*?2?}}

輸出:4

② 如果表達式結(jié)果無需輸出顯示,則可以在前面加上do操作符

輸入:{%?do?(1?+?1)?*?2?%}

輸出:此時只會執(zhí)行表達式,不會有任何輸出

運算符

運算符主要包括算術(shù)運算符、比較運算符、邏輯運算符合其它運算符

算術(shù)運算符

操作符 作用 示例
+ 加法操作 {{ a+b }}
- 減法操作 {{ a-b }}
* 乘法操作 {{ a*b }}
/ 除法操作 {{ a/b }}
% 取余操作 {{ a%b }}

比較運算符

操作符 作用
== 等于(元素值相同)
!= 不等于
<> 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
=== 全等于(元素值和類型都相同)
!== 不全等于(元素值和類型至少有一樣不同)

邏輯運算符

操作符 作用
or
and
not
(expr) 表達式

其它運算符

操作符 作用
~ 連接兩個操作數(shù)
| 為最左側(cè)變量增加過濾器
.. 創(chuàng)建一個包含指定范圍單元的數(shù)組
is 等于
in 檢查表達式是否包含在其他表達式中
is not 不等于
a ? b : c 三目運算
++ 自增
-- 自減
① ~
用法示例:

{#?連接兩個字符串并去除最右側(cè)的?'-'?字符??#} {%?set?prop?=?''?%} {%?set?property?=?['a','b','c']?%} {%?for?item?in?property?%} ????{%?set?prop?=?prop~item['val']~'-'?%} {%?endfor?%} {{?prop|right_trim('-')?}} {#?輸出:a-b-c??#}
② . .
用法示例:

{#?創(chuàng)建一個包含指定范圍單元的數(shù)組?#}
{%?for?index?in?0..2?%} ????{{?index?}} {%?endfor?%} {#?輸出:0?1?2??#}

③ a?b:c
用法示例:

{#?三目運算:a為真則執(zhí)行b否則執(zhí)行c?#} {%?set?a=true?%} {{?a???'true?'?:?'false?'?}} {%?set?a='2'?%} {{?a???'true?'?:?'false?'?}} {%?set?a=''?%} {{?a???'true?'?:?'false?'?}} {#?輸出:true?true?false?#}

函數(shù)

方法名 作用
content 將在此之前輸出的內(nèi)容包含進來
get_content content方法的別名
partial 在當前模板中動態(tài)調(diào)取一個代碼片段
super 獲?。ㄤ秩荆└改0逯械膬?nèi)容
time 返回當前的 Unix 時間戳
date 格式化輸出一個本地時間/日期
dump 輸出一個或多個表達式的結(jié)構(gòu)信息,包括表達式的類型與值。數(shù)組將遞歸展開值,通過縮進顯示其結(jié)構(gòu)。

① super

用法示例:

??{#?main.volt?#} ?? ????Title??
{%?block?content?%}Table?of?contents{%?endblock?%} ???{#?layout.volt?#} ??{%?extends?"main.volt"?%} ??{%?block?content?%} ??????{{?super()?}} ??????contents?2??
{%?endblock?%}

渲染后輸出:? Title???Table?of?contents????contents?2

time

② time

用法示例: {%?set?now?=?time()?%}

③ date

用法示例: {{?date('Y年m月d日?H:i:s',1496222729)?}} {#?輸出:2017年5月31日?17:25:29?#}

dump

④ dump

用法示例:
{%?set?data?=?['one':?1,?'two':?2,?'three':?3]?%} {{?dump(data)?}} {#?輸出:array(3)?{?["one"]=>?int(1)?["two"]=>?int(2)?["three"]=>?int(3)?}?#}

校驗方法

方法名 作用
defined 檢查變量是否被定義
empty 檢查變量是否為空(未定義、空字符串、空數(shù)組、0、null、false等均認為為空)
even 檢查變量值是否是偶數(shù)
odd 檢查變量值是否是奇數(shù)
numeric 檢查變量值是否是數(shù)字
scalar 檢測變量是否是一個標量(標量變量是指那些包含了 integer、float、string 或 boolean的變量,而 array、object 和 resource 則不是標量。)
iterable 檢查變量值是否可被迭代生成
divisibleby 檢查變量值是否可被整除
sameas 檢查變量值是否相同
type 檢查變量值是否是給定類型

① defined

用法示例:

{%?if?name?is?defined?%}
????The?name?variable?is?defined
{%?endif?%}

?

② empty

用法示例:
{%?if?name?is?empty?%} ????The?name?is?null?or?isn't?defined {%?endif?%}

③ even

用法示例:

{%?for?key,?name?in?['Voltron',?'Astroy?Boy',?'Bender']?%} ????{%?if?key?is?even?%} ????????{{?name?}} ????{%?endif?%} {%?endfor?%}

④ odd

用法示例:

{%?for?key,?name?in?['Voltron',?'Astroy?Boy',?'Bender']?%} ????{%?if?key?is?odd?%} ????????{{?name?}} ????{%?endif?%} {%?endfor?%}

⑤ numeric

用法示例:
{%?for?key,?name?in?['Voltron',?'Astroy?Boy',?'third':?'Bender']?%} ????{%?if?key?is?numeric?%} ????????{{?name?}} ????{%?endif?%} {%?endfor?%}

⑥ scalar

用法示例: 
輸入:

{%?set?data?=?'a'?%} {%?if?data?is?scalar?%} ????{{?'True'?}} {%?endif?%} {%?set?data?=?['a','b']?%} {%?if?data?is?not?scalar?%} ????{{?'True'?}} {%?endif?%}

輸出:True True

?

⑦ iterable

用法示例:

{%?set?data?=?[1:?'Voltron',?2:?'Astroy?Boy']?%} {%?if?data?is?iterable?%} ????{%?for?value?in?data?%} ????????{{?value?}} ????{%?endfor?%} {%?endif?%}

?

⑧ divisibleby

用法示例:

{%?set?data?=?10?%} {%?if?data?is?divisibleby(5)?%} ???10?can?divisible?by?5 {%?endif?%}

?

⑨ sameas

用法示例:
{%?set?world?=?"hello"?%} {%?if?world?is?sameas("hello")?%} ????{{?"it's?hello"?}} {%?endif?%}

⑩ type

用法示例:

{%?set?external?=?false?%} {%?if?external?is?type('boolean')?%} ????{{?"external?is?false?or?true"?}} {%?endif?%}

五星網(wǎng)站內(nèi)置對象用法

UTCDateTime

五星網(wǎng)站中所有的時間類型字段存儲格式均為UTCDateTime對象類型

UTCDateTime對象主要包含以下幾個方法:

toDateTime

用法示例:


{{?value['addtime'].toDateTime().format('Y-m-d?H:i:s')?}}

?