2015-01-21 2 views
0

쿼리 문자열을 사용하여 Codeigniter 페이지 매김을 구현하려고하지만이 문제가 몇 개 있습니다. 나는 매김에 대한 쿼리 문자열을 사용하는 그래서 쿼리 문자열을 사용하는 Codeigniter 페이지 매김

$config['page_query_string'] = TRUE; 

에 전환했지만 지금까지 내가 이것을 볼 수 정말 당신이 컨트롤러 및 방법 라우팅을 위해 쿼리 문자열을 사용하는 경우 일 것입니다. 그러나 내 경우에는 여전히 라우팅을 위해 URI 세그먼트를 사용하고 있지만 페이지 매김, 결과 필터링, 검색 등을 위해 쿼리 문자열을 사용하려고합니다. http_build_query()를 사용하여 URL을 다시 생성하면 쿼리 문자열이 전달되어 per_page (나는 오프셋으로 이름을 바꾼다.) 첫 번째 페이지 이후의 페이지 매김 링크에 두 번 쓸 수있다. 그 이유는 쿼리 문자열을 다시 만들 때 오프셋은 후속 페이지의 $ _GET에 이미 있고 CI는이 태그를 두 번 표시하도록 추가하기 때문입니다. 아래의 코드에서는 $ _GET에서 원래 per_page 쿼리 문자열을 제거 했으므로 쿼리 문자열을 다시 작성하지 않고 CI가 create_links() 페이지 매김 중에이를 추가합니다. 나는 이것이 의미가 있는지 또는 이것을 다루는 더 깨끗한 방법이 있는지 확인하고 싶었다.

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

// set pagination base url 
$config['base_url'] = base_url('accounting/bank/reconcile-account1/account/' . $bank_account_id) . '/?'; 

// assign current $_GET parameters to local variable as we need to remove offset each time we rebuild query 
// string otherwise it gets appended twice to url 
$get = $_GET; 

// unset the offset array item 
unset($get['offset']); 

// build first url link 
$config['first_url'] = base_url('accounting/bank/reconcile-account1/account/' . $bank_account_id) . '/?' . http_build_query($get); 

// if $get contains items then build these back onto the url 
if (count($get) > 0) $config['suffix'] = '&' . http_build_query($get); 

// set the total number of rows 
$config['total_rows'] = $result['total_num_txns']; 

// set the number of items per page 
$config['per_page'] = $filter->limit; 

// initialise the pagination config 
$this->pagination->initialize($config); 
+0

왜 라우터를 사용하지 않고 쿼리 문자열을 사용하고 있습니까? 나는 당신이 달성하고자하는 것에 대해 조금 확신하지 못합니다. 간단한 해결책은 라우터를 사용하는 것이지만 과부하로 말하면, 메소드에 기본값을 전달하여이 작업을 수행 할 수 있습니다. 브라우저에서 uri를 숨기려면 ajax를 통해 메소드를 호출하십시오. – Philip

+0

과거에는 URL 끝에 페이지 당 항목 수가 항상 추가되는 uri 세그먼트를 사용할 때 문제가 발생했습니다. 검색 매개 변수를 키 쌍으로 보내려면 uri_to_assoc을 단일 URI 세그먼트로 사용하고/per_page/10으로 처리하지 않으므로 Codeigniter에서 url 끝에 붙이는 페이지 당 값을 키로 처리합니다. –

답변

1

페이지 매김 라이브러리의 버전 CodeIgniter 3.0을 사용하십시오. 질의 문자열을 재사용하는 설정 옵션이 있습니다.

저는 CodeIgniter 2에서 직접 구현했지만 배포 된 버전을 대체하기보다는이를 MY_Pagination이라는 오버로드 라이브러리로 배포하고이를 'application/libraries'폴더에 저장했습니다. 이 방법으로이 작업을 수행하기 위해해야 ​​할 유일한 코드 변경은 액세스 수정자를 보호되지 않고 공개로 설정하는 것이 었습니다.

+0

CI3 변경 로그에서 확인했습니다. 이것 좀보세요. –