pagination

Programming/CodeIgniter 2013. 6. 12. 00:18

대부분의 게시판에는 < 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
손가락귀신
정신 못차리면, 벌 받는다.

,