多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 内容列表: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> ```