为了方便大家在模板里面快速的调用数据库内容,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层嵌套