not bad 한 개발

CodeIgniter - Pagination 구현 본문

Web/CodeIgniter

CodeIgniter - Pagination 구현

leebean 2022. 3. 12. 09:01

대부분의 프로젝트에는 페이지네이션 기능이 들어갑니다, 하지만 페이지네이션을 라이브러리 없이 만들면 어렵습니다, 하지만 codeIgniter3에는 페이지네이션을 구현하기위한 라이브러리가 있고 저희들은 사용하기만 하면됩니다 이번에는 페이지네이션 라이브러리를 활용하여 페이지네이션을 구현하는 방법을 알려드리겠습니다.

이번 글에는 bootstrap 4.5 버전을 사용했습니다.DB설계 (pagedb 테이블)

(위의 DB설계는 MariaDB 기준으로 제작했습니다.)

 

github : https://github.com/delight-HK3/codeIgniter_pagination

 

GitHub - delight-HK3/codeIgniter_pagination: We implemented the Pagination function using the Pagination library.

We implemented the Pagination function using the Pagination library. - GitHub - delight-HK3/codeIgniter_pagination: We implemented the Pagination function using the Pagination library.

github.com

(jQuery 및 bootstrap 파일도 첨부해놓았습니다.)

 

(이번 글을 이해하기 위해서는 아래의 링크에서 설정값을 보면 도움이 될것 입니다.)

http://www.ciboard.co.kr/user_guide/kr/libraries/pagination.html

 

Pagination Class ‐ 코드이그나이터 3.0 한글매뉴얼

© Copyright 2014 - 2016, British Columbia Institute of Technology. Last updated on Mar 21, 2016. Built with Sphinx using a theme provided by Read the Docs.

www.ciboard.co.kr

 

Controller

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class Page_controller extends CI_Controller {
    	function __construct(){
            parent::__construct();
            $this->load->database(); //DB 연결          
            $this->load->model("Page_model"); //모델 main_m 연결
            $this->load->helper(array("url", "date", "form",));
            $this->load->library('pagination'); //pageination 라이브러리 가져오기
            $this->load->library('upload'); //upload 라이브러리 가져오기
    	}
	public function index()
	{
	    $this->list(); // 제일먼저 list()함수를 실행
	}
    	public function list(){
	    $uri_array=$this->uri->uri_to_assoc(3);
		
	    $base_url = "/Page_controller/list/page"; //기본 URL
	    $page_segment = substr_count( substr($base_url,0,strpos($base_url,"page")) , "/" )+1;
	    // 이 코드는 페이지를 url에 표시하기위해 제작, 검색을 안하면 4, 검색하면 6이나옴
            // strpos($base_url,"page")은 어느부분 부터 page가 나오는지 확인하는 부분
            // substr($base_url,0,strpos($base_url,"page"))은 처음부터 시작하여 "page"문자열이 나오는 부분까지 문자열 잘라서 저장하는 부분
            // substr_count("/Page_controller/lists/","/")+1; 정리하면 이렇게 되는데 결국 문자열에서 "/"의 갯수를 구하고 거기에 1을 더하라는의미

	    $config["per_page"] = 5; // 페이지당 표시할 line 수
	    $config["total_rows"] = $this->Page_model->rowcount(); // 전체 레코드개수 구하기
	    $config["uri_segment"] = $page_segment;	// 페이지가 있는 segment 위치
	    $config["base_url"] = $base_url; // 기본 URL

	    $this->pagination->initialize($config);//pagination 설정 적용
		
	    $data["page"]=$this->uri->segment($page_segment,0); // 시작위치, 없으면 0.
	    $data["pagination"] = $this->pagination->create_links(); // 페이지소스 생성

	    $start=$data["page"]; // n페이지 : 시작위치
	    $limit=$config["per_page"]; // 페이지 당 라인수
		
	    $data["list"]=$this->Page_model->getlist($start,$limit);// 해당페이지 자료읽기
       
            $this->load->view("page_view",$data); // 출력
	}
}

 

Model

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class Page_model extends CI_Model {
	public function getlist($start,$limit)//정보목록보기
	{
		$sql="select * from pagemake order by no DESC limit $start,$limit";    
		return $this->db->query($sql)->result();// 쿼리실행, 결과 리턴
	}
	public function rowcount(){ // 해당하는 라인수 가져오기
		$sql="select * from pagemake"; // 쿼리실행
		return $this->db->query($sql)->num_rows(); // 해당하는 행의 갯수를 리턴
	}
}
?>

 

View

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
        <title>pagination</title>

        <!-- bootstrap 4.5 css -->
        <link rel="stylesheet" href="/my/css/bootstrap.css">
        <link rel="stylesheet" href="/my/css/bootstrap.css.map">

        <!-- font css -->
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500&display=swap" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <div class="table-responsive">
                <table class="table" style="font-family: 'Noto Sans KR'; font-size:17px">
                    <thead>
                        <tr style="background-color: #ff6863; color:white">
                            <th style="text-align: center;">번호</th>
                            <th>제목</th>
                            <th>작성자</th>
                            <th style="text-align: center;">작성일</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php                   
                            foreach($list as $row){
                        ?>
                                <tr>
                                    <td style="text-align: center;" scope="row"><?php echo($row->no);?></td>
                                    <td style="word-break: break-all;"><?php echo($row->name);?></td>
                                    <td><?php echo($row->writer);?></td>
                                    <td style="text-align: center;"><?php echo($row->writedate);?></td>
                                </tr>
                        <?php
                            }
                        ?>
                    </tbody>
                </table>
            </div>
        </div><br>
        <?php echo $pagination ?> 
        <!-- 페이지네이션 기능을 출력-->
    </body>
</html>

<!--bootstrap 4.5 Javascript-->
<script src="/my/js/jquery-3.6.0.js"></script>
<script src="/my/js/bootstrap.js"></script>
<script src="/my/js/bootstrap.js.map"></script>

 

Config (pagination.php)

<?php
	$config["first_link"] = "<<";
	$config["last_link"] = ">>";
	$config["prev_link"] = "PREV";
	$config["next_link"] = "LAST";
	$config["full_tag_open"] 	= "<nav><ul class='pagination justify-content-center'>";
	$config["full_tag_close"] 	= "</ul></nav>";
	$config["cur_tag_open"] 	= "<li class='page-item active'><span class='page-link'>";
	$config["cur_tag_close"] 	= "</li>";
	$config["first_tag_open"]	= "<li class='page-item'>";
	$config["first_tag_close"]	= "</li>";
	$config["prev_tag_open"] 	= "<li class='page-item'>";
	$config["prev_tag_close"] 	= "</li>";
	$config["num_tag_open"]		= "<li class='page-item'>";
	$config["num_tag_close"]	= "</li>";
	$config["next_tag_open"]	= "<li class='page-item'>";
	$config["next_tag_close"]	= "</li>";
	$config["last_tag_open"]	= "<li class='page-item'>";
	$config["last_tag_close"]	= "</li>";
?>

 

Comments