제목 | 페이지네이션 라이브러리 입니다. | ||
---|---|---|---|
글쓴이 | 천재작곡가 | 작성시각 | 2016/12/30 15:06:43 |
|
|||
페이지네이션 라이브러리입니다. 페이지네이션 stirng 형식이 아닌 배열 형태로 반환합니다.
뷰단에서 javascript로 사용할때 퍼블리셔분이 자유자재로 사용하게 하기위해서 만들었습니다 혹시나 쓰실분있나해서 공유합니다.
application/libraries/Paging.php
<?php class Paging { protected $CI; protected $page = 1; // 현재 페이지 protected $base_url = ""; // 기본 URL protected $page_rows = 10; // 한번에 표시할 목록 수 protected $total_rows = 0; // 총 행수 protected $fixed_num = 10; // 한번에 표시할 페이지 수 protected $add_param = array(); // 추가 패러미터 (배열형식) protected $page_variable = "page"; // 페이지 패러미터 이름 const PAGE_TYPE_FIRST = "FIRST"; const PAGE_TYPE_PREV = "PREV"; const PAGE_TYPE_NUMBER = "NUMS"; const PAGE_TYPE_NEXT = "NEXT"; const PAGE_TYPE_LAST = "LAST"; /** * 생성자 * Paging constructor. * @param array $param */ function __construct($param = array()) { $this->CI =& get_instance(); $this->initialize($param); } /** * 변수 설정 * @param array $params * @return $this */ public function initialize(array $params = array()) { foreach ($params as $key => $val) { if (property_exists($this, $key)) { $this->$key = $val; } } return $this; } public function create() { $return = array(); // 만약 총 Rows가 0이거나, 한줄당 표시가 0 인경우는 return 한다. if ($this->total_rows == 0 OR $this->page_rows == 0) return array(); // 총 몇페이지가 나올지 계산한다 $num_pages = (int) ceil($this->total_rows / $this->page_rows); // 한번에 표시할 페이지수를 체크한다. $this->fixed_num = (int) $this->fixed_num; if ($this->fixed_num < 0) return array(); // 앞부분링크 URL을 만든다. $this->base_url = trim($this->base_url); // 만약 현재 페이지가 전체 페이지보다 많다면 현재페이지는 전체페이지로 바꾼다. $this->page = ($this->page > $num_pages) ? $num_pages : $this->page; // 현재 페이지가 1보다 작으면 1로 바꾼다. $this->page = (int)$this->page < 1 ? 1 : $this->page; // add_param 중 page 키값이 들어잇을경우 삭제한다. if( isset($this->add_param[$this->page_variable]) ) unset($this->add_param[$this->page_variable]); // 시작과 종료 페이지 번호를 얻어온다. $start = (ceil($this->page / $this->fixed_num) - 1) * $this->fixed_num + 1 + 1; $end = (ceil($this->page / $this->fixed_num) == ceil($num_pages / $this->fixed_num)) ? $num_pages : ceil($this->page / $this->fixed_num) * $this->fixed_num; $this->add_param = (is_array($this->add_param) && count($this->add_param) > 0) ? array_merge(array( $this->page_variable=>1), $this->add_param) : array(); // 첫페이지를 만든다. $this->add_param[$this->page_variable] = 1; $return[] = array( "type" => self::PAGE_TYPE_FIRST, "enabled" => ($this->page > 1), "page" => 1, "link" => $this->base_url . "?" . http_build_query($this->add_param) ); // 이전페이지를 만든다. $prev = ($this->page == 1 ) ? 1 : $this->page - 1; $this->add_param[$this->page_variable] = $prev; $return[] = array( "type" => self::PAGE_TYPE_PREV, "enabled" => ($this->page > 1), "page" => $prev, "link" => $this->base_url . "?" . http_build_query($this->add_param) ); // 각 페이지를 만든다. for($loop = $start -1; $loop <= $end; $loop++ ) { $this->add_param[$this->page_variable] = $loop; $return[] = array( "type" => self::PAGE_TYPE_NUMBER, "enabled" => ($this->page != $loop), "page" => $loop, "link" => $this->base_url . "?" . http_build_query($this->add_param) ); } // 다음 페이지를 만든다. $next = ($this->page == $num_pages) ? $num_pages : $this->page + 1; $this->add_param[$this->page_variable] = $next; $return[] = array( "type" => self::PAGE_TYPE_NEXT, "enabled" => ($this->page != $num_pages), "page" => $next, "link" => $this->base_url . "?" . http_build_query($this->add_param) ); // 마지막 페이지를 만든다. $this->add_param[$this->page_variable] = $num_pages; $return[] = array( "type" => self::PAGE_TYPE_LAST, "enabled" => ($this->page != $num_pages), "page" => $num_pages, "link" => $this->base_url . "?" . http_build_query($this->add_param) ); return $return; } }
실제 사용 $paging = array( "page" => $this->input->get('page', TRUE), // 현재 페이지 "page_rows" => 10, // 한페이지에 표시할 행수 "total_rows" => $total_rows, // 총 행수 "fixed_num" => 5, // 한번에 표시할 페이지 "base_url" => current_url(), // 표시할 페이지 URL "add_param" => $this->input->get() // 추가패러미터 배열 ); $this->load->library('paging', $paging); $pagination = $this->paging->create();
반환된 결과 array( array( "type" : 타입입니다. ( FIRST, PREV, NUMS, NEXT, LAST ) 로 반환 "enabled" TRUE or FALSE 로 반환 ( NUMS가 아닌 타입중 사용되지 않는 경우는 FALSE를 리턴합니다. ) "current" : NUMS 타입에서 현재페이지의 경우 TRUE를 반환합니다. "page" 해당되는 페이지입니다. "link" base_url 과 add_param 을 기반으로 생성한 링크입니다. ), array( ), ..... )
반환 예시 Array ( [0] => Array ( [type] => FIRST [enabled] => 1 [current] => [page] => 1 [link] => http://127.0.0.1/admin/members/lists?page=1 ) [1] => Array ( [type] => PREV [enabled] => 1 [current] => [page] => 8 [link] => http://127.0.0.1/admin/members/lists?page=8 ) [2] => Array ( [type] => NUMS [enabled] => 1 [current] => [page] => 6 [link] => http://127.0.0.1/admin/members/lists?page=6 ) [3] => Array ( [type] => NUMS [enabled] => 1 [current] => [page] => 7 [link] => http://127.0.0.1/admin/members/lists?page=7 ) [4] => Array ( [type] => NUMS [enabled] => 1 [current] => [page] => 8 [link] => http://127.0.0.1/admin/members/lists?page=8 ) [5] => Array ( [type] => NUMS [enabled] => 1 [current] => 1 [page] => 9 [link] => http://127.0.0.1/admin/members/lists?page=9 ) [6] => Array ( [type] => NUMS [enabled] => 1 [current] => [page] => 10 [link] => http://127.0.0.1/admin/members/lists?page=10 ) [7] => Array ( [type] => NEXT [enabled] => 1 [current] => [page] => 10 [link] => http://127.0.0.1/admin/members/lists?page=10 ) [8] => Array ( [type] => LAST [enabled] => 1 [current] => [page] => 15 [link] => http://127.0.0.1/admin/members/lists?page=15 ) )
실제 VIEW 적용 <ul class="pagination"> <?php foreach($pagination as $paging) : ?> <li class="<?=$paging['enabled']?'':'disabled'?> <?=$paging['current']?'active':''?>"> <a href="<?=$paging['enabled'] && !$paging['current']?$paging['link']:'#'?>" <?=!$paging['enabled']?'onclick="return false;"':''?>> <?php if($paging['type'] == 'NUMS') echo $paging['page']; else if ($paging['type'] == 'FIRST' ) echo "처음"; else if ($paging['type'] == 'PREV') echo '이전'; else if ($paging['type'] == 'NEXT' ) echo '다음'; else if ($paging['type'] == 'LAST') echo '마지막'; ?> </a> </li> <?php endforeach;?> </ul>
|
|||
다음글 | 2.2.1 force_download helper 오류... (3) | ||
이전글 | Codeigniter 3와 Sentry 연동 쉽게하기 (7) | ||
변종원(웅파)
/
2017/01/02 14:05:44 /
추천
0
감사합니다. ci 자체에 파라미터 처리해서 이렇게 제공하면 좋겠네요. ^^
|
한대승(불의회상)
/
2017/01/02 14:59:06 /
추천
0
감사 합니다. ^^
|