pagination 클래스를 사용하여 간단한 페이징 구현을 하였습니다.
$config['base_url']에 지정한 대로 /path/page/no 식으로 링크가 생성되었습니다.
페이징을 사용하는, 예를 들어 게시판에 대한 페이징을 구현하고자 할 때 쿼리스트링은 아래와 유사합니다.
list.php?page=10&sfl=name&stx=keyword&sort=code&sc=asc
페이지, 검색필드, 검색어, 정렬필드, 정렬방법...
이런것들이 uri 에 포함되게 되는데 세그먼트 방식으로 다시 작성해 보겠습니다.
list/page/10/sfl/name/stx/keyword/sort/code/sc/asc
기존 pagination 클래스를 그대로 사용할 경우 페이지 링크에 page/no 뒤의 모든 세그먼트(/sfl~)는 사라집니다.
이를 해결하려면 page/no 뒤의 모든 세그먼트를 저장하고 페이지 링크 뒤에 추가해 주면 되겠습니다.
그러기 위해 system/libraries/Pagination.php 클래스 파일을 약간 수정해야 합니다.
* file : system/libraries/Pagination.php
class CI_Pagination { // page/no 뒤의 세그먼트를 저장할 변수 선언 var $add_segment = ''; // href 로 검색하여 링크 마지막에 .$add_segment 추가 : 6개 정도 $output .= $this->first_tag_open.'<a '.$this->anchor_class.'href="' .$this->base_url.$this->first_url.$this->add_segment.'">'.$this->first_link .'</a>'.$this->first_tag_close; }
이렇게 pagination 을 변경했으면 컨트롤러에서 $config['add_segment'] 에 page/no 뒤의 세그먼트만 저장해 주면 완성입니다.
$seg_split = preg_split("/page\/[0-9]*/", $this->uri->uri_string() ); //uri에 /page/숫자 부분이 있다면 $next_seg[1]에 page/no 뒤의 세그먼트가 저장될 것입니다. if ( isset($seg_split[1]) ) { $config['add_segment'] = $seg_split[1]; }
이렇게 되면 list/page/10/sfl/name/stx/keyword/sort/code/sc/asc 주소에서 페이징을 클릭하면
page/숫자만 변경되는 것을 확인할 수 있습니다.
system 디렉토리의 소스들을 직접 변경하는 건 좋은 방법이 아니므로 application/libraries 에
class MY_Pagination extends CI_Pagination 식으로 확장하여 사용하는 것이 좋습니다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.