실제로 사내 erp 시스템 개발중에 사용한 건데,
보안상으로 DB관련된 내용들만 빼고 적어보려고 합니다.
페이징을 2페이지(all.php/each.php) 에 해야했기 때문에 중복된 내용이 많았습니다.
그래서 컨트롤러 -> 라이브러리 -> 컨트롤러 -> 뷰 형태로 했습니다.
컨트롤러에 적게 되면 줄이 너무 길어서, 차라리 공통된 내용들은 라이브러리에 묶었습니다.
컨트롤러
public function all() {
// $page 변수
if(!$_GET) {
$getpage = '1'; // 현재 페이지 (값이 없으면)
} else {
$getpage = $_GET['page']; // 주소창에 GET으로 받은게 있으면
}
// 배열 정리
$type = array();
$row = '15'; // 한 페이지에 나오게 할 갯수
$block = '5'; // 페이지당 블록
// 테스트 아이디 전체조회
$total = $this->DB이름->DB스키마('DB', 'DB', 'DB');
// 페이징 라이브러리 호출
$pageing = $this->paging->procee($row, $block, $getpage, $total);
// 테스트
$nomal = $this->DB이름->DB스키마('DB', 'DB', 'DB', $pageing['0']['pageSet'], $pageing['0']['limitIdx']);
// 유형 확인
$this->load->view('sidemenu');
$this->load->view('/페이지폴더/all', ['nomal' => $nomal, 'pageing' => $pageing] );
}
라이브러리
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class paging {
function procee($row, $block, $getpage, $TotaltestId) {
$countTestId = count($TotaltestId); // 총 갯수 확인
if(!$_GET) {
$page = '1'; // 현재 페이지 (값이 없으면)
} else {
$page = $getpage; // 주소창에 GET으로 받은게 있으면
}
$pageSet = $row; // 한 페이지에 보여지는 줄 수
$rowBlock = $block; // 상단 보이는 페이지 갯수 (1번에 5개씩 보이게)
$totalPage = ceil($countTestId/$pageSet); // 보일 총 페이지 (상단 표시)
$totalBlock = ceil($totalPage/$rowBlock); // 보일 블럭 갯수
$nowBlock = ceil($page/$rowBlock); // 현재 블럭
$startPage = ($nowBlock*$rowBlock)-3; // 시작 페이지
// 마지막 페이지 세기
if($startPage<=1) {
$startPage = '1';
}
// 마지막 페이지
$lastPage = min($totalPage,$nowBlock*$rowBlock);
// 마지막 페이지와 총 페이지 번호가 동일 할 시
if($totalPage<=$lastPage) {
$lastPage = $totalPage;
}
$limitIdx = ($page - 1)*$pageSet; // 처음에 시작하는 페이지 갯수
$prevPage = $page - 1; // 이전페이지
$nextPage = $page + 1; // 다음페이지
$prevBlock = $rowBlock - 1; // 이전 페이지
$nextBlock = $rowBlock + 1; // 현재 페이지
if($nextPage>=$totalPage) {
$nextPage = $totalPage;
}
$pageing = array();
array_push($pageing, array(
'page' => $page,
'startPage' => $startPage,
'lastPage' => $lastPage,
'nextPage' => $nextPage,
'prevPage' => $prevPage,
'pageSet' => $pageSet,
'limitIdx' => $limitIdx,
'totalPage' => $totalPage
));
return $pageing;
}
}
?>
뷰 (페이징 부분만)
<!--페이징 목록 나오는 부분-->
<? if($pageing['0']['prevPage'] > 0) : ?>
<!--페이징 목록 나오는 부분(이전 / 현재 페이지 / 다음 페이지)-->
<a href="./페이지이름?page=<?=$pageing['0']['prevPage']?>" class="클래스이름">[이전]</a>
<? else : ?>
[이전]
<? endif; ?>
<a href="./페이지이름?page=1" class="클래스이름">1</a> ...
<? for ($i=-2; $i<3; $i++) :
if(!$_GET) :
elseif ($pageing['0']['page'] + $i == $_GET['page'] || !isset($_GET)) : ?>
<!--선택한 페이지 번호 = 현재 페이지 번호이면 글씨 초록색 및 bold 처리-->
<a href="./all?page=<?=$pageing['0']['page'] + $i;?>" class="클래스이름"><?=$pageing['0']['page'] + $i;?></a>
<? else : ?>
<!--선택한 페이지 번호 != 현재 페이지 번호-->
<? if($pageing['0']['page'] + $i <= '0' || $pageing['0']['page'] + $i > $pageing['0']['totalPage']) : ?>
<? else : ?>
<a href="./all?page=<?=$pageing['0']['page'] + $i;?>" class="클래스이름"><?=$pageing['0']['page'] + $i;?></a>
<? endif; ?>
<? endif;
endfor;?>
... <a href="./all?page=<?=$pageing['0']['totalPage']?>" class="클래스이름"><?=$pageing['0']['totalPage']?></a>
<!--다음페이지-->
<? if($pageing['0']['nextPage'] != $pageing['0']['page']) : ?>
<!--페이징 목록 나오는 부분(다음페이지)-->
<a href="./all?page=<?=$pageing['0']['nextPage']?>" class="클래스이름">[다음]</a>
<? else : ?>
[다음]
<? endif; ?>
모델
public function DB이름($dbname, $need, $order, $limit1, $limit2) {
$this->db->select('*');
$this->db->from($dbname);
$this->db->order_by($need, $order);
$this->db->limit($limit1, $limit2);
$query = $this->db->get()->result_array();
return $query;
}
이렇게 작업해서 생겨난 것이
전 제 컴퓨터로 확인했을 때 15줄로 해야 위아래 여백이 조금 생겨서 컨트롤러에서 $row=15 로 조절했습니다.
혹시나 더 많이 보였으면 하는 분들은 컨트롤러에서 $row = 20 이런식으로 바꾸시면 줄수가 바뀌게 됩니다.
'웹 응용 > codeigniter' 카테고리의 다른 글
코드이그나이터로 관리자페이지 만들기 - ③ DB구상 (0) | 2021.08.27 |
---|---|
코드이그나이터로 관리자페이지 만들기 - ② 가상서버 (0) | 2021.08.25 |
코드이그나이터로 관리자페이지 만들기 - ① 구상 (0) | 2021.08.24 |