## 內容列表:list
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| cid | int/var | 是 | 0 | 分類ID,cid和mid最少傳一個 |
| mid | int/var | 是 | 0 | 模型ID,cid和mid最少傳一個 |
| orderby | string | 否 | id desc | 結果排序 |
| attr | string/array | 否 | | 擴展屬性篩選 |
| keyword | string/var | 否 | | 通過關鍵字搜索title |
| limit | int | 否 | 20 | 返回結果條數 |
| pagesize | int | 否 | 0 | 分頁大小 |
| field | string | 否 | | 設置返回的字段 |
| flag | string | 否 | | 通過推薦旗幟篩選內容 |
| tag | string | 否 | | 通過標簽篩選內容 |
| where | string/array | 否 | | 自定義查詢條件 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼:欄目頁調用當前欄目數據
```
{hisi:list cid="$category['id']"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:通過cid調用內容
```
{hisi:list cid="39"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:通過標簽調用文章
```
{hisi:list mid="2" tag="兩會" limit="10"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:調用10條置頂文章,按瀏覽量降序排列
```
{hisi:list mid="2" flag="top" limit="10" orderby="views desc"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:自定義查詢條件
```
{hisi:list mid="2" where="'cid = 39'"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:獲取擴展模型的某個字段
```
{hisi:list mid="2" field="intro,author"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
```
>[info] 示例代碼:文章列表頁
```
<!--列表數據-->
{hisi:list cid="39" pagesize="20" field="intro,author"}
<li>[{$i}] <a href="{$r['url']}">{$r['title']}</a></li>
{/hisi:list}
<!--分頁代碼-->
{$pages|raw}
```
## 欄目列表:category
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| cid | int/string | 是 | 0 | 分類ID,cid、pid、mid最少傳一個,多個cid用英文逗號分隔,示例:'1,2,3' |
| pid | int | 是 | 0 | 父ID,cid、pid、mid最少傳一個 |
| mid | in | 是 | 2 | 模型ID,cid、pid、mid最少傳一個 |
| level | int | 否 | 0 | 返回層級數,0為不限制 |
| limit | int | 否 | 0 | 返回數據條數限制(同時傳入pid參數時有效),0為不限制 |
| field | string | 否 | | 設置返回的字段 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼:調用某個分類下面的子分類(只調用2級)
```
{hisi:category cid="39" level="2"}
<li>[{$i}] <a href="{$r['url']}">{$r['name']}</a></li>
{hisi:loop data="$r['childs']" id="rr"}
<li>. <a href="{$rr['url']}">{$rr['name']}</a></li>
{/hisi:loop}
{/hisi:category}
<!--打印完整結果集-->
{:print_r($hisiCategory)}
```
>[info] 示例代碼:調用某個模型下面的所有分類
```
{hisi:category mid="2"}
<li>[{$i}] <a href="{$r['url']}">{$r['name']}</a></li>
{hisi:loop data="$r['childs']" id="rr"}
<li>. <a href="{$rr['url']}">{$rr['name']}</a></li>
更多層級嵌套.....
{/hisi:loop}
{/hisi:category}
```
>[info] 示例代碼:調用某個分類下面的所有子分類,并獲取更多字段
```
{hisi:category cid="39" field="image"}
<li>[{$i}] <a href="{$r['url']}"><img src="{$r['image']}"></a></li>
{hisi:loop data="$r['childs']" id="rr"}
<li>. <a href="{$rr['url']}"><img src="{$rr['image']}"></a></li>
{/hisi:loop}
{/hisi:category}
```
## 標簽:tag
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| mid | int/var| 是 | | 指定模型ID |
| orderby | string | 否 | search\_count desc | 排序 |
| limit | int | 否 | 10 | 限制返回數量 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼:調用文章模型下面搜索量最大的10個標簽
```
{hisi:tag mid="2" limit="10" orderby="search_count desc"}
<li><a href="{$r['url']}">{$r['name']}</a></li>
{/hisi:tag}
```
## 碎片塊:block
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| name | string | 是 | | 碎片名稱 |
>[info] 示例代碼
```
{hisi:block name="footer" /}
```
## 導航:nav
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| group | string | 否 | | 返回指定分組 |
| limit | int | 否 | 10 | 限制返回數量 |
| cache | bool | 否 | false | 緩存結果集 |
| type | string | 否 | pc | 終端類型(pc,wap) |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼
```
{hisi:nav cache="true"}
<li><a href="{$r['url']}" target="{$r['target']}">{$r['title']}</a></li>
<!--如果有子導航的話-->
{hisi:loop data="$r['childs]" id="rr"}
<li>. <a href="{$rr['url']}" target="{$rr['target']}">{$rr['title']}</a></li>
{/hisi:loop}
{/hisi:nav}
<!--指定分組獲取-->
{hisi:nav group="home" cache="true"}
<li><a href="{$r['url']}" target="{$r['target']}">{$r['title']}</a></li>
<!--如果有子導航的話-->
{hisi:loop data="$r['childs]" id="rr"}
<li>. <a href="{$rr['url']}" target="{$rr['target']}">{$rr['title']}</a></li>
{/hisi:loop}
{/hisi:nav}
```
## 友情鏈接:link
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| type | string | 是 | | 類型,可選值:image,text,all |
| group | string | 否 | | 返回指定分組 |
| orderby | string | 否 | sort asc | 排序 |
| limit | int | 否 | 10 | 限制返回數量 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼
```
{hisi:link type="all"}
<li><a href="{$r['url']}" target="{$r['target']}">{$r['title']}</a></li>
{/hisi:link}
<!--指定分組獲取-->
{hisi:link group="home"}
<li><a href="{$r['url']}" target="{$r['target']}">{$r['title']}</a></li>
{/hisi:link}
<!--獲取圖片友鏈-->
{hisi:link type="image"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:link}
```
## 幻燈片:slide
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| type | string | 否 | pc | 類型,可選值:pc,wap |
| group | string | 否 | | 返回指定分組 |
| orderby | string | 否 | sort asc | 排序 |
| limit | int | 否 | 10 | 限制返回數量 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼:獲取電腦端的幻燈片
```
{hisi:slide type="pc" limit="5"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:slide}
<!--指定分組獲取-->
{hisi:slide group="home" type="pc" limit="5"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:slide}
```
>[info] 示例代碼:獲取移動端的幻燈片
```
{hisi:slide type="wap" limit="5"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:slide}
```
## 當前位置:position
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| cid | int/var | 是 | 0 | 當前分類ID |
| sep | string | 否 | > | 分隔符 |
>[info] 示例代碼
```
{hisi:position cid="40" sep=" / "}
<!--返回結果示例-->
你的位置:首頁 / 文章 / 國內文章
```
## 推薦:rec
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| name | string | 是 | | 調用名稱 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼
```
<!--單層推薦調用-->
{hisi:rec name="pic\_channel"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:rec}
<!--多層推薦調用-->
{hisi:rec name="pic\_channel"}
<div class="floor">
<h3>{$r\['title'\]}</h3>
<ul>
{hisi:loop data="$r\['childs'\]" id="rr"}
<li><a href="{$r['url']}" target="{$r['target']}"><img src="{$r['image']}" alt="{$r['title']}"></a></li>
{/hisi:loop}
</ul>
</div>
{/hisi:rec}
```
## 欄目類型:type
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| tid | int | 是 | | 類型ID |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼
```
{hisi:type tid="$category['type_id']"}
<dl class="attr-dl">
<dt>{$r['name']}:</dt>
<dd>
<a href="{:attr_url($r['id'], '', '')}" class="{:empty(input('get.attr'.$r['id'])) ? 'active' : ''}">全部</a>
{hisi:loop data="$r['values']" id="rr"}
{:attr_url($r['id'], $rr['id'], $rr['name'])}
{/hisi:loop}
</dd>
</dl>
{/hisi:type}
```
## 表單:form
| 屬性名 | 類型 | 必須 | 默認 | 說明
| --- | --- | --- | --- | --- |
| name | string | 是 | | 表單名稱 |
| id | string | 否 | r | 當前循環變量 |
| key | string | 否 | key | 當前循環鍵名 |
| index | string | 否 | i | 當前循環的序號變量名 |
>[info] 示例代碼
```
<form class="layui-form" action="/cms/api/form_save" method="post">
{hisi:form name="test"}
{switch $r['type']}
{case radio}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline">
{foreach name=":parse_attr($r['options'])" id="vv" key="kk"}
<input type="radio" name="{$r['name']}" title="{$vv}" value="{$kk}" {if ($kk == $r['value'])}checked{/if} />
{/foreach}
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case checkbox}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline">
{foreach name=":parse_attr($r['options'])" id="vv" key="kk"}
<input type="checkbox" name="{$r['name']}[]" value="{$kk}" title="{$vv}" {if (in_array($kk, parse_attr($r['value'])))}checked{/if}> {$vv}
{/foreach}
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case select}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline">
<select name="{$r['name']}">
<option value="">請選擇...</option>
{foreach name=":parse_attr($r['options'])" id="vv" key="kk"}
<option value="{$kk}" {if ($kk eq $r['value'])}selected{/if}>{$vv}</option>
{/foreach}
</select>
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case file}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline upload">
<button type="button" class="layui-btn layui-btn-primary layui-upload" lay-data="{accept:'file', data: {timestamp: '{:date('Y-m-d H:i:s')}', sign: '{:md5(date('Y-m-d H:i:s').config('module_cms.api_secret_key'))}', fid: '1', field: '{$r['name']}'}}">點此上傳{$r['title']}</button>
<input type="hidden" class="upload-input" name="{$r['name']}" />
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case image}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline upload">
<button type="button" class="layui-btn layui-btn-primary layui-upload" lay-type="image" lay-data="{accept:'image', data: {timestamp: '{:date('Y-m-d H:i:s')}', sign: '{:md5(date('Y-m-d H:i:s').config('module_cms.api_secret_key'))}', fid: '1', field: '{$r['name']}'}}">點此上傳{$r['title']}</button>
<input type="hidden" class="upload-input" name="{$r['name']}" />
<img src="" onerror="this.src='__ADMIN_IMG__/theme.png';" style="border-radius:5px;border:1px solid #ccc" width="36" height="36">
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case password}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline">
<input type="password" class="layui-input" name="{$r['name']}" value="{$r['value']}" />
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/case}
{case hidden}
<input type="hidden" name="{$r['name']}" value="{$r['value']}" />
{/case}
{default /}
<div class="layui-form-item">
<label class="layui-form-label">{$r['title']}</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="{$r['name']}" value="{$r['value']}" />
</div>
<div class="layui-form-mid layui-word-aux">{$r['tips']}</div>
</div>
{/switch}
{/hisi:form}
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<input type="hidden" name="fid" value="{$hisiFormFid}" />
<input type="hidden" name="timestamp" value="{:date('Y-m-d H:i:s')}" />
<input type="hidden" name="sign" value="{:md5(date('Y-m-d H:i:s').config('module_cms.api_secret_key'))}" />
<button type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="formSubmit">提交</button>
</div>
</div>
</form>
<!--當前示例是基于layui,所以下面必須引入layui-->
<script type="text/javascript" src="__PUBLIC_JS__/layui/layui.js"></script>
<script type="text/javascript">
layui.use(['jquery', 'form', 'layer', 'upload'], function(){
var $ = layui.jquery, form = layui.form, layer = layui.layer, upload = layui.upload;
form.on('submit(formSubmit)', function(data) {
var that = $(this), _form = that.parents('form'), text = that.text();
that.prop('disabled', true).text('提交中...');
$.ajax({
type: "POST",
url: _form.attr('action'),
data: _form.serialize(),
success: function(res) {
that.text(res.msg);
if (res.code == 0) {
that.prop('disabled', false).removeClass('layui-btn-normal').addClass('layui-btn-danger');
setTimeout(function(){
that.removeClass('layui-btn-danger').addClass('layui-btn-normal').text(text);
}, 3000);
} else {
that.text('保存成功');
setTimeout(function(){
location.reload();
}, 3000);
}
}
});
return false;
});
upload.render({
elem: '.layui-upload'
,url: '/cms/api/upload'
,method: 'post'
,before: function(input) {
layer.msg('上傳中...', {time:3000000});
},done: function(res, index, upload) {
var obj = this.item;
if (res.code == 0) {
layer.msg(res.msg);
return false;
}
layer.closeAll();
var input = $(obj).parents('.upload').find('.upload-input');
if ($(obj).attr('lay-type') == 'image') {
input.siblings('img').attr('src', res.data.file).show();
}
input.val(res.data.file);
$(obj).parents('.upload').find('button').text('上傳成功');
}
});
});
</script>
```
- 序言
- 環境配置
- 下載及安裝
- 目錄結構
- 系統配置
- 多語言
- 命令行(pro版)
- 自動生成模塊或插件(build)
- 生成模塊
- 生成插件
- 自動生成增刪改查(crud)
- 第一步:創建數據表
- 第二步:使用crud指令生成
- 自動生成類庫文件(make)
- 生成控制器文件(make:controller)
- 生成模型文件(make:model)
- 生成邏輯文件(make:logic)
- 生成服務文件(make:service)
- 生成驗證器文件(make:validate)
- 構建器(pro版)
- 表單構建器(form)
- 表單屬性設置
- 添加表單項
- 文本框(text)
- 隱藏域(hidden)
- 密碼框(password)
- 文本域(textarea)
- 單文件(file)
- 多文件(files)
- 單圖(image)
- 多圖(images)
- 開關(switch)
- 單選(radio)
- 多選(checkbox)
- 下拉框(select)
- 標簽(tag)
- 日期時間(datetime)
- 顏色選擇器(color)
- 富文本編輯器(editor)
- 滑塊(slider)
- 評分(rate)
- 穿梭框(transfer)
- 進度條(progress)
- 樹形(tree)
- 聯動(linkage)
- 自定義html(html)
- 分隔線(line)
- 文字(txt)
- 下拉框增強版(select+)
- 數據表格(table)
- 添加表單分組(group)
- 柵格布局(grid)
- 觸發器(trigger)
- 通用上傳方法
- 表格構建器(table)
- 表格基礎配置
- 添加表頭工具欄
- 添加表格篩選
- 頁面提示(pageTips)
- 引入 JS 文件
- 引入 CSS 文件
- 渲染額外 JS 代碼
- 渲染額外 CSS 代碼
- 模塊開發
- 1.生成模塊
- 2.創建菜單
- 3.創建控制器
- 后臺通用方法
- 插件開發
- 1.新建插件
- 2.插件配置
- 3.插件控制器
- 4.插件模板
- 5.插件鉤子
- 模板替換變量
- 公共函數庫
- 后臺通用JS方法
- 常見問題
- 官方模塊
- CMS內容管理模塊
- 目錄結構
- 模板標簽
- API接口
- 欄目頁/內容頁
- 小程序發布
- 官方插件
- 第三方登錄
- excel插件
- 萬能采集
- 采集規則
- 采集內容