大家都知道,fastadmin的拖动排序要根据数据表的weigh字段来操作。而有些朋友可能是新接入fastadmin,数据表中没有weigh字段,可能是sort字段什么的。如果其他业务关联得太多,基本上是不可能去修改字段。
今天我分享一下如何用自己原有的字段来实现拖动排序。(例如我的数据表是用sort来排序的)
找到对应页面的js。例如我的一个显示banner的控制器地址是 banner/lists/index 那就找到对应的lists.js(public/assets/js/backend/banner/lists.js)然后找到index的function。(具体对应你需要的function)
1.在function加入Table.config.dragsortfield = 'sort'; (具体填写你数据表需要排序的字段)
2.在extends里面,增加一个你自定义的排序接口地址。dragsort_url: '...',
例如:
Table.api.init({ extend: { //这里是其他原有的地址,就新增下面这一行 dragsort_url: '接口地址', }, });
3.新建一个接口方法用来排序,例如我新增了一个这个方法: banner/lists/sort 那么就将这个地址填上上一步那个dragsort_url里。
方法的内容最简单的就是,你可以复制ajax/weigh这个方法,然后把里面的weigh字段改成你自己的字段,你也可以自己编写一个公共通用的方法,这样可以应对不同的排序字段。这里我作为举例,就用最简单的方法。
public function sort(){//排序的数组 $ids = $this->request->post("ids"); //拖动的记录ID $changeid = $this->request->post("changeid"); //操作字段 $field = $this->request->post("field"); //操作的数据表 $table = $this->request->post("table"); //排序的方式 $orderway = $this->request->post("orderway", 'strtolower'); $orderway = $orderway == 'asc' ? 'ASC' : 'DESC'; $sour = $weighdata = []; $ids = explode(',', $ids); $prikey = 'id'; $pid = $this->request->post("pid"); //限制更新的字段 $field = in_array($field, ['sort']) ? $field : 'sort'; //你要修改的就是这里,把原来的weigh,修改成你要排序的字段 // 如果设定了pid的值,此时只匹配满足条件的ID,其它忽略 if ($pid !== '') { $hasids = []; $list = Db::name($table)->where($prikey, 'in', $ids)->where('pid', 'in', $pid)->field('id,pid')->select(); foreach ($list as $k => $v) { $hasids[] = $v['id']; } $ids = array_values(array_intersect($ids, $hasids)); } $list = Db::name($table)->field("$prikey,$field")->where($prikey, 'in', $ids)->order($field, $orderway)->select(); foreach ($list as $k => $v) { $sour[] = $v[$prikey]; $weighdata[$v[$prikey]] = $v[$field]; } $position = array_search($changeid, $ids); $desc_id = $sour[$position]; //移动到目标的ID值,取出所处改变前位置的值 $sour_id = $changeid; $weighids = array(); $temp = array_values(array_diff_assoc($ids, $sour)); foreach ($temp as $m => $n) { if ($n == $sour_id) { $offset = $desc_id; } else { if ($sour_id == $temp[0]) { $offset = isset($temp[$m + 1]) ? $temp[$m + 1] : $sour_id; } else { $offset = isset($temp[$m - 1]) ? $temp[$m - 1] : $sour_id; } } $weighids[$n] = $weighdata[$offset]; Db::name($table)->where($prikey, $n)->update([$field => $weighdata[$offset]]); } $this->success();}
4.在权限管理中新增这个方法对应的权限规则,应用到相关角色组。
通过这几步,你应该就可以使用自定义的字段来进行拖动排序操作了。
如果你有更简单的方法,欢迎分享。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。