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
손가락귀신
정신 못차리면, 벌 받는다.

,