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);
これらの設定を適切に構成することで、検索条件を保持したページング機能を実現できます。