在 codeigniter 上搜索和分页

Posted

技术标签:

【中文标题】在 codeigniter 上搜索和分页【英文标题】:search and pagination on codeigniter 【发布时间】:2012-12-03 05:41:21 【问题描述】:

伙计们

我尝试使用分页创建搜索。我可以做到,当我转到第二页时没有问题,但是当我转到第三页时数据丢失。 请帮我。这是我的控制器代码:

function fast_search() 

    $data = array(
        'reason'           => $this->input->post('reason'),
        'shahr'            => $this->input->post('shahr'),
        'file_type'        => $this->input->post('file_type'),
        'region'           => $this->input->post('region'),
        'neighbourhood'    => $this->input->post('neighbourhood'),
        'under_build_area' => $this->input->post('under_build_area'),
        'user_type'        => $this->input->post('user_type')
    );

    $this->session->set_flashdata($data);

    /*-------------------------------------------------------*/
    $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;

    if ($page == 0) 
    
        $config = array();
        $config['base_url']    = base_url() . 'file/fast_search/page';
        $config['per_page']    = 9;
        $config['uri_segment'] = 4;
        $config['total_rows']  = count($this->file_model->fast_search($data));
        $this->pagination->initialize($config);

        $data['results'] = $this->file_model->fast_search($data, $config['per_page'], $page);
        $data['links']   = $this->pagination->create_links();

     else 

        $this->session->keep_flashdata('reason');
        $this->session->keep_flashdata('shahr');
        $this->session->keep_flashdata('file_type');
        $this->session->keep_flashdata('region');
        $this->session->keep_flashdata('neighbourhood');
        $this->session->keep_flashdata('under_build_area');
        $this->session->keep_flashdata('user_type');

        $result_data = array(
            'reason'           => $this->session->flashdata('reason'),
            'shahr'            => $this->session->flashdata('shahr'),
            'file_type'        => $this->session->flashdata('file_type'),
            'region'           => $this->session->flashdata('region'),
            'neighbourhood'    => $this->session->flashdata('neighbourhood'),
            'under_build_area' => $this->session->flashdata('under_build_area'),
            'user_type'        => $this->session->flashdata('user_type')
        );

        $config = array();
        $config['base_url']    = base_url() . 'file/fast_search/page';
        $config['per_page']    = 9;
        $config['uri_segment'] = 4;
        $config['total_rows']  = count($this->file_model->fast_search($result_data));
        $this->pagination->initialize($config);

        //$this->dvd($result_data);
        $data['results'] = $this->file_model->fast_search($result_data, $config['per_page'], $page);
        $data['links']   = $this->pagination->create_links();
    

    /*-------------------------------------------------------*/

    //$this->dvd($data['links']);

    if ($data['results'] != FALSE) 
    
        $data['agency_nums']      = $this->user_model->get_registered_agency();
        $data['updated_agencies'] = $this->user_model->get_uplated_agencies();
        $data['count_files']      = $this->file_model->count_files();

        $this->load->view('fast_search', $data);
        //return $data;
     else 
        $data['error']            = 'No Result !';
        $data['agency_nums']      = $this->user_model->get_registered_agency();
        $data['updated_agencies'] = $this->user_model->get_uplated_agencies();
        $data['count_files']      = $this->file_model->count_files();
        $this->load->view('fast_search', $data);
    

我使用会话功能,例如: $this->session->set_flashdata($data); $this->session->keep_flashdata('reason');

【问题讨论】:

我建议使用set_userdata() 而不是flashdata()。这样,您将在每个页面请求上都有搜索变量,而无需使用 keep_flashdata() 【参考方案1】:

嗨,我真的很喜欢 net.tuts 的这个关于 CI 搜索的教程,它非常好,你不需要使用会话来保存和检索搜索数据,你需要扩展你的输入类,它会保存关键字和搜索条件在数据库中为您和您可以在分页中使用的已保存记录提供 ID 看看这个非常棒的教程

CI search and pagination

【讨论】:

【参考方案2】:

如果您在点击下一页时将会话设置为 null,因为 $data 没有数据(帖子仅发送一个),我认为您必须设置为这样的条件

    $is_search =  $this->input->post('search'); // name button search
    if (!array_filter($data) && $is_search===false)  // check array is empty and no search value (only submit form have search name)
           $data = array(
                 'reason'           => $this->session->userdata('reason'),
                 'shahr'            => $this->session->userdata('shahr'),
                 'file_type'        => $this->session->userdata('file_type'),
                 'region'           => $this->session->userdata('region'),
                 'neighbourhood'    => $this->session->userdata('neighbourhood'),
                 'under_build_area' => $this->session->userdata('under_build_area'),
                 'user_type'        => $this->session->userdata('user_type')
           );
     else 
           $this->session->set_userdata( $data ); // create new session
    
/*-------------------------------------------------------*/
    $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;

【讨论】:

以上是关于在 codeigniter 上搜索和分页的主要内容,如果未能解决你的问题,请参考以下文章

使用服务器端时搜索和分页不起作用

Jquery 移动搜索和分页

在codeigniter中搜索所有分页链接的分页

使用动态数据时,搜索和分页功能在 DataTable 中不起作用

核心数据和分页

如何在codeigniter中执行排序、搜索、分页