No desenvolvimento geral de PHP, quando o código php e o código html são misturados, é relativamente simples lidar com a paginação e também pode ser construído na forma de uma função. No desenvolvimento recente, a estrutura Pear::DB + Smarty foi usada, então considerei paginar o modelo. Como a página não pode ser manipulada diretamente, considerei gerar uma string de paginação.
Por ser uma estrutura de três camadas, na forma de biblioteca de classes -> chamada PHP -> modelo, todo o processamento de dados está na biblioteca de classes, então o controle de paginação é executado na chamada PHP e o modelo analisa complexamente o resultado da chamada. Vejamos diretamente o código de paginação em nossa chamada PHP:
-------------------------------------- - --------------------------------------------
<?php
/**
* Arquivo: Tipo.php
* Função: Exibir livros em categorias
*Autor: heiyeluren
**/
//Contém arquivos públicos, incluindo bibliotecas de classes, etc.
require_once("include.php");
//Instancia o objeto de operação
$Type = new CTypes();
//Número de registros por página
define("PAGE_SIZE", 10);
//Obtém as variáveis enviadas por GET
$TypeID = $tid ? $tid : intval($_REQUEST['tid'])
;
$BookTotal = $Type->getBookTotal($TypeID);
/* Núcleo de exibição de paginação*/
//Obtém o número total de páginas
$pageCount = ($BookTotal/PAGE_SIZE);
//Número da página atual
if (isset($_GET[página]) && !empty($_GET[página])) {
$página = intval($_GET[página]);
} outro {
$página = 1;
}
if ($página==1) {
$startNum = 0;
} outro {
$startNum = ($página-1) * PAGE_SIZE;
}
//Gera string de link de paginação
if ($página==1 && $pageCount>1) {
$pageStr = "Página anterior | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Próxima página</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Página anterior</a> | Próxima página";
} elseif ($página>1 && $página<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Página anterior</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Próxima página</a>";
} outro {
$pageStr = "Página anterior | Próxima página";
}
//Obtém o registro atual de acordo com o número de páginas
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE)
;
$tpl->assign('LivroTotal', $LivroTotal);
$tpl->assign('allBook', $allBook);
$tpl->assign('pageStr', $pageStr);
(
'Type.html')
;
-------------------------------------------------- ----------------------------------
Para uma compreensão mais clara, aqui está uma breve descrição do conteúdo básico da biblioteca de classes: (O código está incompleto)
-------------------------------------------------- ----------------------------------
<?php
/**
* Arquivo: Type.class.php
* Função: Tipo de classe de processamento
* www.knowsky.com
*Autor: heiyeluren
**/
classType
{
var $mDsn;
var $mNomeTabela;
var $hPearDB;
//Construtor
functionType()
{
//...
}
//Obtém o método handle da classe de banco de dados pera
função _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("definir nomes 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
retornar falso;
}
}
retorne $this->hPearDB;
}
//Obtém o número total de livros
função getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECIONE CONTAGEM(*) COMO total DE ...";
$rs = $db->getOne($sql);
if (DB::isError($rs))
return $rs->getMessage();
outro
retornar $rs;
}
//Pegue todos os livros
função getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
if (DB::isError($rs))
return $rs->getMessage();
outro
retornar $rs;
}
}
?>
-------------------------------------------------- ----------------------------------
Finalmente, vamos dar uma olhada em como este modelo Type.html é processado:
-------------------------------------------------- ----------------------------------
{*Inserir arquivo de cabeçalho*}
{include file="Cendar/head.html"}
<div id="lado">
<ul>
<li>Número total de livros: {$BookTotal}</li>
</ul>
</div>
<div id="Livro">
<h2 class="cata">O conteúdo específico do livro</h2>
<ul>
{nome da seção=Livro loop=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{seção}
<li class="warning">Atualmente não há livros</li>
{/seção}
</ul>
</div>
{* Exibição de string de paginação*}
<div alinhar="direita">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{*insira o arquivo inferior*}
{include file="Cendar/foot.html"}
-------------------------------------------------- ----------------------------------
Então entendemos o ponto chave e sabemos que podemos controlar $pagStr do programa PHP para ser nossa string de paginação e, finalmente, ele será substituído no arquivo de modelo para obter o efeito.
Neste ponto, você basicamente entende como executar o processamento de paginação no modelo. Claro, você também pode escrever a função de paginação como uma função ou encapsulá-la em uma classe, para que possa ser chamada em qualquer lugar. Haha~~~
(Por favor, não reimprima o código acima sem autorização)
Autor: heiyeluren
Data:2005-8-2