<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                腳注 [^RUNOOB]。 [^RUNOOB]: 跳至頂部 **內置標簽包括:** | 標簽名 | 作用 | 包含屬性 | 標簽分類| | --- | --- | --- | --- | | [include](#include) | 包含外部模板文件(閉合) | file | | [load ](#load)| 導入資源文件(閉合 包括js css import別名) | file,href,type,value,basepath | | [volist](#volist)| 循環數組數據輸出 | name,id,offset,length,key,mod |循環輸出| | [foreach ](#foreach)| 數組或對象遍歷輸出 | name,item,key |循環輸出| | [for](#for)| For循環數據輸出 | name,from,to,before,step |循環輸出| | [switch](#switch)| 分支判斷輸出 | name |條件判斷| | case| 分支判斷輸出(必須和switch配套使用) | value,break | | default | 默認情況輸出(閉合 必須和switch配套使用) | 無 | | [range](#range) | 范圍判斷輸出(包括in notin between notbetween別名) | name,value,type |條件判斷| | [present](#present) | 判斷是否賦值 | name |條件判斷| | [notpresent](#notpresent) | 判斷是否尚未賦值 | name |條件判斷| | [empty](#empty) | 判斷數據是否為空 | name |條件判斷| | [notempty](#notempty) | 判斷數據是否不為空 | name |條件判斷| | [defined](#defined) | 判斷常量是否定義 | name |條件判斷| | [notdefined](#notdefined) | 判斷常量是否未定義 | name | | [define](#define) | 常量定義(閉合) | name,value |定義標簽| | [assign](#assign) | 變量賦值(閉合) | name,value |定義標簽| |[if](#if)|條件判斷輸出|condition|件判斷| | elseif | 條件判斷輸出(閉合 必須和if標簽配套使用) | condition | | else | 條件不成立輸出(閉合 可用于其他標簽) | 無 | | [php](#php) | 使用php代碼 | 無 | | [compare](#compare) | 比較輸出:eq或者 equal(等于)、neq 或者notequal(不等于)、gt(大于)、egt(大于等于)、lt(小于)、elt(小于等于)、heq(恒等于)、nheq(不恒等于) | name,value,type |比較標簽| 模板引擎支持標簽的多層嵌套功能,可以對標簽庫的標簽指定可以嵌套。 系統內置的標簽中,volist、switch、if、elseif、else、foreach、compare(包括所有的比較標簽)、(not)present、(not)empty、(not)defined等標簽都可以嵌套使用。例如: ~~~ {volist name="list" id="vo"} {volist name="vo['sub']" id="sub"} {$sub.name} {/volist} {/volist} ~~~ # **循環輸出標簽** ## <span id="volist">**VOLIST標簽**</span> volist標簽通常用于查詢數據集(select方法)的結果輸出,通常模型的select方法返回的結果是一個二維數組,可以直接使用volist標簽進行輸出。 在控制器中首先對模版賦值: ~~~ $list = User::all(); $this->assign('list',$list); ~~~ 在模版定義如下,循環輸出用戶的編號和姓名: ~~~ {volist name="list" id="vo"} {$vo.id}:{$vo.name}<br/> {/volist} ~~~ Volist標簽的name屬性表示模板賦值的變量名稱,因此不可隨意在模板文件中改變。id表示當前的循環變量,可以隨意指定,但確保不要和name屬性沖突,例如: ~~~ {volist name="list" id="data"} {$data.id}:{$data.name}<br/> {/volist} ~~~ 支持輸出查詢結果中的部分數據,例如輸出其中的第5~15條記錄 ~~~ {volist name="list" id="vo" offset="5" length='10'} {$vo.name} {/volist} ~~~ 輸出偶數記錄 ~~~ {volist name="list" id="vo" mod="2" } {eq name="mod" value="1"}{$vo.name}{/eq} {/volist} ~~~ Mod屬性還用于控制一定記錄的換行,例如: ~~~ {volist name="list" id="vo" mod="5" } {$vo.name} {eq name="mod" value="4"}<br/>{/eq} {/volist} ~~~ 為空的時候輸出提示: ~~~ {volist name="list" id="vo" empty="暫時沒有數據" } {$vo.id}|{$vo.name} {/volist} ~~~ empty屬性不支持直接傳入html語法,但可以支持變量輸出,例如: ~~~ $this->assign('empty','<span class="empty">沒有數據</span>'); $this->assign('list',$list); ~~~ 然后在模板中使用: ~~~ {volist name="list" id="vo" empty="$empty" } {$vo.id}|{$vo.name} {/volist} ~~~ 輸出循環變量: ~~~ {volist name="list" id="vo" key="k" } {$k}.{$vo.name} {/volist} ~~~ 如果沒有指定key屬性的話,默認使用循環變量i,例如: ~~~ {volist name="list" id="vo" } {$i}.{$vo.name} {/volist} ~~~ 如果要輸出數組的索引,可以直接使用key變量,和循環變量不同的是,這個key是由數據本身決定,而不是循環控制的,例如: ~~~ {volist name="list" id="vo" } {$key}.{$vo.name} {/volist} ~~~ 模板中可以直接使用函數設定數據集,而不需要在控制器中給模板變量賦值傳入數據集變量,如: ~~~ {volist name=":fun('arg')" id="vo"} {$vo.name} {/volist} ~~~ ## <span id="foreach">**FOREACH標簽**</span> foreach標簽類似與volist標簽,只是更加簡單,沒有太多額外的屬性,最簡單的用法是: ~~~ {foreach $list as $vo} {$vo.id}:{$vo.name} {/foreach} ~~~ 該用法解析后是最簡潔的。 也可以使用下面的用法: ~~~ {foreach name="list" item="vo"} {$vo.id}:{$vo.name} {/foreach} ~~~ name表示數據源 item表示循環變量。 可以輸出索引,如下: ~~~ {foreach name="list" item="vo" } {$key}|{$vo} {/foreach} ~~~ 也可以定義索引的變量名 ~~~ {foreach name="list" item="vo" key="k" } {$k}|{$vo} {/foreach} ~~~ ## <span id="for"> **FOR標簽**</span> 用法: ~~~ {for start="開始值" end="結束值" comparison="" step="步進值" name="循環變量名" } {/for} ~~~ 開始值、結束值、步進值和循環變量都可以支持變量,開始值和結束值是必須,其他是可選。comparison 的默認值是lt,name的默認值是i,步進值的默認值是1,舉例如下: ~~~ {for start="1" end="100"} {$i} {/for} ~~~ 解析后的代碼是 ~~~ for ($i=1;$i<100;$i+=1){ echo $i; } ~~~ # **比較標簽** ## <span id="compare">**compareb標簽**</span> >[info]比較標簽用于簡單的變量比較,復雜的判斷條件可以用if標簽替換,比較標簽是一組標簽的集合,基本上用法都一致, 所有的比較標簽可以統一使用compare標簽(其實所有的比較標簽都是compare標簽的別名) 例如: 當name變量的值等于5就輸出 ~~~ {compare name="name" value="5" type="eq"}value{/compare} ~~~ 等效于 ~~~ {eq name="name" value="5" }value{/eq} ~~~ 其中type屬性的值就是上面列出的比較標簽名稱 compare標簽的別名 基本上用法都一致 如下: ~~~ {比較標簽 name="變量" value="值"} 內容 {/比較標簽} ~~~ 系統支持的比較標簽以及所表示的含義分別是: | 標簽 | 含義 | | --- | --- | | eq或者 equal | 等于 | | neq 或者notequal | 不等于 | | gt | 大于 | | egt | 大于等于 | | lt | 小于 | | elt | 小于等于 | | heq | 恒等于 | | nheq | 不恒等于 | 他們的用法基本是一致的,區別在于判斷的條件不同,并且所有的比較標簽都可以和else標簽一起使用。 例如,要求name變量的值等于value就輸出,可以使用: ~~~ {eq name="name" value="value"}value{/eq} ~~~ 或者 ~~~ {equal name="name" value="value"}value{/equal} ~~~ 也可以支持和else標簽混合使用: ~~~ {eq name="name" value="value"} 相等 {else/} 不相等 {/eq} ~~~ 當 name變量的值大于5就輸出 ~~~ {gt name="name" value="5"}value{/gt} ~~~ 當name變量的值不小于5就輸出 ~~~ {egt name="name" value="5"}value{/egt} ~~~ 比較標簽中的變量可以支持對象的屬性或者數組,甚至可以是系統變量,例如: 當vo對象的屬性(或者數組,或者自動判斷)等于5就輸出 ~~~ {eq name="vo.name" value="5"} {$vo.name} {/eq} ~~~ 當vo對象的屬性等于5就輸出 ~~~ {eq name="vo:name" value="5"} {$vo.name} {/eq} ~~~ 當$vo\['name'\]等于5就輸出 ~~~ {eq name="vo['name']" value="5"} {$vo.name} {/eq} ~~~ 而且還可以支持對變量使用函數 當vo對象的屬性值的字符串長度等于5就輸出 ~~~ {eq name="vo:name|strlen" value="5"}{$vo.name}{/eq} ~~~ 變量名可以支持系統變量的方式,例如: ~~~ {eq name="Think.get.name" value="value"}相等{else/}不相等{/eq} ~~~ 通常比較標簽的值是一個字符串或者數字,如果需要使用變量,只需要在前面添加“$”標志: 當vo對象的屬性等于$a就輸出 ~~~ {eq name="vo:name" value="$a"}{$vo.name}{/eq} ~~~ # **條件判斷** ## <span id="switch">**SWITCH標簽**</span> 用法: ~~~ {switch name="變量" } {case value="值1" break="0或1"}輸出內容1{/case} {case value="值2"}輸出內容2{/case} {default /}默認情況 {/switch} ~~~ 使用方法如下: ~~~ {switch name="User.level"} {case value="1"}value1{/case} {case value="2"}value2{/case} {default /}default {/switch} ~~~ 其中name屬性可以使用函數以及系統變量,例如: ~~~ {switch name="Think.get.userId|abs"} {case value="1"}admin{/case} {default /}default {/switch} ~~~ 對于case的value屬性可以支持多個條件的判斷,使用”|”進行分割,例如: ~~~ {switch name="Think.get.type"} {case value="gif|png|jpg"}圖像格式{/case} {default /}其他格式 {/switch} ~~~ 表示如果$\_GET\["type"\] 是gif、png或者jpg的話,就判斷為圖像格式。 Case標簽還有一個break屬性,表示是否需要break,默認是會自動添加break,如果不要break,可以使用: ~~~ {switch name="Think.get.userId|abs"} {case value="1" break="0"}admin{/case} {case value="2"}admin{/case} {default /}default {/switch} ~~~ 也可以對case的value屬性使用變量,例如: ~~~ {switch name="User.userId"} {case value="$adminId"}admin{/case} {case value="$memberId"}member{/case} {default /}default {/switch} ~~~ > 使用變量方式的情況下,不再支持多個條件的同時判斷。 簡潔的用法 ~~~ {switch $User.userId} {case $adminId}admin{/case} {case $memberId}member{/case} {/switch} ~~~ ## <span id="if">**IF標簽**</span> 用法示例: ~~~ {if condition="($name == 1) OR ($name > 100) "} value1 {elseif condition="$name eq 2"/}value2 {else /} value3 {/if} ~~~ 除此之外,我們可以在condition屬性里面使用php代碼,例如: ~~~ {if condition="strtoupper($user['name']) neq 'THINKPHP'"}ThinkPHP {else /} other Framework {/if} ~~~ condition屬性可以支持點語法和對象語法,例如: 自動判斷user變量是數組還是對象 ~~~ {if condition="$user.name neq 'ThinkPHP'"}ThinkPHP {else /} other Framework {/if} ~~~ 或者知道user變量是對象 ~~~ {if condition="$user:name neq 'ThinkPHP'"}ThinkPHP {else /} other Framework {/if} ~~~ 由于if標簽的condition屬性里面基本上使用的是php語法,盡可能使用**判斷標簽和Switch標簽**會更加簡潔,原則上來說,能夠用switch和比較標簽解決的盡量不用if標簽完成。因為switch和比較標簽可以使用變量調節器和系統變量。如果某些特殊的要求下面,IF標簽仍然無法滿足要求的話,可以使用原生php代碼或者PHP標簽來直接書寫代碼。 簡潔的用法 ~~~ {if condition="表達式"} {if (表達式)} {if 表達式} ~~~ 這三種寫法結果是一樣的 判斷集合是否為空 ``` {if condition="empty($list) neq true" /} 集合不為空 {else /} 集合為空 {/if} ``` ## <span id="present">**PRESENT 標簽**</span> present標簽用于判斷某個變量是否已經定義,用法: ~~~ {present name="name"} name已經賦值 {/present} ~~~ ## <span id="notpresent">**NOTPRESENT 標簽**</span> 如果判斷沒有賦值,可以使用: ~~~ {notpresent name="name"} name還沒有賦值 {/notpresent} ~~~ 可以把上面兩個標簽合并成為: ~~~ {present name="name"} name已經賦值 {else /} name還沒有賦值 {/present} ~~~ present標簽的name屬性可以直接使用系統變量,例如: ~~~ {present name="Think.get.name"} $_GET['name']已經賦值 {/present} ~~~ ## <span id="empty">**EMPTY 標簽**</span> empty標簽用于判斷某個變量是否為空,用法: ~~~ {empty name="name"} name為空值 {/empty} ~~~ ## <span id="notempty">**NOTEMPTY 標簽**</span> 如果判斷沒有賦值,可以使用: ~~~ {notempty name="name"} name不為空 {/notempty} ~~~ 可以把上面兩個標簽合并成為: ~~~ {empty name="name"} name為空 {else /} name不為空 {/empty} ~~~ name屬性可以直接使用系統變量,例如: ~~~ {empty name="Think.get.name"} $_GET['name']為空值 {/empty} ~~~ ## <span id="defined">**DEFINED 標簽**</span> DEFINED標簽用于判斷某個常量是否有定義,用法如下: ~~~ {defined name="NAME"} NAME常量已經定義 {/defined} ~~~ > name屬性的值要注意嚴格大小寫 如果判斷沒有被定義,可以使用: ~~~ {notdefined name="NAME"} NAME常量未定義 {/notdefined} ~~~ 可以把上面兩個標簽合并成為: ~~~ {defined name="NAME"} NAME常量已經定義 {else /} NAME常量未定義 {/defined} ~~~ ## 范圍判斷 ## <span id="range">**RANGE標簽**</span> 范圍判斷標簽包括in notin between notbetween四個標簽,都用于判斷變量是否中某個范圍。 也可以直接使用range標簽,替換in notin between notbetween四個標簽 用法: ~~~ {range name="id" value="1,2,3" type="in"} 輸出內容1 {/range} ~~~ 其中type屬性的值可以用in/notin/between/notbetween,其它屬性的用法和IN或者BETWEEN一致。 ## IN和NOTIN 用法: 假設我們中控制器中給id賦值為1: ~~~ $id = 1; $this->assign('id',$id); ~~~ 我們可以使用in標簽來判斷模板變量是否在某個范圍內,例如: ~~~ {in name="id" value="1,2,3"} id在范圍內 {/in} ~~~ 最后會輸出:`id在范圍內`。 如果判斷不在某個范圍內,可以使用notin標簽: ~~~ {notin name="id" value="1,2,3"} id不在范圍內 {/notin} ~~~ 最后會輸出:`id不在范圍內`。 可以把上面兩個標簽合并成為: ~~~ {in name="id" value="1,2,3"} id在范圍內 {else/} id不在范圍內 {/in} ~~~ name屬性還可以支持直接判斷系統變量,例如: ~~~ {in name="Think.get.id" value="1,2,3"} $_GET['id'] 在范圍內 {/in} ~~~ > 更多的系統變量用法可以參考[系統變量](http://www.hmoore.net/manual/thinkphp5/125004)部分。 value屬性也可以使用變量,例如: ~~~ {in name="id" value="$range"} id在范圍內 {/in} ~~~ $range變量可以是數組,也可以是以逗號分隔的字符串。 value屬性還可以使用系統變量,例如: ~~~ {in name="id" value="$Think.post.ids"} id在范圍內 {/in} ~~~ ## BETWEEN 和 NOTBETWEEN 可以使用between標簽來判斷變量是否在某個區間范圍內,可以使用: ~~~ {between name="id" value="1,10"} 輸出內容1 {/between} ~~~ 同樣,也可以使用notbetween標簽來判斷變量不在某個范圍內: ~~~ {notbetween name="id" value="1,10"} 輸出內容2 {/notbetween} ~~~ 也可以使用else標簽把兩個用法合并,例如: ~~~ {between name="id" value="1,10"} 輸出內容1 {else/} 輸出內容2 {/between} ~~~ 當使用between標簽的時候,value只需要一個區間范圍,也就是只支持兩個值,后面的值無效,例如 ~~~ {between name="id" value="1,3,10"} 輸出內容1 {/between} ~~~ 實際判斷的范圍區間是`1~3`,而不是`1~10`,也可以支持字符串判斷,例如: ~~~ {between name="id" value="A,Z"} 輸出內容1 {/between} ~~~ name屬性可以直接使用系統變量,例如: ~~~ {between name="Think.post.id" value="1,5"} 輸出內容1 {/between} ~~~ value屬性也可以使用變量,例如: ~~~ {between name="id" value="$range"} 輸出內容1 {/between} ~~~ 變量的值可以是字符串或者數組,還可以支持系統變量。 ~~~ {between name="id" value="$Think.get.range"} 輸出內容1 {/between} ~~~ # **資源文件加載** ## <span id="load">**load 標簽**</span> 傳統方式的導入外部`JS`和`CSS`文件的方法是直接在模板文件使用: ~~~ <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> ~~~ 系統提供了專門的標簽來簡化上面的導入: ~~~ {load href="/static/js/common.js" /} {load href="/static/css/style.css" /} ~~~ 并且支持同時加載多個資源文件,例如: ~~~ {load href="/static/js/common.js,/static/css/style.css" /} ~~~ 系統還提供了兩個標簽別名`js`和`css`用法和`load`一致,例如: ~~~ {js href="/static/js/common.js" /} {css href="/static/css/style.css" /} ~~~ ## <span id="include">**include 標簽**</span> 用于在模版中加載其他的模板 模版表達式的定義規則為:**模塊@控制器/操作** >[danger]包含的模板文件中不能再使用模板布局或者模板繼承。 ~~~ {include file="public/header" /} ~~~ 可以一次包含多個模版,例如: ~~~ {include file="public/header,public/menu" /} ~~~ 可以直接包含一個模版文件名(包含完整路徑),例如: ~~~ {include file="../application/view/default/public/header.html" /} ~~~ ## 傳入參數 無論你使用什么方式包含外部模板,Include標簽支持在包含文件的同時傳入參數,例如,下面的例子我們在包含header模板的時候傳入了`title`和`keywords`參數: ~~~ {include file="Public/header" title="$title" keywords="開源WEB開發框架" /} ~~~ 就可以在包含的header.html文件里面使用title和keywords變量,如下: ~~~ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>[title]</title> <meta name="keywords" content="[keywords]" /> </head> ~~~ 上面title參數傳入的是個變量$title,模板內的\[title\]最終會替換成$title的值,當然$title這個變量必須要存在。 **包含文件中可以再使用include標簽包含別的文件,但注意不要形成A包含A,或者A包含B而B又包含A這樣的死循環。** > 注意:由于模板解析的特點,從入口模板開始解析,如果外部模板有所更改,模板引擎并不會重新編譯模板,除非在調試模式下或者緩存已經過期。如果部署模式下修改了包含的外部模板文件后,需要把模塊的緩存目錄清空,否則無法生效。 # **原生PHP** Php代碼可以和標簽在模板文件中混合使用,可以在模板文件里面書寫任意的PHP語句代碼 ,包括下面兩種方式: ## <span id="php">**php 標簽**</span> 例如: ~~~ {php}echo 'Hello,world!';{/php} ~~~ 我們建議需要使用PHP代碼的時候盡量采用php標簽,因為原生的PHP語法可能會被配置禁用而導致解析錯誤。 ## 使用原生php代碼 ~~~ <?php echo 'Hello,world!'; ?> ~~~ 注意:php標簽或者php代碼里面就不能再使用標簽(包括普通標簽和XML標簽)了,因此下面的幾種方式都是無效的: ~~~ {php}{eq name='name'value='value'}value{/eq}{/php} ~~~ Php標簽里面使用了`eq`標簽,因此無效 ~~~ {php}if( {$user} != 'ThinkPHP' ) echo 'ThinkPHP' ;{/php} ~~~ Php標簽里面使用了`{$user}`普通標簽輸出變量 ,因此無效。 ~~~ {php}if( $user.name != 'ThinkPHP' ) echo 'ThinkPHP' ;{/php} ~~~ Php標簽里面使用了`$user.name`點語法變量輸出 ,因此無效。 > 簡而言之,在PHP標簽里面不能再使用PHP本身不支持的代碼。 如果設置了`tpl_deny_php`參數為true,就不能在模板中使用原生的PHP代碼,但是仍然支持PHP標簽輸出。 # **定義標簽** ## <span id="assign">**ASSIGN標簽**</span> ASSIGN標簽用于在模板文件中定義變量,用法如下: ~~~ {assign name="var" value="123" /} ~~~ 在運行模板的時候,賦值了一個`var`的變量,值是`123`。 value屬性也支持變量,例如: ~~~ {assign name="var" value="$val" /} ~~~ 或者直接把系統變量賦值給var變量,例如: ~~~ {assign name="var" value="$Think.get.name" /} ~~~ 相當于,執行了:`$var = $_GET['name'];` ## <span id="define">**DEFINE標簽**</span> DEFINE標簽用于中模板中定義常量,用法如下: ~~~ {define name="MY_DEFINE_NAME" value="3" /} ~~~ 在運行模板的時候,就會定義一個`MY_DEFINE_NAME`的常量。 value屬性可以支持變量(包括系統變量),例如: ~~~ {define name="MY_DEFINE_NAME" value="$name" /} ~~~ 或者 ~~~ {define name="MY_DEFINE_NAME" value="$Think.get.name" /} ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看