본문 바로가기
소프트웨어 개발/PHP

[코드이그나이터4] 페이지네이션, 페이징처리 구현 - 모델에서 구현

by 인생은즐겁게 2022. 2. 12.
반응형

1. 구현을 위한 데이터베이스 테이블

 

예제 구현을 위해 테이블을 생성합니다.

CREATE TABLE `ss_board` (
	`ss_board_id` INT(11) NOT NULL AUTO_INCREMENT,
	`subject` VARCHAR(255) NOT NULL COMMENT '글 제목' COLLATE 'utf8mb4_general_ci',
	`contents` LONGTEXT NOT NULL COMMENT '글 내용' COLLATE 'utf8mb4_general_ci',
	`writer` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '작성자' COLLATE 'utf8mb4_general_ci',
	`email` VARCHAR(150) NOT NULL DEFAULT '' COMMENT '이메일' COLLATE 'utf8mb4_general_ci',
	`reg_dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
	`up_dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY (`ss_board_id`) USING BTREE
)
COMMENT='개발자 성공 보드~!!\r\n엄청난 부자가 된다~!'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3
;

 

 

2. 페이지네이션 모델 구현

 

<?php

namespace App\Models;

use CodeIgniter\Model;

class BoardModel extends Model
{
    
    protected $table            = 'ss_board';
    protected $primaryKey       = 'ss_board_id';


    public function get_all_data( int $cnt = 20 )
    {
        $this->builder()
        ->orderBy('ss_board_id','DESC');

       
        return [
            'data'  => $this->paginate($cnt),
            'pager' => $this->pager
        ];
    }

}

$this->paginate() 메소드에서 데이터를 반환합니다. 기본 데이터 row는 20개로 설정이 되어 있습니다.

매개변수를 정수 값으로 입력을 하면 입력한 값만큼 데이터가 반환합니다.

 

 

3. 페이지네이션 컨트롤러 구현

 

BoardModel에서 구현한 부분을 컨트롤러에서 호출을 합니다.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\BoardModel;

class Board extends BaseController
{
    protected $bm;

    public function __construct()
    {
        $this->bm = new BoardModel();    
    }
    public function index()
    {
        $bm = $this->bm->get_all_data();

       
        $data = [
            'board_data'    => $bm['data'],
            'pager'         => $bm['pager']
        ];
        

        echo view("board/list",$data);
    }
}

 

 

4. 페이지네이션 뷰 구현

 

<div class="container">
    <div class="row mt-2">
        <div class="col-md-3">
            <div class="input-group mb-3">
                <input type="text" class="form-control" placeholder="게시글 검색"  aria-describedby="button-addon2">
                <button class="btn btn-outline-secondary" type="button" id="button-addon2">검색</button>
            </div>
        </div>
        <div class="col-6 col-md-9 text-end" >
        <button type="button" class="btn btn-outline-secondary">글쓰기</button>
        </div>
    </div>
    <table class="table table-hover table-sm">
        <thead>
            <tr>
                <th scope="col">제목</td>
                <th scope="col">글쓴이</td>
                <th scope="col">등록일시</td>
                <th scope="col">수정일시</td>
            </tr>
        </thead>
        <tbody>
        <?php foreach( $board_data as $data ): ?>
            <tr>
                <td><?=$data['subject']?></td>
                <td><?=$data['writer']?></td>
                <td><?=$data['reg_dt']?></td>
                <td><?=$data['up_dt']?></td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <?php echo $pager->links(); ?>
</div>

 

 

$pager->links()메소드는 페이지링크를 출력하는 메소드입니다. 구현을 잘하셨다면 아래 그림과 같이 페이지링크가 출력됩니다.

 

 

5. 커스텀 페이지네이션 만들기

본 예제는 페이징처리를 위한 간편 구현입니다. 디자인 변경이 궁금하신 분들은 아래 링크를 참고 바랍니다.

 

https://lifefun.tistory.com/71

 

[코드이그나이터4] 페이지네이션 뷰 만들기/뷰 생성

들어가기 이 예제를 구현하기 위해서는 페이지네이션 처리를 먼저 구현하셔야 합니다. 참고가 필요하시면 아래 링크를 참고하시면 됩니다. https://lifefun.tistory.com/70 [코드이그나이터4] 페이지네

lifefun.tistory.com

 

반응형

댓글