Publicado em 18 de dezembro de 2009 ás 16:36
Modificação para que possa ser implementado no “Smarty Template” e atualizado o modo de uso com exemplo de uso no “Smarty Template”
/*
* [ INFO DE ATUALIZAÇÃO ]
*
* 1 – Modo de retorno de paginação alterada para ‘return’ para poder utilizar o ‘Smarty Template’;
*/
Download em:
Local: class.Paginacao.1.2.2.2
PHPBrasil.com: http://www.phpbrasil.com/script/E70GZp0kM8f9/classe-de-paginacao-em-php-mysql
Leia mais »»
Publicado em 27 de maio de 2008 ás 19:39
Versão somente mySQL….
<?php
/*
* CLASSE DE PÁGINAÇÃO EM PHP + MYSQL
* AUTOR : Édson Kuzniewski (Br0w)
* E-MAIL: contato@edsonk.com
* DATA : 27/05/2008
* VERSÃO: 1.2.1.2
*/
/**
[MODO DE USAR]==============================================================================================\
//Adicione a classe na página no qual ira usar
require_once("class.Paginacao.php");
//Criando uma conexão MySQL
if (!($conexao = mysql_connect('localhost', 'usuario', 'senha'))) {
echo "Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.";
exit;
}
$banco = "meuBancoDeDados"; //Define o banco no qual está se referindo a consulta!
//Crie um sql no qual queira que o resultado seja mostrado com paginação;***********************************
$sql = "SELECT *
FROM tabela
WHERE se tiver
ORDER BY id ASC ou DESC";
$paginacao = new Paginacao(); //Cria a paginação;
$paginacao->setMaximo("20"); //Define numéro de itens por página se não fica o padrão de 10;
$paginacao->setEstilo("2"); //Define o estilo de paginação, mude se quizer 1 ou 2;
$paginacao->setBtnPrimeiro("[Primeiro]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimo("[Último]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnAnterior("[Anterior]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnProximo("[Próximo]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnPrimeiroOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimoOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setUrlAdicional("id=1&categoria=3&texto=asdfg"); //Define a url adicional passada por parâmetro via url opcional;
$paginacao->setZero(true); //coloca zero aos números baixos de 10; 01 02... padrão ativado (true/false);
$paginacao->getNporPg(); //RETORNA NÚMERO DE ITENS POR PÁGINA
$paginacao->getNtotalPg(); //RETORNA O NÚMERO TOTAL DE PÁGINAS
$paginacao->__start($banco, $sql, $conexao); //Inicia a páginação;
$i=0;
while($row = mysql_fetch_array($paginacao->getResult())){
echo"linha com item nº $i = ".$row['item']."<br>";
$i++;
}
//Para mostrar a paginação coloque em sua página HTML ou PHP:***********************************************
$paginacao->getAnterior("estilo_on","estilo_off"); //Cria botão anterior, os estilos referidos são CSS
$paginacao->getPaginas("estilo_paginas"); //Cria nº de pg., os estilos referidos são CSS
$paginacao->getProximo("estilo_on","estilo_off"); //Cria botão próximo, os estilos referidos são CSS
//Sendo assim junte todos que o resultado seria:************************************************************
$paginacao->getAnterior("paginacao_on","paginacao_off").$paginacao->getPaginas("paginacao_paginas").$paginacao->getProximo("paginacao_on","paginacao_off");
//RESULTADO DEPENDE DO ESTILO******************************************************************************
[ESTILO 1]
< Anterior 1 2 3 4 [5] 6 7 8 Próximo >
< Anterior 1 2 3 4 5 [6] 7 8 Próximo >
o número de páginas total é mostrado sendo no exemplo 8 páginas . . .
[ESTILO 2]
<< Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >>
se tiver mais que 7 ele começa a tira 1 no começo e adicionar 1 no fim . . .
<< Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >>
[FIM DO MODO DE USAR]=======================================================================================/
**/
//=====================\
//[ INICIO DA CLASSE ] |
//=====================/
class Paginacao {
var $maximo; //variavel de número de itens por página;
var $pagina; //controle do número da página;
var $mat; //variavel para calculo de páginas;
var $inicio; //controle de exibição de itens inicio;
var $paginas; //variavel para calculo de páginas;
var $linhas; //número total de itens;
var $anterior; //controle de página anterior;
var $proximo; //controle de proxima página;
var $result; //result do sql;
var $nPaginas = 0; //número total de páginas;
var $btn_primeiro = "<< Primeiro"; //texto do botão com o link para a primeiro página;
var $btn_anterior = "< Anterior"; //texto do botão com o link para página anterior;
var $btn_proximo = "Próximo >"; //texto do botão com o link para próxima página;
var $btn_ultimo = "Último >>"; //texto do botão com o link para a última página;
var $sp = "/;\\"; //separa botões de nº pg. OBS: use ;(ponto e virgula para separar os lados);
var $btn_primeiro_on = true; //ativa e desativa o botão primeiro (true|false);
var $btn_ultimo_on = true; //ativa e desativa o botão último (true|false);
var $estilo = 2; //define estilo de paginação;
var $urlAdicional; //define url adicional passada por parâmetro pela url;
var $zero = true; //coloca zero aos números baixos de 10; 01 02...
/* CONSTRUTOR */
function Paginacao(){ }
/* SETA O NUMERO DE ITENS POR PÁGINA */
function setMaximo($var){
$this->maximo = $var;
}
/* SETA SEPARADORES DE BOTÕES DE NÚMERO DE PÁGINAS */
function setSP($var){
$this->sp = $var;
}
/* SETA O TEXTO DO BOTÃO PRIMEIRO */
function setBtnPrimeiro($var){
$this->btn_primeiro = $var;
}
/* SETA O TEXTO DO BOTÃO ANTERIOR */
function setBtnAnterior($var){
$this->btn_anterior = $var;
}
/* SETA O TEXTO DO BOTÃO PROXIMO */
function setBtnProximo($var){
$this->btn_proximo = $var;
}
/* SETA O TEXTO DO BOTÃO ÚLTIMO */
function setBtnUltimo($var){
$this->btn_ultimo = $var;
}
/* DEFINE SE O BOTÃO PRIMEIRO VAI SER EXIBIDO */
function setBtnPrimeiroOn($var){
$this->btn_primeiro_on = $var;
}
/* DEFINE SE O BOTÃO ÚLTIMO VAI SER EXIBIDO */
function setBtnUltimoOn($var){
$this->btn_ultimo_on = $var;
}
/* DEFINE O ESTILO DE PAGINAÇÃO */
function setEstilo($var){
$this->estilo = $var;
}
/* DEFINE URL ADICIONAR PARÂMETROS PASSADOS PELA URL */
function setUrlAdicional($var){
$this->urlAdicional = $var;
}
/* ATIVA O ZERO */
function setZero($var){
$this->zero = $var;
}
/* INICIALIZAÇÃO DO OBJETO */
function __start($banco, $sql, $conexao){
if($this->maximo == ""){ //se não for setado número de itens por página pega o padrão;
$this->maximo = 10;
}
if($_REQUEST["pagina"] == "") {
$this->pagina = "1"; //se página igual a branco seta página = 1;
}else{
$this->pagina = $_REQUEST["pagina"]; //pega o número da página passada por parâmetro ex:?pagina=2;
}
$this->mat = $this->pagina - 1; //inicia com a linha zero do banco;
$this->inicio = $this->mat * $this->maximo; //calcula o valor de inicio da lista de acordo com a página;
$limita = $sql." LIMIT ".$this->inicio.",".$this->maximo; //gera o sql para pesquisa no banco com a limitação;
$this->result = mysql_db_query($banco, $limita, $conexao); //executa sql com a limitação;
$result = mysql_db_query($banco, $sql, $conexao); //executa sql sem a limitação;
$this->linhas = mysql_num_rows($result); //pega valor total de itens do banco;
$this->paginas = ceil($this->linhas / $this->maximo) - 1; //pega número total de páginas pela quantidade máxima de itens;
$this->nPaginas = $this->paginas; //guarda valor na variavel;
$this->anterior = $this->pagina - 1; //informa o a página anterior;
$this->proximo = $this->pagina + 1; //informa a próxima página;
}
/* RETORNA O RESULTADO DO SQL COM O LIMITE DE ITENS POR LINHA */
function getResult(){
return $this->result;
}
/* RETORNA NÚMERO DE ITENS POR PÁGINA */
function getNporPg(){
return $this->maximo;
}
/* RETORNA O NÚMERO TOTAL DE PÁGINAS */
function getNtotalPg(){
return ($this->nPaginas+1);
}
/* RETORNA O BOTÃO PRIMEIRO E O ANTERIOR */
function getAnterior($on, $off){
if($this->btn_primeiro_on == true){ //se botão primeiro ativado;
if($this->pagina == 1){ //se é primeira página;
echo "<span class=\"".$off."\">".$this->btn_primeiro."</span> "; //botão off
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}
}
}
if($this->anterior > 0){ //se anterior maior que 0;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_anterior."</span> "; //botão off
}
}
/* RETORNA O NÚMERO DE PÁGINAS PARA NAVEGAÇÃO */
function getPaginas($on){
$sp = explode(";", $this->sp); //pega variaves de separação de botões de nº de pg;
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ < Anterior 1 2 3 4 [5] 6 7 8 Próximo > ] |
//[ < Anterior 1 2 3 4 5 [6] 7 8 Próximo > ] |
//[ o número de páginas total é mostrado . . . ] |
//===============================================================|
if($this->estilo == 1){
echo" <b>".$sp[0]."</b> ";
for($i=0; $i <= $this->nPaginas; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($this->zero == true && $pag < 10){
$pag = "0".$pag;
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> ";
}
//===============================================================|
//[ FIM PG 01 ] |
//===============================================================/
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ << Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >> ] |
//[ << Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >> ] |
//===============================================================|
if($this->estilo == 2){
echo" <b>".$sp[0]."</b> "; //separador
if($this->pagina < 5){
$i = 0;
if($this->nPaginas > 5){
$j = 6;
}else{
$j = $this->nPaginas;
}
}else{
if($this->pagina == 5 && $this->nPaginas <= 5){
$i = 0;
$j = $this->pagina - 1;
}else{
if($this->pagina <= ($this->nPaginas + 1)){
$i = ($this->pagina - 4);
$j = $this->pagina + 2;
if($j > $this->nPaginas){
if($this->pagina == ($this->nPaginas+1)){
$j = $this->pagina - 1;
$teste = ($this->nPaginas + 3) - $j;
$i = $i - $teste;
}else{
if($this->pagina == 6){
//[INICIO][correção 18/05/2008]
if($this->getNtotalPg() == 8){
$i = ($i - 1);
$j = $this->pagina + 1;
}else{
$i = ($i - 2); //[correção 17/05/2008]
$j = $this->pagina + 0;
}
//[FIM][correção 18/05/2008]
}else{
$i = ($this->pagina - 5);
if($j > $this->nPaginas){
$j = $this->nPaginas;
if(($this->pagina+1) == ($this->nPaginas+1)){
$teste = ($this->nPaginas + 1) - $j;
$i = $i - $teste;
}
}
}
}
}
}else{
$i = 0;
$j = $this->nPaginas;
}
}
}
for($i; $i <= $j; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($this->zero == true && $pag < 10){
$pag = "0".$pag;
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> "; //separador;
}
//===============================================================|
//[ FIM PG 02 ] |
//===============================================================/
}
/* RETORNA O BOTÃO PROXIMO E O ÚLTIMO */
function getProximo($on, $off){
if($this->pagina <= $this->paginas){ //se página menor ou igual a numero total de páginas;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_proximo."</span> "; //botão off
}
if($this->btn_ultimo_on == true){ //se botão último ativado
if($this->pagina > $this->nPaginas){ //se página maior que número total de páginas;
echo "<span class=\"".$off."\">".$this->btn_ultimo."</span> "; //botão off;
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}
}
}
}
}
//==================\
//[ FIM DA CLASSE ] |
//==================/
?>
Download: classPaginacao.php versão 1.2.1.2
Publicado em 17 de maio de 2008 ás 21:53
1 – CORREÇÃO DO ESTILO 2 DE PAGINAÇÃO;
2 – COMANDOS NOVOS ADICIONADOS;
3 – BOTÕES PRIMEIRO E ÚLTIMO DISPONÍVEL PARA O ESTILO 1;
<?php
/*
* CLASSE DE PÁGINAÇÃO EM PHP + MYSQL, USANDO A BIBLIOTECA "ADODB"
* AUTOR : Édson Kuzniewski (Br0w)
* E-MAIL: contato@edsonk.com
* DATA : 17/05/2008
* VERSÃO: 1.2.0.1
*/
/*
* [ INFO DE ATUALIZAÇÃO ]
*
* 1 - CORREÇÃO DO ESTILO 2 DE PAGINAÇÃO;
* 2 - COMANDOS NOVOS ADICIONADOS;
* 3 - BOTÕES PRIMEIRO E ÚLTIMO DISPONÍVEL PARA O ESTILO 1;
*/
/**
[MODO DE USAR]==============================================================================================\
//Adicione a classe na página no qual ira usar
require_once("class.Paginacao.php");
//Crie um sql no qual queira que o resultado seja mostrado com paginação;***********************************
$sql = "SELECT *
FROM tabela
WHERE se tiver
ORDER BY id ASC ou DESC";
$paginacao = new Paginacao(); //Cria a paginação;
$paginacao->setMaximo("20"); //Define numéro de itens por página se não fica o padrão de 10;
$paginacao->setEstilo("2"); //Define o estilo de paginação, mude se quizer 1 ou 2;
$paginacao->setBtnPrimeiro("[Primeiro]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimo("[Último]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnAnterior("[Anterior]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnProximo("[Próximo]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnPrimeiroOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimoOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setUrlAdicional("id=1&categoria=3&texto=asdfg"); //Define a url adicional passada por parâmetro via url opcional;
$paginacao->setZero(true); //coloca zero aos números baixos de 10; 01 02... padrão ativado (true/false);
$paginacao->getNporPg(); //RETORNA NÚMERO DE ITENS POR PÁGINA
$paginacao->getNtotalPg(); //RETORNA O NÚMERO TOTAL DE PÁGINAS
$paginacao->__start($db, $sql); //Inicia a páginação;
$i=0;
while($row = $paginacao->getResult()->FetchNextObject()){
echo"linha com item nº $i tem $row->VARIAVEL";
$i++;
}
//Para mostrar a paginação coloque em sua página HTML ou PHP:***********************************************
$paginacao->getAnterior("estilo_on","estilo_off"); //Cria botão anterior, os estilos referidos são CSS
$paginacao->getPaginas("estilo_paginas"); //Cria nº de pg., os estilos referidos são CSS
$paginacao->getProximo("estilo_on","estilo_off"); //Cria botão próximo, os estilos referidos são CSS
//Sendo assim junte todos que o resultado seria:************************************************************
$paginacao->getAnterior("paginacao_on","paginacao_off").$paginacao->getPaginas("paginacao_paginas").$paginacao->getProximo("paginacao_on","paginacao_off");
//RESULTADO DEPENDE DO ESTILO******************************************************************************
[ESTILO 1]
< Anterior 1 2 3 4 [5] 6 7 8 Próximo >
< Anterior 1 2 3 4 5 [6] 7 8 Próximo >
o número de páginas total é mostrado sendo no exemplo 8 páginas . . .
[ESTILO 2]
<< Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >>
se tiver mais que 7 ele começa a tira 1 no começo e adicionar 1 no fim . . .
<< Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >>
[FIM DO MODO DE USAR]=======================================================================================/
**/
//=====================\
//[ INICIO DA CLASSE ] |
//=====================/
class Paginacao {
var $maximo; //variavel de número de itens por página;
var $pagina; //controle do número da página;
var $mat; //variavel para calculo de páginas;
var $inicio; //controle de exibição de itens inicio;
var $paginas; //variavel para calculo de páginas;
var $linhas; //número total de itens;
var $anterior; //controle de página anterior;
var $proximo; //controle de proxima página;
var $result; //result do sql;
var $nPaginas = 0; //número total de páginas;
var $btn_primeiro = "<< Primeiro"; //texto do botão com o link para a primeiro página;
var $btn_anterior = "< Anterior"; //texto do botão com o link para página anterior;
var $btn_proximo = "Próximo >"; //texto do botão com o link para próxima página;
var $btn_ultimo = "Último >>"; //texto do botão com o link para a última página;
var $sp = "/;\\"; //separa botões de nº pg. OBS: use ;(ponto e virgula para separar os lados);
var $btn_primeiro_on = true; //ativa e desativa o botão primeiro (true|false);
var $btn_ultimo_on = true; //ativa e desativa o botão último (true|false);
var $estilo = 2; //define estilo de paginação;
var $urlAdicional; //define url adicional passada por parâmetro pela url;
var $zero = true; //coloca zero aos números baixos de 10; 01 02...
/* CONSTRUTOR */
function Paginacao(){ }
/* SETA O NUMERO DE ITENS POR PÁGINA */
function setMaximo($var){
$this->maximo = $var;
}
/* SETA SEPARADORES DE BOTÕES DE NÚMERO DE PÁGINAS */
function setSP($var){
$this->sp = $var;
}
/* SETA O TEXTO DO BOTÃO PRIMEIRO */
function setBtnPrimeiro($var){
$this->btn_primeiro = $var;
}
/* SETA O TEXTO DO BOTÃO ANTERIOR */
function setBtnAnterior($var){
$this->btn_anterior = $var;
}
/* SETA O TEXTO DO BOTÃO PROXIMO */
function setBtnProximo($var){
$this->btn_proximo = $var;
}
/* SETA O TEXTO DO BOTÃO ÚLTIMO */
function setBtnUltimo($var){
$this->btn_ultimo = $var;
}
/* DEFINE SE O BOTÃO PRIMEIRO VAI SER EXIBIDO */
function setBtnPrimeiroOn($var){
$this->btn_primeiro_on = $var;
}
/* DEFINE SE O BOTÃO ÚLTIMO VAI SER EXIBIDO */
function setBtnUltimoOn($var){
$this->btn_ultimo_on = $var;
}
/* DEFINE O ESTILO DE PAGINAÇÃO */
function setEstilo($var){
$this->estilo = $var;
}
/* DEFINE URL ADICIONAR PARÂMETROS PASSADOS PELA URL */
function setUrlAdicional($var){
$this->urlAdicional = $var;
}
/* ATIVA O ZERO */
function setZero($var){
$this->zero = $var;
}
/* INICIALIZAÇÃO DO OBJETO */
function __start($db, $sql){
if($this->maximo == ""){ //se não for setado número de itens por página pega o padrão;
$this->maximo = 10;
}
if($_REQUEST["pagina"] == "") {
$this->pagina = "1"; //se página igual a branco seta página = 1;
}else{
$this->pagina = $_REQUEST["pagina"]; //pega o número da página passada por parâmetro ex:?pagina=2;
}
$this->mat = $this->pagina - 1; //inicia com a linha zero do banco;
$this->inicio = $this->mat * $this->maximo; //calcula o valor de inicio da lista de acordo com a página;
$limita = $sql." LIMIT ".$this->inicio.",".$this->maximo; //gera o sql para pesquisa no banco com a limitação;
$this->result = $db->Execute($limita); //executa sql com a limitação;
$result = $db->Execute($sql); //executa sql sem a limitação;
$this->linhas = $result->RecordCount(); //pega valor total de itens do banco;
$this->paginas = ceil($this->linhas / $this->maximo) - 1; //pega número total de páginas pela quantidade máxima de itens;
$this->nPaginas = $this->paginas; //guarda valor na variavel;
$this->anterior = $this->pagina - 1; //informa o a página anterior;
$this->proximo = $this->pagina + 1; //informa a próxima página;
}
/* RETORNA O RESULTADO DO SQL COM O LIMITE DE ITENS POR LINHA */
function getResult(){
return $this->result;
}
/* RETORNA NÚMERO DE ITENS POR PÁGINA */
function getNporPg(){
return $this->maximo;
}
/* RETORNA O NÚMERO TOTAL DE PÁGINAS */
function getNtotalPg(){
return ($this->nPaginas+1);
}
/* RETORNA O BOTÃO PRIMEIRO E O ANTERIOR */
function getAnterior($on, $off){
if($this->btn_primeiro_on == true){ //se botão primeiro ativado;
if($this->pagina == 1){ //se é primeira página;
echo "<span class=\"".$off."\">".$this->btn_primeiro."</span> "; //botão off
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}
}
}
if($this->anterior > 0){ //se anterior maior que 0;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_anterior."</span> "; //botão off
}
}
/* RETORNA O NÚMERO DE PÁGINAS PARA NAVEGAÇÃO */
function getPaginas($on){
$sp = explode(";", $this->sp); //pega variaves de separação de botões de nº de pg;
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ < Anterior 1 2 3 4 [5] 6 7 8 Próximo > ] |
//[ < Anterior 1 2 3 4 5 [6] 7 8 Próximo > ] |
//[ o número de páginas total é mostrado . . . ] |
//===============================================================|
if($this->estilo == 1){
echo" <b>".$sp[0]."</b> ";
for($i=0; $i <= $this->nPaginas; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($this->zero == true && $pag < 10){
$pag = "0".$pag;
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> ";
}
//===============================================================|
//[ FIM PG 01 ] |
//===============================================================/
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ << Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >> ] |
//[ << Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >> ] |
//===============================================================|
if($this->estilo == 2){
echo" <b>".$sp[0]."</b> "; //separador
if($this->pagina < 5){
$i = 0;
if($this->nPaginas > 5){
$j = 6;
}else{
$j = $this->nPaginas;
}
}else{
if($this->pagina == 5 && $this->nPaginas <= 5){
$i = 0;
$j = $this->pagina - 1;
}else{
if($this->pagina <= ($this->nPaginas + 1)){
$i = ($this->pagina - 4);
$j = $this->pagina + 2;
if($j > $this->nPaginas){
if($this->pagina == ($this->nPaginas+1)){
$j = $this->pagina - 1;
$teste = ($this->nPaginas + 3) - $j;
$i = $i - $teste;
}else{
if($this->pagina == 6){
$i = ($i - 2); //[correção 17/05/2008]
$j = $this->pagina + 0;
}else{
$i = ($this->pagina - 5);
if($j > $this->nPaginas){
$j = $this->nPaginas;
if(($this->pagina+1) == ($this->nPaginas+1)){
$teste = ($this->nPaginas + 1) - $j;
$i = $i - $teste;
}
}
}
}
}
}else{
$i = 0;
$j = $this->nPaginas;
}
}
}
for($i; $i <= $j; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($this->zero == true && $pag < 10){
$pag = "0".$pag;
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> "; //separador;
}
//===============================================================|
//[ FIM PG 02 ] |
//===============================================================/
}
/* RETORNA O BOTÃO PROXIMO E O ÚLTIMO */
function getProximo($on, $off){
if($this->pagina <= $this->paginas){ //se página menor ou igual a numero total de páginas;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_proximo."</span> "; //botão off
}
if($this->btn_ultimo_on == true){ //se botão último ativado
if($this->pagina > $this->nPaginas){ //se página maior que número total de páginas;
echo "<span class=\"".$off."\">".$this->btn_ultimo."</span> "; //botão off;
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}
}
}
}
}
//==================\
//[ FIM DA CLASSE ] |
//==================/
?>
Download: classPaginacao.php versão 1.2.0.1
Publicado em 05 de abril de 2008 ás 22:12
Uma pequena atualização… agora possibilita passar valores por parâmetro via url.
<?php
/*
* CLASSE DE PÁGINAÇÃO EM PHP + MYSQL, USANDO A BIBLIOTECA "ADODB"
* AUTOR : Édson Kuzniewski (Br0w)
* E-MAIL: contato@edsonk.com
* DATA : 05/04/2008
* VERSÃO: 1.1.0.0
*/
/**
[MODO DE USAR]==============================================================================================\
//Adicione a classe na página no qual ira usar
require_once("class.Paginacao.php");
//Crie um sql no qual queira que o resultado seja mostrado com paginação;***********************************
$sql = "SELECT *
FROM tabela
WHERE se tiver
ORDER BY id ASC ou DESC";
$paginacao = new Paginacao(); //Cria a paginação;
$paginacao->setMaximo("20"); //Define numéro de itens por página se não fica o padrão de 10;
$paginacao->setEstilo("2"); //Define o estilo de paginação, mude se quizer 1 ou 2;
$paginacao->setBtnPrimeiro("[Primeiro]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimo("[Último]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnAnterior("[Anterior]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnProximo("[Próximo]"); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnPrimeiroOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->setBtnUltimoOn(true); //Define texto do botão de padrão já está definido mude se quizer;
$paginacao->seturlAdicional("id=1&categoria=3&texto=asdfg"); //Define a url adicional passada por parâmetro via url opcional;
$paginacao->__start($db, $sql); //Inicia a páginação;
$i=0;
while($row = $paginacao->getResult()->FetchNextObject()){
echo"linha com item nº $i";
$i++;
}
//Para mostrar a paginação coloque em sua página HTML ou PHP:***********************************************
$paginacao->getAnterior("estilo_on","estilo_off"); //Cria botão anterior, os estilos referidos são CSS
$paginacao->getPaginas("estilo_paginas"); //Cria nº de pg., os estilos referidos são CSS
$paginacao->getProximo("estilo_on","estilo_off"); //Cria botão próximo, os estilos referidos são CSS
//Sendo assim junte todos que o resultado seria:************************************************************
$paginacao->getAnterior("paginacao_on","paginacao_off").$paginacao->getPaginas("paginacao_paginas").$paginacao->getProximo("paginacao_on","paginacao_off");
//RESULTADO DEPENDE DO ESTILO******************************************************************************
[ESTILO 1]
< Anterior 1 2 3 4 [5] 6 7 8 Próximo >
< Anterior 1 2 3 4 5 [6] 7 8 Próximo >
o número de páginas total é mostrado sendo no exemplo 8 páginas . . .
[ESTILO 2]
<< Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >>
se tiver mais que 7 ele começa a tira 1 no começo e adicionar 1 no fim . . .
<< Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >>
[FIM DO MODO DE USAR]=======================================================================================/
**/
//=====================\
//[ INICIO DA CLASSE ] |
//=====================/
class Paginacao {
var $maximo; //variavel de número de itens por página;
var $pagina; //controle do número da página;
var $mat; //variavel para calculo de páginas;
var $inicio; //controle de exibição de itens inicio;
var $paginas; //variavel para calculo de páginas;
var $linhas; //número total de itens;
var $anterior; //controle de página anterior;
var $proximo; //controle de proxima página;
var $result; //result do sql;
var $nPaginas = 0; //número total de páginas;
var $btn_primeiro = "<< Primeiro"; //texto do botão com o link para a primeiro página;
var $btn_anterior = "< Anterior"; //texto do botão com o link para página anterior;
var $btn_proximo = "Próximo >"; //texto do botão com o link para próxima página;
var $btn_ultimo = "Último >>"; //texto do botão com o link para a última página;
var $sp = "/;\\"; //separa botões de nº pg. OBS: use ;(ponto e virgula para separar os lados);
var $btn_primeiro_on = true; //ativa e desativa o botão primeiro (true|false);
var $btn_ultimo_on = true; //ativa e desativa o botão último (true|false);
var $estilo = 2; //define estilo de paginação;
var $urlAdicional; //define url adicional passada por parâmetro pela url;
/* CONSTRUTOR */
function Paginacao(){ }
/* SETA O NUMERO DE ITENS POR PÁGINA */
function setMaximo($var){
$this->maximo = $var;
}
/* SETA SEPARADORES DE BOTÕES DE NÚMERO DE PÁGINAS */
function setSP($var){
$this->sp = $var;
}
/* SETA O TEXTO DO BOTÃO PRIMEIRO */
function setBtnPrimeiro($var){
$this->btn_primeiro = $var;
}
/* SETA O TEXTO DO BOTÃO ANTERIOR */
function setBtnAnterior($var){
$this->btn_anterior = $var;
}
/* SETA O TEXTO DO BOTÃO PROXIMO */
function setBtnProximo($var){
$this->btn_proximo = $var;
}
/* SETA O TEXTO DO BOTÃO ÚLTIMO */
function setBtnUltimo($var){
$this->btn_ultimo = $var;
}
/* DEFINE SE O BOTÃO PRIMEIRO VAI SER EXIBIDO */
function setBtnPrimeiroOn($var){
$this->btn_primeiro_on = $var;
}
/* DEFINE SE O BOTÃO ÚLTIMO VAI SER EXIBIDO */
function setBtnUltimoOn($var){
$this->btn_ultimo_on = $var;
}
/* DEFINE O ESTILO DE PAGINAÇÃO */
function setEstilo($var){
$this->estilo = $var;
}
/* DEFINE URL ADICIONAR PARÂMETROS PASSADOS PELA URL */
function seturlAdicional($var){
$this->urlAdicional = $var;
}
/* INICIALIZAÇÃO DO OBJETO */
function __start($db, $sql){
if($this->maximo == ""){ //se não for setado número de itens por página pega o padrão;
$this->maximo = 10;
}
if($_REQUEST["pagina"] == "") {
$this->pagina = "1"; //se página igual a branco seta página = 1;
}else{
$this->pagina = $_REQUEST["pagina"]; //pega o número da página passada por parâmetro ex:?pagina=2;
}
$this->mat = $this->pagina - 1; //inicia com a linha zero do banco;
$this->inicio = $this->mat * $this->maximo; //calcula o valor de inicio da lista de acordo com a página;
$limita = $sql." LIMIT ".$this->inicio.",".$this->maximo; //gera o sql para pesquisa no banco com a limitação;
$this->result = $db->Execute($limita); //executa sql com a limitação;
$result = $db->Execute($sql); //executa sql sem a limitação;
$this->linhas = $result->RecordCount(); //pega valor total de itens do banco;
$this->paginas = ceil($this->linhas / $this->maximo) - 1; //pega número total de páginas pela quantidade máxima de itens;
$this->nPaginas = $this->paginas; //guarda valor na variavel;
$this->anterior = $this->pagina - 1; //informa o a página anterior;
$this->proximo = $this->pagina + 1; //informa a próxima página;
}
/* RETORNA O RESULTADO DO SQL COM O LIMITE DE ITENS POR LINHA */
function getResult(){
return $this->result;
}
/* RETORNA O BOTÃO PRIMEIRO E O ANTERIOR */
function getAnterior($on, $off){
if($this->btn_primeiro_on == true && $this->estilo == 2){ //se botão primeiro ativado;
if($this->pagina == 1){ //se é primeira página;
echo "<span class=\"".$off."\">".$this->btn_primeiro."</span> "; //botão off
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=1\">".$this->btn_primeiro."</a></span> "; //botão on
}
}
}
if($this->anterior > 0){ //se anterior maior que 0;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_anterior."</span> "; //botão off
}
}
/* RETORNA O NÚMERO DE PÁGINAS PARA NAVEGAÇÃO */
function getPaginas($on){
$sp = explode(";", $this->sp); //pega variaves de separação de botões de nº de pg;
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ < Anterior 1 2 3 4 [5] 6 7 8 Próximo > ] |
//[ < Anterior 1 2 3 4 5 [6] 7 8 Próximo > ] |
//[ o número de páginas total é mostrado . . . ] |
//===============================================================|
if($this->estilo == 1){
echo" <b>".$sp[0]."</b> ";
for($i=0; $i <= $this->nPaginas; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> ";
}
//===============================================================|
//[ FIM PG 01 ] |
//===============================================================/
//===============================================================\
//[ EXIBE PAGINAÇÂO NO ESTILO ] |
//[ << Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >> ] |
//[ << Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >> ] |
//===============================================================|
if($this->estilo == 2){
echo" <b>".$sp[0]."</b> "; //separador
if($this->pagina < 5){
$i = 0;
if($this->nPaginas > 5){
$j = 6;
}else{
$j = $this->nPaginas;
}
}else{
if($this->pagina == 5 && $this->nPaginas <= 5){
$i = 0;
$j = $this->pagina - 1;
}else{
if($this->pagina <= ($this->nPaginas + 1)){
$i = ($this->pagina - 4);
$j = $this->pagina + 2;
if($j > $this->nPaginas){
if($this->pagina == ($this->nPaginas+1)){
$j = $this->pagina - 1;
$teste = ($this->nPaginas + 3) - $j;
$i = $i - $teste;
}else{
if($this->pagina == 6){
$j = $this->pagina + 1;
}else{
$i = ($this->pagina - 5);
if($j > $this->nPaginas){
$j = $this->nPaginas;
if(($this->pagina+1) == ($this->nPaginas+1)){
$teste = ($this->nPaginas + 1) - $j;
$i = $i - $teste;
}
}
}
}
}
}else{
$i = 0;
$j = $this->nPaginas;
}
}
}
for($i; $i <= $j; $i++){
$pag = $i +1;
if($this->urlAdicional != ""){
echo " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$pag."\">";
}else{
echo " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">";
}
if($pag == $this->pagina){
echo "[<b>".$pag."</b>]";
}else{
echo $pag;
}
echo "</a></span> ";
}
echo" <b>".$sp[1]."</b> "; //separador;
}
//===============================================================|
//[ FIM PG 02 ] |
//===============================================================/
}
/* RETORNA O BOTÃO PROXIMO E O ÚLTIMO */
function getProximo($on, $off){
if($this->pagina <= $this->paginas){ //se página menor ou igual a numero total de páginas;
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //botão on
}
}else{
echo "<span class=\"".$off."\">".$this->btn_proximo."</span> "; //botão off
}
if($this->btn_ultimo_on == true && $this->estilo == 2){ //se botão último ativado
if($this->pagina > $this->nPaginas){ //se página maior que número total de páginas;
echo "<span class=\"".$off."\">".$this->btn_ultimo."</span> "; //botão off;
}else{
if($this->urlAdicional != ""){
echo "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}else{
echo "<span class=\"".$on."\"><a href=\"?pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //botão on
}
}
}
}
}
//==================\
//[ FIM DA CLASSE ] |
//==================/
?>