| 제목 | 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
|
페이징이 국내 사용방법과 달라 조금 혼동 되는 부분이 있었는데 도움이 많이 될것 같습니다.