用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3432|回复: 5
收起左侧

[讨论/交流] 关于我的复合搜索的分页

[复制链接]
发表于 2010-4-5 13:32:25 | 显示全部楼层 |阅读模式
本帖最后由 helingjun2008 于 2010-4-5 13:39 编辑

看了很多的搜索的分页,很多的都是通过URL来传递要搜索的关键字,但是这样一来,就不好定位分页的页码到底是哪一个参数,由于本人水平有限,php的函数很多都不知道,于是想到了用session来传递,搜索的关键字,代码如下.


先是控制器,控制器很简单:


   

PHP复制代码
function Show_list($data='no') {//显示列表
   $this->load->model('Cangku_m');
   $rowarray=$this->Cangku_m->cangkulist($data);
   $links=$this->Cangku_m->links;
   $this->load->view('show_list',array('rowarray'=>$rowarray,'links'=>$links,'title'=>'库存列表'));
复制代码
然后是模型:


        

PHP复制代码
function cangkulist($data) {
  if($data=='no') {
     $data=array();
     $str='/no';
     $this->session->unset_userdata('seach');
        }
         if($this->input->post('seach')=='true') {
   $data=array(
     'id'=>$this->input->post('id'),
     'pinpai'=>$this->input->post('pinpai'),
     'xinghao'=>$this->input->post('xinghao'),
     'shuliang'=>$this->input->post('shuliang'),
     'shoujia'=>$this->input->post('shoujia'),
     'cangku'=>$this->input->post('cangku'));
    $this->session->set_userdata('seach',urlencode(json_encode($this->gbkenurl($data))));
    $str='/seach';
              }
     if($data=='seach'){
    $data=json_decode(urldecode($this->session->userdata('seach')),true);
    $data=get_object_vars($data);
    $data=$this->gbkdeurl($data);
                $str='/seach';
          }
  foreach($data as $key=>$val) {
   if(!$val='') {
    if($key=='id') $this->db->where('id',$val) ;
    if($key=='pinpai') $this->db->like('pinpai',$val) ;
    if($key=='xinghao') $this->db->like('xinghao',$val) ;
    if($key=='shuliang') $this->db->where('shuliang',$val) ;
    if($key=='shoujia') $this->db->where('shoujia',$val) ;
    if($key=='cangku') $this->db->where('cangku',$val) ;
   }
  }
 
  $this->load->library('pagination');
  $config['base_url']=site_url('./cangku/show_list'.$str);
  $this->db->from('cangku');
  $config['total_rows']=$this->db->count_all_results();
  $config['per_page']=20;
  $config['uri_segment']=4;
  $config['first_link']='首页';
        $config['last_link']='末页';
        $config['next_link']='下一页';
        $config['prev_link']='上一页';
  $this->pagination->initialize($config);
  foreach($data as $key=>$val) {
   if(!$val='') {
    if($key=='id') $this->db->where('id',$val) ;
    if($key=='pinpai') $this->db->like('pinpai',$val) ;
    if($key=='xinghao') $this->db->like('xinghao',$val) ;
    if($key=='shuliang') $this->db->where('shuliang',$val) ;
    if($key=='shoujia') $this->db->where('shoujia',$val) ;
    if($key=='cangku') $this->db->where('cangku',$val) ;
   }
  }
  $this->db->order_by("id", "desc");
        $query=$this->db->get('cangku',$config['per_page'],$this->uri->segment(4));
  $this->links=$this->pagination->create_links();
  Return $query->result_array();
    }
function gbkenurl($data) {
  foreach($data as $key=>$val) {
   $data[$key]=urlencode($val);
  }
  Return $data;
    }
function gbkdeurl($data) {
  foreach($data as $key=>$val) {
   $data[$key]=urldecode($val);
  }
  Return $data;
}
复制代码


由于服务器上用的是gbk的字符,而且是php4,所以要在把中文放入json之前做urlencode ,


大概的代码就是这样,另外在搜索的表单里面做一个,隐藏的seach字段,值为true,还有我的session是存在数据库里,方法虽然笨了点,但是,算解决了我的问题,


欢迎大家,指出其中的不足,

 楼主| 发表于 2010-4-5 13:32:59 | 显示全部楼层
晕,代码要怎么放到,代码框里呢.
发表于 2010-4-5 17:00:34 | 显示全部楼层
本帖最后由 ywqbestever 于 2010-4-5 17:02 编辑

哈哈,以前搞ASP的时候也是用session,现在不用了,asp上也写了个累死CI的分页类,用get也蛮好的,嘿嘿,主要有的用户打开网页在那要是过了好长时间回来继续翻页,条件不是掉了???
可以看看我改的那个分页嘛,很简单哈
http://codeigniter.org.cn/forums/thread-4936-1-1.html
 楼主| 发表于 2010-4-5 18:45:01 | 显示全部楼层
ci 的session好像有两个小时吧,应该够用了,你的我也看一下,呵呵
发表于 2010-4-6 15:29:06 | 显示全部楼层
用session有一个问题,如果你想把搜索结果的页面给别人看,网址上是体现不出来搜索内容的。

我用的方法是www.example.com/参数名1/值/参数名N/值/page/页码值

这样虽然难看了些,也长了些,而且已经和一般的GET非常相似的了,但我仍然觉得这是适合我的最好的办法了。。。。
发表于 2012-11-8 17:08:22 | 显示全部楼层
{:soso__6126156967103389352_3:},啊

本版积分规则