CodeIgniterにおける複数条件検索とページングの実装

CodeIgniterフレームワークで複数の検索条件を持つページング機能を実装する際の解決方法を紹介します。通常のページング機能と異なり、検索条件を維持しながらページングを行う必要があります。

通常のページング実装例:

$this->load->library('pagination');

$page_config['base_url'] = 'http://example.com/items/list/';
$page_config['total_rows'] = 350;
$page_config['per_page'] = 25;

$this->pagination->initialize($page_config);

echo $this->pagination->create_links();

複数条件検索ページングの実装例:

class Products extends CI_Controller {
    public function search() {
        $paging_config = array();
        $paging_config['per_page'] = 15;
        $current_page = intval($this->input->get("page_num"));
        
        $category = $this->input->get("cat", TRUE);
        $price_range = $this->input->get('price', TRUE);
        $brand = $this->input->get('brand_name', TRUE);
        
        $result_data = $this->products_model->get_filtered_data(
            $current_page, 
            $paging_config['per_page'], 
            $category, 
            $price_range, 
            $brand
        );
        
        $data['product_list'] = $result_data['items'];
        $paging_config['total_rows'] = $result_data['total_count'];
        $paging_config['num_links'] = 4;
        $paging_config['use_page_numbers'] = TRUE;
        $paging_config['page_query_string'] = TRUE;
        
        $query_params = http_build_query(array(
            'cat' => $category,
            'price' => $price_range,
            'brand_name' => $brand
        ));
        
        $paging_config['base_url'] = base_url().'products/search?'.$query_params;
        
        $this->load->library('pagination');
        $this->pagination->initialize($paging_config);
        $data['pagination_links'] = $this->pagination->create_links();
        $this->load->view("products_view", $data);
    }
}

重要な設定ポイント:

$paging_config['page_query_string'] = TRUE;

URLの構築:

$query_params = http_build_query($search_params);
$paging_config['base_url'] = base_url().'controller/method?'.$query_params;

ページングリンクの生成:

$data['pagination_links'] = $this->pagination->create_links();

データ取得メソッド:

$result_data = $this->model->get_filtered_data($offset, $limit, $filters);

これらの設定を適切に構成することで、検索条件を保持したページング機能を実現できます。

タグ: codeigniter PHP ページング 検索機能 データベースクエリ

6月9日 19:23 投稿