為了方便大家在模板里面快速的調用數據庫內容,HisiPHP基于TP自帶的標簽庫擴展功能,為大家集成了通用標簽庫(循環標簽)功能。下面將具體說明通用標簽的使用。
## 什么是標簽
標簽存在的意義就是將復雜的原始PHP數據調用語句封裝為簡單易懂的格式化標簽,便于歸納整理及團隊協作。比如,讓前端工程師直接完成數據的調用而無需知道其內部的構造及原理。
## 循環標簽庫
循環標簽通常用于對數組或對象的循環輸出,一般在模板中以「列表」的形式體現。基本格式如下:
~~~
<ul>
{hisi:loop data="[['name' => '張三'], ['name' => '李四']]"}
<li>{$r['name']}</li>
{/hisi:loop}
</ul>
~~~
## 循環標簽屬性詳解
| 參數 | 說明 | 默認值 | 描述 |
| --- | --- |--- | --- |
| model | 模型名稱 | 無 | 示例值:Article,跨模塊示例值:Cms/Article |
| with | 關聯預載入 | 無 | 傳入model時有效。示例值:category |
| table | 表名 | 無 | 數據庫表名,無需攜帶表前綴,示例值:article |
| where | 表查詢條件 | 無 | 傳入model或table時有效。注意:如查詢條件為拼裝字符串需用單引號引起來,字符串帶變量查詢示例:'cid = '.$cid.' and status > 0',數組帶查詢示例:['cid' => $cid, 'status' => ['gt', 0]] |
| field | 返回的字段 | 無 | 傳入model或table時有效。示例值:id,name |
| group | 查詢分組 | 無 | 傳入model或table時有效。示例值:cid |
| order | 返回結果排序 | 無 | 傳入model或table時有效。示例值:id desc |
| limit | 限制返回結果數量 | 20 | 只能填寫正整數 |
| page | 分頁頁碼 | 1 | 只能填寫正整數 |
| sql | 原生sql語句 | 無 | 示例值:select * form article |
| data | 循環輸出的數組 | 無 | 可直接傳數組或變量。變量示例:$data,數組示例:[['name' => '張三'], ['name' => '李四']] |
| cache | 緩存 | false | 傳入model或table時有效。可傳bool值[true, false]或數字,傳入數字表示緩存多少秒 |
| id | 當前的循環變量 | r | 示例值:vo |
| key | 循環計數變量 | i | 示例值:k |
| empty |為空的時候輸出提示 | 無 | 示例:<div class='empty'>暫無相關數據</div> |
## model屬性示例代碼
~~~
<ul>
{hisi:loop model="cms/Article" with="category" id="vo" field="id,name" order="id desc" limit="20" page="input('param.page', 1)"}
<li>[{$vo['category']['name']}]<a href="/show/{$vo['id']}.html">{$vo['name']}</a></li>
{/hisi:loop}
</ul>
~~~
>[info] 上面的代碼用到了with關聯預查詢,在結果里面直接引用即可
## table屬性示例代碼
~~~
<ul>
{hisi:loop table="Article" id="vo" field="id,name" order="id desc" limit="20" page="input('param.page', 1)"}
<li><a href="/show/{$vo['id']}.html">{$vo['name']}</a></li>
{/hisi:loop}
</ul>
~~~
## data屬性示例代碼
~~~
<ul>
{hisi:loop data="[['id' => 1, 'name' => '張三'], ['id' => 2, 'name' => '李四']]" id="vo"}
<li><a href="/show/{$vo['id']}.html">{$vo['name']}</a></li>
{/hisi:loop}
</ul>
~~~
## 標簽嵌套示例代碼
~~~
<ul>
{hisi:loop data="[['id' => 1, 'name' => '張三', 'childs' => [['id' => 1, 'name' => '張三'], ['id' => 2, 'name' => '李四']]], ['id' => 2, 'name' => '李四']]" id="vo"}
<li><a href="/show/{$vo['id']}.html">{$vo['name']}</a></li>
{if condition="isset($vo['childs'])"}
{hisi:loop data="$vo['childs']" id="vv"}
<li>---<a href="/show/{$vv['id']}.html">{$vv['name']}</a></li>
{/hisi:loop}
{/if}
{/hisi:loop}
</ul>
~~~
>[info] 標簽嵌套最多支持5層嵌套