CI 코드

제목 커스텀 페이지네이션 라이브러리
글쓴이 슘님 작성시각 2014/06/16 17:13:10
댓글 : 9 추천 : 2 스크랩 : 0 조회수 : 29120   RSS
불의회상님이 패치하신 고정형 페이지네이션 라이브러리를 참고하여
몇 가지 옵션을 추가하였습니다. (덤으로 약간의 버그 수정...^^;)
 
// 사용 예 (기존의 pagination과 동일하여 필요할 경우 아래의 옵션만 추가해주면 됩니다.
$config['display_always'] = TRUE;		
$config['use_fixed_page'] = TRUE;
$config['fixed_page_num'] = 10;
​		
$config['display_first_always'] = FALSE;
$config['display_first_always'] = FALSE;
$config['disable_first_link'] = TRUE;
$config['disable_last_link'] = TRUE;
$config['display_prev_always'] = TRUE;
$config['display_next_always'] = TRUE;
$config['disable_prev_link'] = TRUE;
$config['disable_next_link'] = TRUE;
* 기존 라이브러리와의 호환을 위해 추가된 옵션의 default value는
display_first_always, display_last_always만 TRUE고 그 외에는 모두 FALSE로 설정되어 있습니다.

- display_always
: page가 하나더라도 페이지네이션을 보여줍니다. (기존에는 보여주지 않음)

- use_fixed_page 
: 항상 고정된 수만큼 페이지를 보여줍니다. fixed_page_num와 연동됩니다. 
e.g. $config['fixed_page_num'] = 10; 으로 설정하면 항상 페이지를 10개씩 보여줍니다. 
즉, First < 1 2 3 4 5 6 7 8 9 10 > Last
(fixed_page_num보다 전체 페이지수가 작을 경우 전체 페이지수만큼만 보여줍니다.)

- disable_first_link
: TRUE로 설정 시 현재 페이지가 첫 페이지라면 first 링크를 비활성화 시킵니다.
* 만약 링크 비활성화에 대한 CSS를 사용하신다면 disabled_first_tag_open, disabled_first_tag_close 옵션을 사용하세요.
$config['disabled_first_tag_open'] = "<div class='btn-pagination inactive'>";
$config['disabled_first_tag_close'] = "</div>";

* 만약 first 링크를 숨기고 싶다면 $config['first_link'] = FALSE; 로 설정하세요. 

- disable_last_link
: TRUE로 설정 시 현재 페이지가 마지막 페이지라면 last 링크를 비활성화 시킵니다.
* 만약 링크 비활성화에 대한 CSS를 사용하신다면 disabled_last_tag_open, disabled_last_tag_close 옵션을 사용하세요.
* 만약 last 링크를 숨기고 싶다면 $config['last_link'] = FALSE; 로 설정하세요. 

- display_first_always
: FALSE로 설정 시 현재 페이지가 첫 페이지일 경우 first 링크를 보여주지 않습니다.
(기존에는 first 링크를 항상 보여줍니다.)

- display_last_always
: TRUE로 설정 시 현재 페이지가 마지막 페이지일 경우 last 링크를 보여주지 않습니다.
(기존에는 last 링크를 항상 보여줍니다.)

- disable_prev_link
: TRUE로 설정 시 현재페이지가 첫 페이지라면 first 링크를 비활성화 시킵니다.
* 만약 링크 비활성화에 대한 CSS를 사용하신다면 disabled_prev_tag_open, disabled_prev_tag_close 옵션을 사용하세요.

- disable_next_link
: TRUE로 설정 시 현재페이지가 첫 페이지라면 last 링크를 비활성화 시킵니다.
* 만약 링크 비활성화에 대한 CSS를 사용하신다면 disabled_next_tag_open, disabled_next_tag_close 옵션을 사용하세요.

- display_prev_always
: TRUE로 설정 시 현재 페이지가 첫 페이지라도 prev 링크를 보여줍니다.
(기존에는 현재 페이지가 첫 페이지인 경우 prev 링크를 보여주지 않습니다.)

- display_next_always
: TRUE로 설정 시 현재 페이지가 마지막 페이지라도 next 링크를 보여줍니다.
(기존에는 현재 페이지가 마지막 페이지인 경우 next 링크를 보여주지 않습니다.)
태그 pagination,페이징,페이지네이션
첨부파일 MY_Pagination.zip (2.4 KB)
 다음글 ci 3.0 pagination fixed num_li... (4)
 이전글 Elastic Search엔진 CI 라이브러리 입니다. (4)

댓글

변종원(웅파) / 2014/06/16 17:30:44 / 추천 0
와우~ 감사합니다.

포럼이 바람직한 방향으로 잘 가고 있어요. ^_______^
한대승(불의회상) / 2014/06/17 09:22:42 / 추천 0
슘님// 수고 하셨습니다. ^^
darkninja / 2014/06/27 12:52:47 / 추천 0
    /**
     * Constructor
     *
     * @param    array    $params    Initialization parameters
     * @return    void
     */
    public function __construct($params = array())
    {
        parent::__construct($params); // pagination config 설정을 적용함. 

        // 생성자에게 정보를 전달하지 않으면 아래 변수를 설정.
        //$this->use_page_numbers = TRUE; // Use page number for segment instead of offset
    }

OTL 왜 안되지 왜 다들 말이 없을까 왜 또 까먹었을까 쩝
lzao / 2014/06/30 10:22:27 / 추천 0
$config['use_fixed_page'] = TRUE;
$config['fixed_page_num'] = 10;
를 사용하고 싶은데 그냥 선언만 해서는 안되나요?
슘님 / 2014/06/30 10:29:10 / 추천 0
lzao// $config['display_always'] = TRUE; 도 선언해 보세요.
CI 페이지네이션은 페이지가 1개일 경우 페이지 링크를 생성하지 않습니다.
위의 옵션은 페이지가 1개이더라도 무조건 페이지 링크를 보여주는 옵션입니다.
lzao / 2014/06/30 10:35:08 / 추천 0
        $this->load->library('pagination');
        
        $config['base_url']    = $data['url'];
        $config['total_rows']  = $data['num'];
        
        if (isset($_POST['limit']) && $_POST['limit'] != "" ) {
            $config['per_page'] = $_POST['limit'];
        } else {
            $config['per_page']    = 10;
        }
        
        $config['uri_segment'] = 4;
//         $config['num_links']   = 5;
        $config['display_always'] = TRUE;      
        
        $config['display_always'] = TRUE;
        $config['use_fixed_page'] = TRUE;
        $config['fixed_page_num'] = 10;

        $config['next_link']   = '다음';
        $config['prev_link']   = '이전';
        
        $config['full_tag_open']  = '<div id="pagination">';
        $config['full_tag_close'] = '</div>';
        
        $config['anchor_class'] = 'class="last"';
        $config['last_link']    = FALSE;
        $config['first_link']   = FALSE;
        $config['use_page_numbers'] = TRUE;
        
        $this->pagination->initialize($config);
        $data['page_str'] = $this->pagination->create_links();
        
        $page = $this->uri->segment(4,1);
        
        if (@$_POST['page1']) {
            $page = $_POST['page1'];
        } else {
            $page = 1;
        }
        
        if ($page < 1) {
            $page = 1;
        }
        
        $data['page'] = $page;
        
        if (isset($_POST['limit']) && $_POST['limit'] != "" ) {
            $param['limit'] = $_POST['limit'];
            $data['per_page'] = $_POST['limit'];
        } else {
            $param['limit'] = $config['per_page'];
            $data['per_page'] = $config['per_page'];
        }
        
        if ($page > 1) {
            $param['start'] = (($page/$config['per_page'])) * $config['per_page'];
        } else {
            $param['start'] = ($page - 1) * $config['per_page'];
        }

이런식으로 페이지네이션 부분을 선언해줬는데 안되네요... 따로 업데이트나 그런게 필요한가요?
슘님 / 2014/06/30 10:43:34 / 추천 0
lzao//
혹시 제가 업로드한 MY_Pagination.php파일을 $CI_PATH/$APP_PATH/libraries 폴더에 복사하셨는지요?
config.php에서 확장 코어/라이브러리/헬퍼 등의 subclass_prefix 설정은 잘 맞춰 주셨는지요?
(어떤 상황인지 정확히 몰라 질문 드립니다. 라이브러리 파일만 복사하면 별다른 설정은 불필요하거든요.)
lzao / 2014/06/30 10:50:42 / 추천 0
파일을 못보고 그냥 선언만 했네요 됩니다 ^^ 감사합니다
darkninja / 2014/06/30 11:55:48 / 추천 0
 public function __construct($params = array())
 {
  if (count($params) > 0)
  {
   $this->initialize($params); // 설정을 변수로 추가함.
  }

  if ($this->anchor_class != '')
  {
   $this->anchor_class = 'class="'.$this->anchor_class.'" ';
  }

  log_message('debug', "Pagination Class Initialized");
 }

application/config/Pagination.php <= 페이지네이션 기본 설정은 여기에 해두시면
페이지네이션 로드할때 위에 생성자부분에서 자동으로 읽어들입니다.