ThinkPHP分页丢失参数的解决办法

来源:互联网 发布:python运维脚本优势 编辑:程序博客网 时间:2024/06/05 19:17

Controller类里接收的参数如下:

$cat=(int)I("cat");

$navID=(int)I("navID");


$lists=M("users_liverecord l")

->field("u.user_nicename,u.avatar,u.id,a.title as course_name,a.content,l.*")
->join("left join {$prefix}users u on u.id=l.uid")
->join("left join {$prefix}apply_records a on l.applyid=a.id")
->where($map)
->where("l.isdisplay=1 and l.islive=0 and l.type=0")
->order("l.endtime desc")
->select();


//var_dump($lists);
$video=M("users_liverecord")
->where("type=1 and isdisplay=1")
->where($mas)
->select();


foreach($video as $k=>$vo){
$userinfo=M("users")->field("user_nicename,avatar")->where("id='{$vo['uid']}'")->find();
$video[$k]['user_nicename']=$userinfo['user_nicename'];
$video[$k]['avatar']=$userinfo['avatar'];
$video[$k]['course_name']=$vo['video_name'];
$video[$k]['content']=$vo['video_conn'];
}


$hebing= array_merge($video, $lists);
foreach($hebing as $k=>$v){
             $order1[$k]=$v['showid'];
        }
            /* 排序 */
        array_multisort(SORT_DESC, $hebing); //推荐倒序 点亮倒序 开播时间倒序


  $count=count($hebing);


        $Page=new \Common\Lib\Page3($count,$pageSize,array("cat"=>$cat,"navID"=>$navID));

        $show = $Page->show();// 分页显示输出


$hebing_fen=array_slice($hebing,$Page->firstRow,$Page->listRows);


$info=M("demand_classify")->where("id='{$cat}'")->find();


if($info['uid']>0){


$info1=M("demand_classify")->where("id='{$info['uid']}'")->find();


$title=$info1['name']."-".$info['name'];


}else{


$title=$info['name'];
}




$this->assign('lists',$hebing_fen);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->assign('current',$navID);
$this->assign('title',$title);


通过以上代码,我们发现,上面是通过联合查询,将两个数组合并成了一个数组。

官方手册里的分页带参数是把参数放在了where条件数组中,如下显示:


  1. $count= $User->where($map)->count();// 查询满足要求的总记录数

  2. $Page=new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数

  3. //分页跳转的时候保证查询条件

  4. foreach($mapas $key=>$val){

  5. $Page->parameter[$key]= urlencode($val);

  6. }

  7. $show= $Page->show();// 分页显示输出

很明显,这种方式在此行不通。所以我们要另找别的方法。

通过上面的分页操作,我们发现,是通过调用Page3这个分页类传递的参数,所以,我们要先从Page3分页类看起。

通过application/Common/Lib路径找到Page3类,通过分析Page3类,我们发现Page3类是可以接收数组作为参数列表的,所以,我们在调用Page3类的时候,先把需要分页传递的参数已数组的形式传递给Page3类。如上面代码里标红的部分。



那么,我们继续往下找,发现在show方法中,它调用了U方法来处理参数列表,并返回了url,如下图:


首先,我们把url打印一下,发现,之前传递的参数没有啦,那么,我们就知道,肯定是U方法里处理参数时出现了问题。所以,我们要从U方法里找问题。

通过以下地址,我们找到U方法:

/simplewind/Core/Common/functions.php

首先看参数列表注释


$vars是参数列表的形参。那么,我们在U方法内找$vars的相关操作。

这时,我们可以采用print_r();die;的方式对$vars相关的操作语句进行逐步打印查看。

这时,我们发现,在手动拼接链接地址的地方出现了问题,造成了参数丢失。

所以,我们对此处做如下的修改:


加上如上的代码,就不会出现参数丢失的问题了。

总结:出现问题时,不要着急,按照参数的调用,一步一步查找,及时打印数据看变化,就能找到出问题的地方。

语法规范一定要遵守,因为PHP属于弱类型的语言,可能在某些情况下不会出现错误,在其他情况下可能就出现了问题,所以一定要遵守语法规范。

原创粉丝点击