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

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

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

들어가기

 

이 예제를 구현하기 위해서는 페이지네이션 처리를 먼저 구현하셔야 합니다. 참고가 필요하시면 아래 링크를 참고하시면 됩니다.

 

https://lifefun.tistory.com/70

 

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

1. 구현을 위한 데이터베이스 테이블 예제 구현을 위해 테이블을 생성합니다. CREATE TABLE `ss_board` ( `ss_board_id` INT(11) NOT NULL AUTO_INCREMENT, `subject` VARCHAR(255) NOT NULL COMMENT '글 제목' CO..

lifefun.tistory.com

 

 

1. 페이지네이션 뷰 파일 생성

 

app\Views\Pagers\ 폴더에 cus_pager.php 파일을 생성합니다. 이 파일에 페이지네이션 뷰를 생성할 겁니다.

이 페이지네이션을 정성적으로 호출을 하려면 부트스트랩5를 사용하셔야 합니다.

 

<?php $pager->setSurroundCount(2) ?>

<nav aria-label="Page navigation">
    <ul class="pagination">
    <?php if ($pager->hasPrevious()) : ?>
        <li class="page-item" >
            <a class="page-link" href="<?= $pager->getFirst() ?>" aria-label="<?= lang('Pager.first') ?>">
                <span aria-hidden="true"><?= lang('Pager.first') ?></span>
            </a>
        </li>
        <li class="page-item">
            <a class="page-link" href="<?= $pager->getPrevious() ?>" aria-label="<?= lang('Pager.previous') ?>">
                <span aria-hidden="true"><?= lang('Pager.previous') ?></span>
            </a>
        </li>
    <?php endif ?>

    <?php foreach ($pager->links() as $link) : ?>
        <li <?= $link['active'] ? 'class="page-item active"' : 'page-item' ?>>
            <a class="page-link" href="<?= $link['uri'] ?>">
                <?= $link['title'] ?>
            </a>
        </li>
    <?php endforeach ?>

    <?php if ($pager->hasNext()) : ?>
        <li class="page-item">
            <a class="page-link" href="<?= $pager->getNext() ?>" aria-label="<?= lang('Pager.next') ?>">
                <span aria-hidden="true"><?= lang('Pager.next') ?></span>
            </a>
        </li>
        <li class="page-item">
            <a class="page-link" href="<?= $pager->getLast() ?>" aria-label="<?= lang('Pager.last') ?>">
                <span aria-hidden="true"><?= lang('Pager.last') ?></span>
            </a>
        </li>
    <?php endif ?>
    </ul>
</nav>

 

페이지네이션 뷰 템플릿 파일 다운로드 (부트스트랩5 페이지네이션) :

cus_pager.php
0.00MB

 

2. Pager 설정 ( app\Config\Pager.php )

 

'cus_pager'      => 'App\Views\Pagers\cus_pager' 아래 코드를 추가합니다.

 

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Pager extends BaseConfig
{
    /**
     * --------------------------------------------------------------------------
     * Templates
     * --------------------------------------------------------------------------
     *
     * Pagination links are rendered out using views to configure their
     * appearance. This array contains aliases and the view names to
     * use when rendering the links.
     *
     * Within each view, the Pager object will be available as $pager,
     * and the desired group as $pagerGroup;
     *
     * @var array<string, string>
     */
    public $templates = [
        'default_full'   => 'CodeIgniter\Pager\Views\default_full',
        'default_simple' => 'CodeIgniter\Pager\Views\default_simple',
        'default_head'   => 'CodeIgniter\Pager\Views\default_head',
        'cus_pager'      => 'App\Views\Pagers\cus_pager'
    ];

    /**
     * --------------------------------------------------------------------------
     * Items Per Page
     * --------------------------------------------------------------------------
     *
     * The default number of results shown in a single page.
     *
     * @var int
     */
    public $perPage = 20;
}

 

앞서 구현한 BoardModel.php파일에서 paginate 메소드에 'bdGroup'인자값을 추가합니다.

<?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,'bdGroup'),
            'pager' => $this->pager
        ];
    }

}

 

 

$pager->links() 메소드를 호출하는 페이지에서 미리 만들어둔 cus_pager.php 템플릿을 호출합니다.

 

변경 : <?php echo $pager->links('bdGroup','cus_pager'); ?>

 

<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('bdGroup','cus_pager'); ?>
</div>

 

앞서 구현한 페이지네이션에서 커스텀하게 구현한 페이지네이션이 정상적으로 출력됩니다.

 

페이지네이션 뷰 템플릿 파일 다운로드 (부트스트랩5 페이지네이션) :

cus_pager.php
0.00MB

반응형

댓글