1、先在HTML中添加排序的标签,并且给一个输入框,再写一个“更新”的button
标签
<th width="14">排序<i class="fa fa-sort"></i></th>
输入框
<td><input size="4" type="text" name="listorder[{$menu.menu_id}]" value="{$menu.listorder}"></td>
更新的button
<div>
<a href="#" style="display: block"><button id="button_listorder" type="button" class="btn btn-primary dropdown-toggle">更新排序</button></a>
</div>
2、通过common.js来触发按钮
/** * 排序操作 */ $('#button_listorder').click(function() { //触发button中的id // 点击“更新”按钮之后会获取表单中的 listorder内容,也就是 $("#singcms-listorder").serializeArray();这个值 var data = $("#singcms-listorder").serializeArray(); postData = {}; $(data).each(function(i){ postData[this.name] = this.value; //把这个值放入数组 }); console.log(postData); var url = SCOPE.listorder_url; //把postData抛送给URL地址,先定去index文件定义地址( 'listorder_url' : '/admin.php?c=menu&a=listorder')
$.post(url,postData,function(result){ if(result.status == 1) { //成功 return dialog.success(result.message,result['data']['jump_url']); }else if(result.status == 0) { // 失败 return dialog.error(result.message,result['data']['jump_url']); } },"JSON"); });
定义URL地址的HTML代码var SCOPE = { 'listorder_url' : '/admin.php?c=menu&a=listorder' }
3、然后再控制器menuController新建一个方法
public function listorder() { $listorder = $_POST['listorder']; //把$listorder赋值给前端的变量 $jumpurl = $_SERVER['HTTP_REFERER']; //定义一个跳转的URL地址 $errors = array(); if ($listorder) { try { // try{} catch{} 处理异常问题 foreach ($listorder as $menuId => $v) { //foreach对$listorder进行循环 // 执行更新 与数据库打交道,所以要到commom/model写一个方法 $id = D("Menu")->updateMenuListorderById($menuId, $v); // 然后通过D直接调用model层定义的方法 if ($id === false) { $errors[] = $menuId; } } }catch(Exception $e) { return show(0,$e->getMessage(),array('jump_url'=>$jumpurl)); //处理异常问题之后给出一个提示 } if($errors) { //排序之后会带一个跳转地址 return show(0,'排序失败-'.implode(',',$errors),array('jump_url'=>$jumpurl)); } return show(1,'排序成功',array('jump_url'=>$jumpurl)); } return show(0,'排序数据失败',array('jump_url'=>$jumpurl)); }
上面提到 “ 执行更新 与数据库打交道,所以要到commom/model写一个方法 ” model方法如下public function updateMenuListorderById($id,$listorder){ if(!$id||!is_numeric($id)){ //如果没有id或者id值不是一个数字,则抛出异常 throw_exception('ID不合法'); } $data = array( 'listorder'=>intval($listorder), ); return $this->_db->where('menu_id='.$id)->save($data); }
最后为了实现排序还需在之前写好的 model层 的public function getMenus()方法中加一个 “ listorder desc ”
public function getMenus($data,$page,$pageSize=10){ $data["status"] = array('neq',-1); $offset = ($page - 1) * $pageSize; $list = $this->_db->where($data)->order('listorder desc','menu_id desc')->limit($offset,$pageSize)->select(); return $list;