대부분의 게시판에는 < 1 2 3 4 5 6 7 8 9 > 같이 페이징 기능을 추가합니다.
CI는 페이징을 간단하게 구현할 수 있는 pagination 클래스를 제공합니다.
http://ellislab.com/codeigniter/user-guide/libraries/pagination.html
(file : system/libraries/Pagination.php)
Controller를 생성하여 다음의 코드를 입력하면 페이징 기능을 확인할 수 있습니다.
$this->load->library('pagination'); $config['base_url'] = 'http://example.com/index.php/test/page/'; $config['total_rows'] = 200; $config['per_page'] = 20; $this->pagination->initialize($config); echo $this->pagination->create_links();
라고 메뉴얼에는 나와 있지만 어설프게 따라하면 정상적으로 동작하지 않습니다.
한번 따라해 보겠습니다.
<?php class Test extends CI_Controller { function index() { $this->load->library('pagination'); $config['base_url'] = '/test/page/'; $config['total_rows'] = 200; $config['per_page'] = 20; $this->pagination->initialize($config); // $config 설정대로 페이징 초기화 echo $this->pagination->create_links(); // 페이징 생성 } } ?>
controller/test.php 파일로 저장했다면 http://domain/test 로 접속하여 페이징을 확인할 수 있습니다.
1 2 3 > last>
$config['base_url'] 는 위 링크들에 걸릴 기본 경로를 지정하는 것입니다.
/test/page/ 라고 지정했으므로 링크는 /test/page/페이지숫자 가 될 것입니다.
하지만 링크를 클릭하면 404 에러를 보게 됩니다...
숫자 2를 클릭하여 2번 페이지로 이동하려 한다면 URL은 http://domain/test/page/2 가 됩니다.
test는 클래스. page는 함수. 2는 파라미터입니다.
그런데 page라는 함수가 위에 없죠.. 그래서 404 에러가 나타난 것입니다.
다시...
http://domain/test 주소로 접속하면 http://domain/test/index 를 부르게 됩니다.
test는 클래스 index는 함수 입니다.
$config['base_url'] = '/test/index/' 로 설정한다면 페이징이 정상적으로 작동하는 것을 확인할 수 있을 것입니다.
링크 주소는 http://domain/test/index/페이지숫자 가 되겠습니다.
그럼 처음에 의도한대로 $config['base_url'] = '/test/page/' 로 구현할 수 없을까.
page 함수를 생성하면 됩니다.
function index() { $this->page(); } function page() { // pagination }
위와 같이 코딩하였다면 http://domain/test 로 접속하고 페이지 링크는 http://domain/test/page/페이지숫자 가 될 것입니다.
예를 보면 $config 배열을 재정의하고 있는 것을 확인할 수 있는데, 몇가지 중요한 것이 있습니다. 나머지는 style 들이구요.
- $config['total_rows']
총 게시물 수로 생각하면 됩니다. $config['total_rows'] / $config['per_page'] 로 연산한 만큼 페이징이 출력됩니다. - $config['per_page']
한 페이지에 출력될 게시물 수. - $config['uri_segment'] = 3
중요합니다. 여기에 지정되는 숫자는 페이징숫자의 segment와 자릿수가 같아야 합니다.
/test/page/2 라면 페이징숫자는 3번째 segment.
/board/test/page/2 라면 페이징숫자는 4번째 segment.
이것이 올바르게 지정되지 않으면 URL의 페이징 숫자가 변경이 되어도 1 페이지만 보여지는 이상 현상을 감상하실 수 있습니다.
기본값은 3 입니다. - $config['use_page_numbers'] = false
위의 예에서 페이징 링크를 확인해보면 page/ page/20 page/40 page/60... 식으로 $config['per_page']에 지정한 만큼의 offset으로 표현됩니다.
이 방식은 mysql 문의 limit x, y 에서 x의 시작점은 즉시 표현할 수 있어서 편리합니다.
하지만 기존 페이징들 처럼 page/1 page/2 page/3 page4... 식으로 표현하려면 $config['use_page_numbers'] 값을 true로 지정하면 됩니다.
숫자를 페이지 수로 사용할 것이냐, 게시물 수로 사용할 것이냐 입니다.
기본값은 false 입니다. - $config['first_url'] = ''
[처음][이전] 3 4 5 [다음][맨끝] 이라고 링크가 있을 때 [처음] 이나 1페이지를 클릭했을 때 지정될 페이징숫자를 지정합니다.
기본값은 공백이어서 [처음] 이나 1페이지를 클릭한다면 /test/page 를 표시하게 됩니다. /test/page/0 과 같은 것입니다.
$config['use_page_numbers'] 가 false 면 첫페이지는 /test/page/0 가 되고
$config['use_page_numbers'] 가 true 면 첫페이지는 /test/page/1 이 됩니다.
필요에 따라 설정할 수 있습니다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.