您的位置:首页 > 编程语言 > PHP开发

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

2017-08-18 16:55 309 查看
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条件数组中,如下显示:
$count=
$User->where($map)->count();//
查询满足要求的总记录数
$Page=new\Think\Page($count,25);//实例化分页类 传入总记录数和每页显示的记录数//分页跳转的时候保证查询条件
foreach($mapas$key=>$val){
$Page->parameter[$key]=urlencode($val);}$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属于弱类型的语言,可能在某些情况下不会出现错误,在其他情况下可能就出现了问题,所以一定要遵守语法规范。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: