腳注 [^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" /}
~~~
- 空白目錄
- php語法結構
- 安裝與更新
- 開啟調試模式及代碼跟蹤器
- 架構
- 源碼分析
- 應用初始化
- 請求流程
- 中間件源碼分析
- 請求處理源碼分析
- Request源碼分析
- 模板編譯流程
- 路由與請求流程
- 容器
- 獲取目錄位置
- 入口文件
- 多應用模式及URL訪問
- 依賴注入與容器
- 容器屬性及方法
- Container
- App
- facade
- 中間件(middleware)
- 系統服務
- extend 擴展類庫
- 筆記
- 配置
- env配置定義及獲取
- 配置文件的配置獲取
- 單應用模式-(配置)文件目錄結構(默認)
- 多應用模式(配置)文件目錄結構(配置文件)
- 配置文件
- 應用配置:app.php
- 緩存配置: cache.php
- 數據庫配置:database.php
- 路由和URL配置:route.php
- Cookie配置:cookie.php
- Session配置:session.php
- 命令行配置:console.php
- 多語言配置:lang.php
- 日志配置:log.php
- 頁面Trace配置:trace.php
- 磁盤配置: filesystem.php
- 中間件配置:middleware.php
- 視圖配置:view.php
- 改成用yaconf配置
- 事件
- 例子:省略事件類的demo
- 例子2:完整事件類
- 例子3:事件訂閱,監聽多個事件
- 解析
- 路由
- 路由定義
- 路由地址
- 變量規則
- MISS路由
- URL生成
- 閉包支持
- 路由參數
- 路由中間件
- 路由分組
- 資源路由
- 注解路由
- 路由綁定
- 域名路由
- 路由緩存
- 跨域路由
- 控制器
- 控制器定義
- 空控制器、空操作
- 空模塊處理
- RESTFul資源控制器
- 控制器中間件
- 請求對象Request(url參數)
- 請求信息
- 獲取輸入變量($_POST、$_GET等)
- 請求類型的獲取與偽裝
- HTTP頭信息
- 偽靜態
- 參數綁定
- 請求緩存
- 響應對象Response
- 響應輸出
- 響應參數
- 重定向
- 文件下載
- 錯誤頁面的處理辦法
- 應用公共文件common.php
- 模型
- 模型定義及常規屬性
- 模型數據獲取與模型賦值
- 查詢
- 數據集
- 增加
- 修改
- 刪除
- 條件
- 查詢范圍scope
- 獲取器
- 修改器
- 搜索器
- 軟刪除
- 模型事件
- 關聯預載入
- 模型關聯
- 一對一關聯
- 一對多關聯
- 多對多關聯
- 自動時間戳
- 事務
- 數據庫
- 查詢構造器
- 查詢合集
- 子查詢
- 聚合查詢
- 時間查詢
- 視圖查詢(比join簡單)
- 獲取查詢參數
- 快捷方法
- 動態查詢
- 條件查詢
- 打印sql語句
- 增
- 刪
- 改
- 查
- 鏈式操作
- 查詢表達式
- 分頁查詢
- 原生查詢
- JSON字段
- 鏈接數據庫配置
- 分布式數據庫
- 查詢事件
- Db獲取器
- 事務操作
- 存儲過程
- Db數據集
- 數據庫驅動
- 視圖
- 模板
- 模板配置
- 模板位置
- 模板渲染
- 模板變量與賦值(assign)
- 模板輸出替換
- url生成
- 模板詳解
- 內置標簽
- 三元運算
- 變量輸出
- 函數輸出
- Request請求參數
- 模板注釋及原樣輸出
- 模板繼承
- 模板布局
- 原生PHP
- 模板引擎
- 視圖過濾
- 視圖驅動
- 驗證
- 驗證進階之最終版
- 錯誤和日志
- 異常處理
- 日志處理
- 調試
- 調試模式
- Trace調試
- SQL調試
- 變量調試
- 遠程調試
- 雜項
- 緩存
- Session
- Cookie
- 多語言
- 上傳
- 擴展說明
- N+1查詢
- TP類庫
- 擴展類庫
- 數據庫遷移工具
- Workerman
- think助手工具庫
- 驗證碼
- Swoole
- request
- app
- Response
- View
- Validate
- Config
- 命令行
- 助手函數
- 升級指導(功能的添加與刪除說明)
- siyucms
- 開始
- 添加頁面流程
- 列表頁加載流程
- 彈出框
- 基礎控制器
- 基礎模型
- 快速構建
- 表單form構建
- 表格table構建
- MakeBuilder
- 前端組件
- 日期組件
- layer 彈層組件
- Moment.js 日期處理插件
- siyucms模板布局
- 函數即其變量
- 前端頁面
- $.operate.方法
- $.modal.方法:彈出層
- $.common.方法:通用方法
- 被cms重寫的表格options
- 自定義模板
- 搜索框
- 自定義form表單
- 獲取表單搜索參數并組裝為url字符串