PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

分享一下如何自定义拖动排序的字段

管理员 2024-12-14
Fastadmin
49

大家都知道,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修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部