제목 | Customization Pagination (페이징 클래스) | ||
---|---|---|---|
글쓴이 | 얼짱짠군 | 작성시각 | 2012/04/02 15:43:06 |
|
|||
안녕하세요.. 얼짱짠군입니다^^; CI를 1년정도 사용했는데요 참편하게 코딩할수있다 생각합니다.. 팁이될진모르겠지만.. 게시판을 만들다가 조금 불편한부분이 있어 수정했습니다. 주소체계를 /board/test/page/10 으로 할경우 /board/test/게시물번호/page/10 과같이 중간에 게시물번호가 들어갈경우 난감합니다.. 그래서 page부분을 찾아 리턴하는 부분을 조금 수정해보았습니다. 이렇게 추가할 경우 uri_segment 옵션은 필요가 없겠죠?^^; <? class CI_Pagination { # 중간코드생략; var $CI; //추가 /** * Constructor * * @access public * @param array initialization parameters */ public function __construct($params = array()) { $this->CI =& get_instance(); //추가 # 중간코드생략; } /** * Initialize Preferences * * @access public * @param array initialization parameters * @return void */ function initialize($params = array()) { # 중간코드생략; } // -------------------------------------------------------------------- /** * uri segments the page number. * * @author csk123 (2012-04-02) * @access public * @return integer */ function segments() { $segment = $this->CI->uri->segment_array(); if($this->prefix == "P") { $matchs=0; foreach($segment as $keys) { if(@preg_match('/^([P]{1}|[0-9])+/', $keys)) { $match=@explode("P",$keys); $matchs = $match[1]; } } return $matchs?$matchs:0; } else { $keys = @array_keys($segment, $this->query_string_segment); if(@is_array($keys)) { $match = $this->CI->uri->uri_to_assoc($keys[0]); return $match[$this->query_string_segment]; } else { return $this->CI->uri->segment($this->uri_segment); } } } // -------------------------------------------------------------------- /** * Generate the pagination links * * @access public * @return string */ function create_links() { # 중간코드생략; //$CI =& get_instance(); //주석 if ($this->CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE) { # 중간코드생략; } else { // 기존 $this->CI->uri->segment를 새로추가한 $this->segments() 로 변경 //if ($this->CI->uri->segment($this->uri_segment) != $base_page) if ($this->segments() != $base_page) { //$this->cur_page = $this->CI->uri->segment($this->uri_segment); $this->cur_page = $this->segments(); // Prep the current page - no funny business! $this->cur_page = (int) $this->cur_page; } } } } // END Pagination Class /* End of file Pagination.php */ /* Location: ./system/libraries/Pagination.php */ <사용방법> 1. board/test/page/10 형태 <? class Board extends CI_Controller { function Board() { parent::__construct(); $this->load->library("pagination"); } function index() { $this->lists(); } function page() { $this->lists(); } function lists() { // 페이지 처리 $config["base_url"] = '/board/test/page'; $config["total_rows"] = $this->board->total_rows(); $config["num_links"] = 10; $config["per_page"] = 20; $config["first_link"] = '‹ 처음'; $config["next_link"] = '다음 ›'; $config["prev_link"] = '‹ 이전'; $config["last_link"] = '마지막 ›'; $config["query_string_segment"] = 'page'; $this->pagination->initialize($config); if($this->pagination->segments()) { $_POST["page"] = $this->pagination->segments(); } $data["total_rows"] = $config["total_rows"]; $data["pagination"] = $this->pagination->create_links(); } } ?> 2. board/test/P10 형태 <? class Board extends CI_Controller { function Board() { parent::__construct(); $this->load->library("pagination"); } function index() { $this->lists(); } function lists() { // 페이지 처리 $config["base_url"] = '/board/test'; $config["prefix"] = 'P'; $config["total_rows"] = $this->board->total_rows(); $config["num_links"] = 10; $config["per_page"] = 20; $config["first_link"] = '‹ 처음'; $config["next_link"] = '다음 ›'; $config["prev_link"] = '‹ 이전'; $config["last_link"] = '마지막 ›'; $this->pagination->initialize($config); if($this->pagination->segments()) { $_POST["page"] = $this->pagination->segments(); } $data["total_rows"] = $config["total_rows"]; $data["pagination"] = $this->pagination->create_links(); } } ?> * 소스코드는 압축해서 첨부했습니다. 허접하지만 간단한 팁이였어요;; 이상입니다. |
|||
첨부파일 |
system.zip (3.0 KB) |
||
다음글 | CLI 모드로 실행할 때 로그파일 관련문제 (1) | ||
이전글 | db library 에서 save_queries 옵션에... (3) | ||
한대승(불의회상)
/
2012/04/03 17:07:45 /
추천
0
|
페이징이 국내 사용방법과 달라 조금 혼동 되는 부분이 있었는데 도움이 많이 될것 같습니다.