일반적인 PHP 개발에서는 php 코드와 html 코드를 혼합하면 페이지네이션 처리가 상대적으로 간단하고, 함수 형태로 구성할 수도 있습니다. 최근 개발에서는 Pear::DB + Smarty 구조를 사용했는데, 페이지를 직접 조작할 수 없기 때문에 템플릿에 페이징 문자열을 생성하는 것을 고려했습니다.
3층 구조이므로 클래스 라이브러리-->PHP 호출-->템플릿 형태로 모든 데이터 처리가 클래스 라이브러리에서 이루어지므로 페이징 제어는 PHP 호출에서 수행되며 템플릿은 통화 결과. PHP 호출의 페이징 코드를 직접 살펴보겠습니다.
------------------------- - ---------------------------
<?php
/**
* 파일: Type.php
* 기능: 카테고리별로 도서 표시
* 작가 : 헤이엘루렌
**/
//클래스 라이브러리 등을 포함한 공용 파일을 포함합니다.
require_once("include.php");
//작업 개체를 인스턴스화합니다.
$Type = new CTypes();
//페이지당 레코드 수
Define("PAGE_SIZE", 10);
//GET으로 제출된 변수를 가져옵니다.
$TypeID = $tid ? $tid : intval($_REQUEST['tid'])
;
$BookTotal = $Type->getBookTotal($TypeID)
/* 페이징 디스플레이 코어*/
//전체 페이지 수를 구합니다.
$pageCount = ($BookTotal/PAGE_SIZE);
//현재 페이지 번호
if (isset($_GET[페이지]) && !empty($_GET[페이지])) {
$page = intval($_GET[페이지]);
} 또 다른 {
$페이지 = 1;
}
if ($page==1) {
$startNum = 0;
} 또 다른 {
$startNum = ($page-1) * PAGE_SIZE;
}
//페이징 링크 문자열 생성
if ($page==1 && $pageCount>1) {
$pageStr = "이전 페이지 | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">다음 페이지</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">이전 페이지</a> | 다음 페이지";
} elseif ($page>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">이전 페이지</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">다음 페이지</a>";
} 또 다른 {
$pageStr = "이전 페이지 | 다음 페이지";
}
//페이지 수에 따라 현재 레코드를 가져옵니다.
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE)
//스마트한 변수 할당
$tpl->할당('BookTotal', $BookTotal);
$tpl->할당('allBook', $allBook);
$tpl->할당('pageStr', $pageStr);
$tpl->display('Type.html');
unset($Type)
;
------------------------------------- ----------------------------------
보다 명확한 이해를 위해 클래스 라이브러리의 기본 내용에 대한 간략한 설명은 다음과 같습니다. (코드가 불완전합니다.)
------------------------------------- ----------------------------------
<?php
/**
* 파일: Type.class.php
* 기능 : 타입 처리 클래스
* www.knowsky.com
* 작가 : 헤이엘루렌
**/
클래스 유형
{
var $mDsn;
var $m테이블이름;
var $hPearDB;
//생성자
함수 유형()
{
//...
}
//pear DB 클래스의 핸들 메소드를 가져옵니다.
함수 _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("설정 이름 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
거짓을 반환;
}
}
$this->hPearDB를 반환합니다.
}
//총 책 수를 구합니다.
함수 getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) AS 총계 FROM ...";
$rs = $db->getOne($sql);
if (DB::isError($rs))
$rs->getMessage()를 반환합니다.
또 다른
$rs를 반환합니다.
}
//모든 책 가져오기
함수 getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
if (DB::isError($rs))
$rs->getMessage()를 반환합니다.
또 다른
$rs를 반환합니다.
}
}
?>
------------------------------------- ----------------------------------
마지막으로 이 Type.html 템플릿이 어떻게 처리되는지 살펴보겠습니다.
------------------------------------- ----------------------------------
{*헤더 파일 삽입*}
{include file="Cendar/head.html"}
<div id="사이드">
<ul>
<li>총 도서 수: {$BookTotal}</li>
</ul>
</div>
<div id="책">
<h2 class="cata">책의 구체적인 내용</h2>
<ul>
{섹션 이름=책 루프=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{섹션else}
<li class="warning">현재 책이 없습니다</li>
{/부분}
</ul>
</div>
{* 페이지 매김 문자열 표시*}
<div 정렬="오른쪽">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* 하단 파일 삽입*}
{include file="Cendar/foot.html"}
------------------------------------- ----------------------------------
그런 다음 핵심 사항을 파악하고 PHP 프로그램에서 $pagStr을 페이징 문자열로 제어할 수 있다는 것을 알고 마지막으로 효과를 얻기 위해 템플릿 파일에서 대체됩니다.
이 시점에서는 기본적으로 템플릿에서 페이징 처리를 수행하는 방법을 이해했습니다. 물론 페이징 함수를 함수로 작성하거나 클래스로 캡슐화하여 어디에서나 호출할 수도 있습니다. 하하~~
(위 코드를 무단으로 복사하지 마세요)
작성자: heiyeluren
날짜: 2005-8-2