1.创建content.php控制器
//显示列表 public static function indexList($where,$field,$orderby,$limit,$page){ try{ $res = db('article')->field($field)->alias('a')->join('column b','a.a_columnid=b.c_id')->where($where)->order($orderby)->paginate(['list_rows'=>$limit,'page'=>$page]); }catch(Exception $e){ abort(config('my.error_log_code'),$e->getMessage()); } return ['rows'=>$res->items(),'total'=>$res->total()]; }
2.前台
{extend name='common/_container'} {block name="content"} <style> a {color:#666} </style> <div class="row ibox" style="background-color:#fff; margin-top:-15px;"> <div class="col-sm-2" > <div class="ibox-title" style="border:none;"> <h3 style="font-size:16px; color:#000; margin-bottom:10px;">栏目列表</h3> </div> <ul id="treeList"></ul> </div> <div class="col-sm-10" style="border-left:10px solid #ddd;"> <div class="ibox float-e-margins"> <div class="ibox-title" style="border:none;"> <h5>内容管理</h5> <button style="float:right; margin-top:-10px;" title="刷新页面" type="button" class="btn btn-default btn-outline" onclick="window.location.reload()" id=""> <i class="fa fa-refresh"></i> </button> </div> <div class="ibox-content"> <div class="row row-lg"> <div class="col-sm-12"> <div class="row" id="searchGroup"> <div class="col-sm-3"> <div class="input-group"> <div class="input-group-btn"> <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">文章标题</button> </div> <input type="text" class="form-control" id="title" placeholder="文章标题" /> </div> </div> <div class="col-sm-3"> <div class="input-group"> <div class="input-group-btn"> <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">所属分类</button> </div> <select class="form-control" id="class_id"> <option value="">请选择</option> <option value="{$sql.class_id}"> </option> </select> </div> </div> <div class="col-sm-3"> <div class="input-group"> <div class="input-group-btn"> <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">文章状态</button> </div> <select class="form-control" id="status"> <option value="">请选择</option> <option value="1">正常</option> <option value="0">下架</option> </select> </div> </div> <!-- search end --> <div class="col-sm-2"> <button type="button" class="btn btn-primary " onclick="CodeGoods.search()" id=""> <i class="fa fa-search"></i> 搜索 </button> </div> </div> <div class="btn-group-sm" id="CodeGoodsTableToolbar" role="group"> <button type="button" id="add" class="btn btn-primary button-margin" onclick="CodeGoods.add()"> <i class="fa fa-plus"></i> 添加 </button> <button type="button" id="update" class="btn btn-success button-margin" onclick="CodeGoods.update()"> <i class="fa fa-pencil"></i> 修改 </button> <button type="button" id="delete" class="btn btn-danger button-margin" onclick="CodeGoods.delete()"> <i class="fa fa-trash"></i> 删除 </button> <button type="button" class="btn btn-primary button-margin" onclick="CodeGoods.do()" id=""> <i class="fa fa-check"></i> 确定 </button> </div> <table id="CodeGoodsTable" data-mobile-responsive="true" data-click-to-select="true"> <thead><tr><th data-field="selectItem" data-checkbox="true"></th></tr></thead> </table> </div> </div> </div> </div> </div> </div> <script> var CodeGoods = {id: "CodeGoodsTable",seItem: null,table: null,layerIndex: -1}; CodeGoods.initColumn = function () { return [ {field: 'selectItem', checkbox: true}, {title: '编号', field: 'a_id', visible: true, align: 'center', valign: 'middle'}, {title: '文章标题', field: 'a_title', visible: true, align: 'left', valign: 'middle'}, {title: '所属分类', field: 'c_name', visible: true, align: 'center', valign: 'middle'}, {title: '文章状态', field: 'a_open', visible: true, align: 'center', valign: 'middle',formatter:CodeGoods.statusFormatter}, {title: '发布时间', field: 'a_time', visible: true, align: 'center', valign: 'middle'}, // {title: '排序', field: 'sortid', visible: true, align: 'center', valign: 'middle',formatter:CodeGoods.sortidFormatter}, {title: '操作', field: 'a_id', visible: true, align: 'center', valign: 'middle',formatter: 'CodeGoods.buttonFormatter'}, ]; }; CodeGoods.buttonFormatter = function(value,row,index) { if(value){ var str= ''; str += '<button type="button" class="btn btn-success btn-xs" title="修改" onclick="CodeGoods.update('+value+')"><i class="fa fa-pencil"></i> 修改</button> ' str += '<button type="button" class="btn btn-danger btn-xs" title="删除" onclick="CodeGoods.delete('+value+')"><i class="fa fa-trash"></i> 删除</button> ' return str; } } CodeGoods.statusFormatter = function(value,row,index) { if(value !== null){ if(value == 1){ return '<input class="mui-switch mui-switch-animbg status'+row.a_id+'" type="checkbox" onclick="CodeGoods.updatestatus('+row.a_id+',0)" checked>'; }else{ return '<input class="mui-switch mui-switch-animbg status'+row.a_id+'" type="checkbox" onclick="CodeGoods.updatestatus('+row.a_id+',1)">'; } } } CodeGoods.updatestatus = function(pk,value) { var ajax = new $ax(Feng.ctxPath + "/Content/updateExt", function (data) { if ('00' === data.status) { } else { Feng.error(data.msg); $(".status"+pk).prop("checked",!$(".status"+pk).prop("checked")); } }); var val = $(".status"+pk).prop("checked") ? 1 : 0; ajax.set('a_id', pk); // ajax.set('status', val); ajax.start(); } CodeGoods.create_timeFormatter = function(value,row,index) { if(value){ return formatDateTime(value); } } CodeGoods.sortidFormatter = function(value,row,index) { return '<input type="text" value="'+value+'" onblur="CodeGoods.updatesortid('+row.a_id+',this.value)" style="width:50px; border:1px solid #ddd; text-align:center">'; } CodeGoods.updatesortid = function(pk,value) { var ajax = new $ax(Feng.ctxPath + "/Content/updateExt", function (data) { if ('00' === data.status) { } else { Feng.error(data.msg); } }); ajax.set('a_id', pk); // ajax.set('sortid', value); ajax.start(); } CodeGoods.formParams = function() { var queryData = {}; queryData['title'] = $("#title").val(); queryData['class_id'] = $("#class_id").val(); queryData['status'] = $("#status").val(); queryData['startTime'] = $("#startTime").val(); queryData['endTime'] = $("#endTime").val(); return queryData; } CodeGoods.check = function () { var selected = $('#' + this.id).bootstrapTable('getSelections'); if(selected.length == 0){ Feng.info("请先选中表格中的某一记录!"); return false; }else{ CodeGoods.seItem = selected; return true; } }; CodeGoods.updateExt = function (value) { } CodeGoods.add = function (value) { var url = location.search; var index = layer.open({type: 2,title: '添加',area: ['100%', '100%'],fix: false, maxmin: true,content: Feng.ctxPath + '/Content/add'+url}); this.layerIndex = index; } CodeGoods.update = function (value) { if(value){ var index = layer.open({type: 2,title: '修改',area: ['100%', '100%'],fix: false, maxmin: true,content: Feng.ctxPath + '/Content/update?a_id='+value}); }else{ if (this.check()) { var idx = ''; $.each(CodeGoods.seItem, function() { idx += ',' + this.a_id; }); idx = idx.substr(1); if(idx.indexOf(",") !== -1){ Feng.info("请选择单条数据!"); return false; } var index = layer.open({type: 2,title: '修改',area: ['100%', '100%'],fix: false, maxmin: true,content: Feng.ctxPath + '/Content/update?a_id='+idx}); this.layerIndex = index; } } } CodeGoods.do = function () { var type = $("#selectAction option:selected").val(); if(type == 100){ CodeGoods.move(); }else{ CodeGoods.position(type); } } CodeGoods.move = function (value) { if (this.check()) { var idx = ''; $.each(CodeGoods.seItem, function() { idx += ',' + this.a_id; }); idx = idx.substr(1); var class_id = $("#moveId option:selected").val(); if(class_id == ''){ Feng.error('请选择移动到的栏目'); } Feng.confirm("是否移动选中项?", function () { var ajax = new $ax(Feng.ctxPath + "/Content/move", function (data) { if ('00' === data.status) { Feng.success(data.msg); CodeGoods.table.refresh(); } else { Feng.error(data.msg); } }); ajax.set('a_ids', idx); ajax.set('c_id', class_id); ajax.start(); }); } } CodeGoods.position = function (type) { if (this.check()) { var idx = ''; $.each(CodeGoods.seItem, function() { idx += ',' + this.a_id; }); idx = idx.substr(1); Feng.confirm("是否操作选中项?", function () { var ajax = new $ax(Feng.ctxPath + "/Content/setPosition", function (data) { if ('00' === data.status) { Feng.success(data.msg); CodeGoods.table.refresh(); } else { Feng.error(data.msg); } }); ajax.set('a_ids', idx); // ajax.set('position_id', type); ajax.start(); }); } } CodeGoods.delete = function (value) { if(value){ Feng.confirm("是否删除选中项?", function () { var ajax = new $ax(Feng.ctxPath + "/Content/delete", function (data) { if ('00' === data.status) { Feng.success(data.msg); CodeGoods.table.refresh(); } else { Feng.error(data.msg); } }); ajax.set('a_ids', value); ajax.start(); }); }else{ if (this.check()) { var idx = ''; $.each(CodeGoods.seItem, function() { idx += ',' + this.a_id; }); idx = idx.substr(1); Feng.confirm("是否删除选中项?", function () { var ajax = new $ax(Feng.ctxPath + "/Content/delete", function (data) { if ('00' === data.status) { Feng.success(data.msg); CodeGoods.table.refresh(); } else { Feng.error(data.msg); } }); ajax.set('a_ids', idx); ajax.start(); }); } } } CodeGoods.delPosition = function (position_id,a_id) { Feng.confirm("确定删除推荐位吗", function () { var ajax = new $ax(Feng.ctxPath + "/Content/delPosition", function (data) { if ('00' === data.status) { Feng.success(data.msg); CodeGoods.table.refresh(); } else { Feng.error(data.msg); } }); ajax.set('a_id', a_id); // ajax.set('position_id', position_id); ajax.start(); }); } CodeGoods.search = function() { CodeGoods.table.refresh({query : CodeGoods.formParams()}); }; $(function() { $("#moveId").hide(); $('#selectAction').change(function() { var type = $(this).val(); if(type == 100){ $("#moveId").show(); }else{ $("#moveId").hide(); } }); var defaultColunms = CodeGoods.initColumn(); var url = location.search; var table = new BSTable(CodeGoods.id, Feng.ctxPath+"/Content/index"+url,defaultColunms,20); table.setPaginationType("server"); table.setQueryParams(CodeGoods.formParams()); CodeGoods.table = table.init(); }); </script> <script src="__PUBLIC__/static/js/plugins/layui/layui.all.js?t=1498856285724" charset="utf-8"></script> <script> layui.use('tree', function(){ var tree = layui.tree; //渲染 var inst1 = tree.render({ elem: '#treeList', //绑定元素 data: JSON.parse('{$catagoryInfo}'), showLine:false, onlyIconControl:true, click:function(node) { var queryData = CodeGoods.formParams(); queryData['c_id'] = node.data.id; CodeGoods.table.refresh({query : queryData}); } }); }); </script> {/block}
<?php /** * ============================================================================ * * COPYRIGHT 2016-2019 xhadmin.com , and all rights reserved. * * WEBSITE: http://www.xhadmin.com; * ---------------------------------------------------------------------------- * This is not a free software!You have not used for commercial purposes in the * premise of the program code to modify and use; and publication does not allow * any form of code for any purpose. * ============================================================================ * Author: 末末 QQ:2228293408 */ namespace appadmincontroller; use appadminserviceCatagoryService; use appadminmodelCatagory as CatagoryModel; use appadmincontrollerAdmin; class Catagory extends Admin { /*栏目管理*/ function index(){ if (!$this->request->isAjax()){ return view('catagory/index'); }else{ $limit = $this->request->post('limit', 0, 'intval'); $offset = $this->request->post('offset', 0, 'intval'); $page = floor($offset / $limit) +1 ; $where = []; $field = '*'; $orderby = 'c_id asc'; $res = CatagoryService::indexList(formatWhere($where),$field,$orderby,$limit,$page); $res['rows'] = formartList(['c_id', 'c_parentid', 'c_webname','c_webname'],$res['rows']); return json($res); } } /*修改排序*/ function updateExt(){ $postField = 'c_id,c_order'; $data = $this->request->only(explode(',',$postField),'post',null); if(!$data['c_id']) $this->error('参数错误'); dump($data);exit; try{ CatagoryModel::update($data); }catch(Exception $e){ abort(config('my.error_log_code'),$e->getMessage()); } return json(['status'=>'00','msg'=>'操作成功']); } /*添加*/ function add(){ if (!$this->request->isPost()){ $class_id = $this->request->get('c_id','','intval'); // dump($class_id); $info = CatagoryModel::find($class_id); // dump($info);exit; $data["c_parentid"]= $info->c_id; $data["c_name"] = $info->c_name; $data["c_columntemp"] = $info->c_columntemp; $data["c_articletemp"] = $info->c_articletemp; $data["c_nav"] = $info->c_articletemp; $this->view->assign('info',$data); // $this->view->assign('tpList',CatagoryService::tplList($default_themes)); return view('catagory/add'); }else{ $data = $this->request->post(); $data['c_parpath']=0; // dump($data);exit; $res = CatagoryService::add($data); // exit; return json(['status'=>'00','msg'=>'添加成功']); } } /*修改*/ function update(){ if (!$this->request->isPost()){ $class_id = $this->request->get('c_id','','intval'); if(!$class_id) $this->error('参数错误'); // $default_themes = config('xhadmin.default_themes') ? config('xhadmin.default_themes') : 'index'; // $this->view->assign('tpList',CatagoryService::tplList($default_themes)); $this->view->assign('info',checkData(CatagoryModel::find($class_id))); return view('catagory/update'); }else{ $data = $this->request->post(); // dump($data);exit; $data['c_key']=$data['status']; if($data['c_id'] == $data['c_parentid']) $this->error('当前分类不能作为父分类'); CatagoryService::update($data); return json(['status'=>'00','msg'=>'修改成功']); } } /*删除*/ function delete(){ $idx = $this->request->post('c_ids', '', 'serach_in'); if(!$idx) $this->error('参数错误'); try{ CatagoryModel::destroy(['c_id'=>explode(',',$idx)]); }catch(Exception $e){ abort(config('my.error_log_code'),$e->getMessage()); } return json(['status'=>'00','msg'=>'操作成功']); } //排序上下移动操作 function setSort(){ $class_id = $this->request->post('c_order', 0, 'intval'); $type = $this->request->post('type', 0, 'intval'); // echo $type;exit; if(empty($class_id) || empty($type)) $this->error('参数错误'); CatagoryService::setSort($class_id,$type); return json(['status'=>'00','msg'=>'操作成功']); } }