일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- amazon
- 차이점
- 사용법
- 옵셔널
- 객체
- 자료불러오기
- programmers
- pagination
- SWiFT
- Gradle
- 전의 의존성
- CKEditor4
- AWS
- 클래스
- Java
- PHP
- jQuery
- 함수
- CodeIgniter
- 상속
- bootstrap
- switch-case
- guard
- Spring
- 제어문
- DatePicker
- 2차원 객체배열
- class
- Xcode
- EC2
Archives
- Today
- Total
not bad 한 개발
CodeIgniter - Pagination 구현 본문
대부분의 프로젝트에는 페이지네이션 기능이 들어갑니다, 하지만 페이지네이션을 라이브러리 없이 만들면 어렵습니다, 하지만 codeIgniter3에는 페이지네이션을 구현하기위한 라이브러리가 있고 저희들은 사용하기만 하면됩니다 이번에는 페이지네이션 라이브러리를 활용하여 페이지네이션을 구현하는 방법을 알려드리겠습니다.
이번 글에는 bootstrap 4.5 버전을 사용했습니다.DB설계 (pagedb 테이블)
github : https://github.com/delight-HK3/codeIgniter_pagination
(jQuery 및 bootstrap 파일도 첨부해놓았습니다.)
(이번 글을 이해하기 위해서는 아래의 링크에서 설정값을 보면 도움이 될것 입니다.)
http://www.ciboard.co.kr/user_guide/kr/libraries/pagination.html
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>";
?>
'Web > CodeIgniter' 카테고리의 다른 글
CodeIgniter - 서버에 중복 없이 이미지 넣기 (0) | 2022.02.19 |
---|---|
CodeIgniter - 로그인 구현 (0) | 2022.02.18 |
CodeIgniter - DB에 있는 데이터를 Modal창 으로 보기 (0) | 2021.12.31 |
CodeIgniter - Ajax를 활용한 아이디 중복체크 (0) | 2021.12.29 |
CodeIgniter - 소개 (0) | 2021.12.29 |
Comments