tp3.2.3实现支持点击排序

假设:

Admin/Home/Controller/BaseController.class.php是一个基础控制器

$current_params$in是两个在Admin/Home/Controller/BaseController.class.php中用来保存接收参数的属性,并且已经在构造函数中对其赋值

Admin/Tpl/Index/footer.html是布局中的公共部分

Public/Model/BaseModel.class.php是公共模型

请求中用来表示模块,控制器,操作的参数名称分别为:m,c,a

#searchForm#excelForm分别为条件搜索form和excel表单导出请求提交时用来临时保存和传递筛选条件的form

全局改动

Admin/Home/Controller/BaseController.class.php改动:

新增protected $current_params属性 _initialize方法尾部新增以下代码(用于处理传入的有效参数):

unset($this->current_params['m']);
unset($this->current_params['c']);
unset($this->current_params['a']);
$this->assign('page_url', U(CONTROLLER_NAME.'/'.ACTION_NAME,$this->current_params));

控制器尾部新增以下方法:

/*
 * todo:处理排序请求
 * @param $sort string 用来mysql排序的字符串
 * @param $column string 用来指定排序字段名称
 * @param $value int 排序值,1:顺序;2:倒序
 * @param $table string 需要排序字段在当前sql语句中表的别名
 * @return string 返回处理后的$order
 * */
protected function assembleSort($sort,$column,$value,$table){
    $order = urldecode($sort);
    $v_sort[$column] = $value == 1 ? 2 : 1;
    $v_sort['param_sort'] = $sort;
    $v_sort['param_column'] = $column;
    $v_sort['param_value'] = $v_sort[$column];
    $v_sort['param_table'] = $table;
    $this->assign('sort', $v_sort);
    return $order;
}

Admin/Tpl/Index/footer.html改动:

</body>标签前新增以下代码: html(保存当前页面并携带除排序相关参数的url):

<input type="hidden" id="page_url" value="{{$page_url}}">

js:

/*
    * todo:全局监听并处理点击排序操作
    * */
    $(function(){
        var form = $('#searchForm');
        if(typeof(form) !== 'undefined'){
            form.append("<input class='excel' type='hidden' name='sort' value='{{$sort.param_sort}}'/><input class='excel' type='hidden' name='column' value='{{$sort.param_column}}'/><input class='excel' type='hidden' name='value' value='{{$sort.param_value}}'/><input class='excel' type='hidden' name='table' value='{{$sort.param_table}}'/>");
        }
        $('th[data-sort=1]').attr('class','sortable').append('?');
        $('th[data-sort=2]').attr('class','sortable').append('?');
        $('tr').delegate('th','click',function(){
            var sort = $(this).attr('data-sort');
            var param = ``;
            if(typeof(sort) !== 'undefined'){
                var order = ``;
                var column = $(this).attr('data-column');
                var table = $(this).attr('data-table') ? $(this).attr('data-table') + '.' : '';
                if(sort == 1){
                    order = 'asc'
                }else if(sort == 2){
                    order = 'desc';
                }
                param = `${table}${column} ${order}`;
                var url = $('#page_url').val() + '&sort=' + param + '&column=' + column + '&value=' + sort + '&table=' + table;
                location.href = url;
            }
        });
    });
    /*
    * todo:处理导出excel操作
    * */
    if(typeof($('#excel')) !== 'undefined'){
        $('#excel').click(function () {
            ui.confirm('确定导出吗', function () {
                var eform = $('#excelform');
                if ($('#data').find('tr').length < 2) {
                    ui.error('没有可以导出的数据');
                    return false;
                }
                eform.html($('.excel').clone());
                eform.submit();
            });
        });
    }

Public/Model/BaseModel.class.php改动:

修改getPagegetExcel方法如下:

/**
 * todo:获取列表记录并返回分页数据
 * @param $map array 筛选条件
 * @param $order string 排序规则
 */
public function getPage($map, $order = '')
{
    $count = $this->where($map)->count();
    $page = classPage($count);
    $row['info'] = $this->where($map)->order($order)->limit($page->firstRow, $page->listRows)->select();
    $row['page'] = $page->show();
    return $row;
}

/**
 * todo:获取导出到excel的数据集合
 * @param $map array 筛选条件
 * @param $order string 排序规则
 */
public function getExcel($map,$order = '')
{
    $data = $this->where($map)->order($order)->select();
    return $data;
}

Admin/root/static/css/shop_manager.css改动:

在尾部新增(用于控制可点击th样式):

.sortable{
    cursor: pointer;
    color:orangered;
}

局部改动

controlle

在相关controller中的列表方法(通常是index)中,新增一行:

$order = $this->assembleSort($this->in['sort'], $this->in['column'], $this->in['value'], $this->in['table']);

并将之前

$data = $model->getPage($where);

改为:

$data = $model->getPage($where, $order);

在相关控制器中的导出到excel方法(通常是excel)中,做上述相同处理

view

在相关view中,修改需要排序的字段的th标签如下:

<th width="180px" data-sort="{{$sort.create_time|default=1}}" data-column="create_time" data-table="A">添加时间</th>

参数备注:

<th width="180px" data-sort="{{$sort.需要排序的字段名称|default=默认值1:当前为倒序,2:当前为顺序}}" data-column="需要排序的字段名称" data-table="如果当前列表需要通过join查询,此处为该字段所属的表别名">添加时间</th>

其它备注:

如果当前页面需要接收参数,如:配送点下面的配送元员列表,则需要在#searchForm的form中新增一个input标签:<input type="hidden" class="excel" name="point_id(参数名称)" value="(参数值)">

在所有重写了BaseModel的getPage或getExcel方法的模型中都需要做相应修改

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏钱塘大数据

理工男图解零维到十维空间,烧脑已过度,受不了啦!

让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

34830
来自专栏微信公众号:小白课代表

不只是软件,在线也可以免费下载百度文库了。

不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

44730
来自专栏腾讯高校合作

【倒计时7天】2018教育部-腾讯公司产学合作协同育人项目申请即将截止!

16220
来自专栏FSociety

SQL中GROUP BY用法示例

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

5.2K20
来自专栏腾讯社交用户体验设计

ISUX Xcube智能一键生成H5

51520
来自专栏怀英的自我修炼

考研英语-1-导学

英二图表作文要重视。总体而言,英语一会比英语二难点。不过就写作而言,英语二会比英语一有难度,毕竟图表作文并不好写。

12210
来自专栏haifeiWu与他朋友们的专栏

复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

30440
来自专栏钱塘大数据

中国互联网协会发布:《2018中国互联网发展报告》

在2018中国互联网大会闭幕论坛上,中国互联网协会正式发布《中国互联网发展报告2018》(以下简称《报告》)。《中国互联网发展报告》是由中国互联网协会与中国互联...

13750
来自专栏前端桃园

知识体系解决迷茫的你

最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

22440
来自专栏Ken的杂谈

【系统设置】CentOS 修改机器名

18330

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励