Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Igautemi Amaral

Paginação estilo Google

Recommended Posts

Criei essa classe pq tava usando muita paginação nos códigos e queria que ficasse como a paginação do google.

É necessário que a conexão com o banco esteja ok.

<?//Classe para paginação estilo Google//$res: Resource da página										//$resTot: Resource de toda a consulta							//$rws: Número de linhas de resultados da página				//$rwsTot: Número de linhas de toda a consulta					//Métodos															//paginacao: Gerador dos resultados e cálculos				//ret: Retorna campo desejado									//gera_paginas: Cria (em html) a lista de lilnks das páginas	//																//Author: Iguatemi Amaral									  //Email: icanfig@yahoo.com.br//Versão: 0.3bclass paginacao{	var $res, $resTot, $rws, $rwsTot, $links;	//	Método: $sql(query),$rp(Resultados por página),$p(Número da página)	function paginacao($sql,$rp)	{		$this->links['nr'] = $rp;		$this->links['pagina'] = $_REQUEST['pagina'];		if(!$this->links['pagina']) $this->links['pagina'] = 0;				$this->links['inicio'] = $this->links['pagina'] * $this->links['nr'];		$fim = $this->links['nr'];				$sqlLimit = $sql." limit ".$this->links['inicio'].",".$this->links['nr'];		$this->res = mysql_query($sqlLimit);		$this->rws = mysql_num_rows($this->res);				$sqlTot = $sql;		$resTot = mysql_query($sqlTot);		$this->rwsTot = mysql_num_rows($resTot);		$this->links['paginas'] = $this->rwsTot / $this->links['nr'];	}	//	Método que retorna o campo especificado da linha especificada	function ret($campo,$linha)	{		return mysql_result($this->res,$linha,$campo);	}		//	Método que gera os números para paginação//	$arquivo: arquivo para onde os links vão apontar, //	o correto seria a mesma página que tem a paginação,//	mas vai que de repente...//	$cabecalho: qualquer variável GET que queira passar//	$css: estilo para os links	function gera_paginas($arquivo,$cabecalho,$css)	{		if($this->links['paginas'] > 1)		{ 			if($this->links['pagina'] > 0)			{				$this->links['anterior'] = true;			}			if($this->links['pagina'] < $this->links['paginas']-1)			{				$this->links['proxima'] = true;			}						if($this->links['anterior'])			{				?><a href="<?=$arquivo?>?pagina=<?				$ant = $this->links['pagina'] - 1; 				echo $ant; ?>&<?=$cabecalho?>" class="<?=$css?>"><?			}			?><span class="<?=$css?>">anterior</span><? 			if($this->links['anterior'])			{				?></a> <?			}						$variacao['padrao'] = 6;			if($this->links['paginas'] > $variacao['padrao'])			{				if($this->links['pagina'] - $variacao['padrao'] <= $variacao['padrao'])				{					$variacao['inicio'] = 0;					$variacao['fim'] = 10 + $this->links['pagina'];				}				if($this->links['pagina'] - $variacao['padrao'] == 1) 				{					$variacao['inicio'] = $this->links['pagina'] - $variacao['padrao'];					$variacao['fim'] = $this->links['pagina'] + $variacao['padrao'];				}				if($this->links['pagina'] - $variacao['padrao'] > 1)				{					$variacao['inicio'] = $this->links['pagina'] - $variacao['padrao'];					$variacao['fim'] = $this->links['pagina'] + $variacao['padrao'] + 1;				}				if($this->links['pagina'] + $variacao['padrao'] >= $this->links['paginas'])				{					$variacao['inicio'] = $this->links['pagina'] - $variacao['padrao'];					$variacao['fim'] = $this->links['paginas'];				}												for($n = $variacao['inicio']; $n < $variacao['fim']; $n++)				{					?> <a href="<?=$arquivo?>?pagina=<?=$n?>&<?=$cabecalho?>" class="<?=$css?>"> <?					if($this->links['pagina'] == $n) echo '<b>';					echo $n+1;					if($this->links['pagina'] == $n) echo '</b>';					?></a> <?				}			}			else			{				for($n = 0; $n < $this->links['paginas']; $n++)				{					?> <a href="<?=$arquivo?>?pagina=<?=$n?>&<?=$cabecalho?>" class="<?=$css?>"> <?					if($this->links['pagina'] == $n) echo '<b>';					echo $n+1;					if($this->links['pagina'] == $n) echo '</b>';					?></a> <?				}			}			if($this->links['proxima'])			{				?><a href="<?=$arquivo?>?pagina=<?				$ant = $this->links['pagina'] + 1; 				echo $ant; ?>&<?=$cabecalho?>" class="<?=$css?>"><?			}			?><span class="<?=$css?>">próxima</span><? 			if($this->links['proxima'])			{				?></a><?			}		}	}}?>

Exemplo

<?require_once("ClassPaginacao.php");$list = new paginacao("select * from tabCadastro",10);?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Paginação</title></head><body><table width="471" border="0" cellspacing="0" cellpadding="0">  <tr>	<td width="199" align="center">Nome</td>	<td width="272" align="center">E-mail</td>  </tr>  <?  for($i = 0; $i < $list->rws; $i++)  {  ?>  <tr>	<td><?= $list->ret('dsNome')?></td>	<td><?= $list->ret('dsEmail')?></td>  </tr>  <?  }  ?>  <tr>	<td colspan="2"><? $list->gera_paginas('consulta.php','idUser=11','links'); ?></td>  </tr></table></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta é uma classe baseada em php4

 

diz aí qual foi o erro

O erro é que a paginção tá meio atrapalhada, se for clicado em próximo, aparecem os links -4,-3,-2,-1....,

e a medida que voce clica nos links de números maiores vão se aumentando esses valores, ou seja se clicar no link de número 3, aparecem -3,-2....., se for no link 2, aparecem -2,-1,0.......

 

 

Esta é uma classe baseada em php4

 

diz aí qual foi o erro

Ah, outra coisa, que me esqueci, na página de exemplo, onde você chama a função ret() da classe, tem de ser incluído o outro argumento da função, ou seja onde se vê <td><?= $list->ret('dsNome')?></td>, teremos de completar com outro argumento ou seja, ficaria talves assim:

<td><?= $list->ret('dsNome', $i)?></td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.