helingjun2008 发表于 2010-4-5 13:32:25

关于我的复合搜索的分页

本帖最后由 helingjun2008 于 2010-4-5 13:39 编辑

看了很多的搜索的分页,很多的都是通过URL来传递要搜索的关键字,但是这样一来,就不好定位分页的页码到底是哪一个参数,由于本人水平有限,php的函数很多都不知道,于是想到了用session来传递,搜索的关键字,代码如下.
先是控制器,控制器很简单:
    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'=>'库存列表'));然后是模型:
         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是存在数据库里,方法虽然笨了点,但是,算解决了我的问题,
欢迎大家,指出其中的不足,

helingjun2008 发表于 2010-4-5 13:32:59

晕,代码要怎么放到,代码框里呢.

jeongee 发表于 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

helingjun2008 发表于 2010-4-5 18:45:01

ci 的session好像有两个小时吧,应该够用了,你的我也看一下,呵呵

lzyname 发表于 2010-4-6 15:29:06

用session有一个问题,如果你想把搜索结果的页面给别人看,网址上是体现不出来搜索内容的。

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

这样虽然难看了些,也长了些,而且已经和一般的GET非常相似的了,但我仍然觉得这是适合我的最好的办法了。。。。

肖佛頌 发表于 2012-11-8 17:08:22

{:soso__6126156967103389352_3:},啊
页: [1]
查看完整版本: 关于我的复合搜索的分页