Jump to content


Photo

[resolvido] Paginação Com Número Pre-definido


  • Faça o login para participar
2 replies to this topic

#1 onlooker

onlooker

    Normal

  • Usuários
  • 102 posts
  • Sexo:Masculino
  • Interesses:Php, MySql, JS...

Posted 29/07/2009, 11:29

Fala galera, beleza?

Bom, tenho uma duvida que me fez perder algumas horas de raciocinio, mas nao me fez chegar a lugar algum, resolvi vir aqui pedir ajuda dos mais experientes. Estou fazendo um sistema que possui paginação, mas essa paginação precisa sempre exibir a mesma quantidade de resultados.

Exemplo: Se houverem 64 resultados, e cada página exibir 10, a sétima página nao poderá exibir somente os 4 que restam, mas sim os 4 + 6 anteriores. É algo parecido com a paginação do orkut. Consigo fazer a paginação, mas nao consigo fazer esse esquema de sempre listar um numero pre-definido de resultados. Alguem pode me dar uma força na lógica?

Estou usando o seguinte esquema pra paginação:


<?
//Consulta a ser feita no MySQL
$sql = "SELECT * FROM tabela ORDER BY coluna DESC";

//Número de registros paginados por página
$registros_pagina = "10";

//Resgato a página que estiver sendo acessada pela paginação
$lista = (int)$_GET["lista"];

//Se for a página inicial da consulta, a variável $lista será nula
if(!$lista) {
	$pc = "1";
}
//Caso contrário, declaro o valor atual da variável $lista
else {
	$pc = $lista;
}

$inicio = $pc - 1;
$inicio = $inicio * $registros_pagina;

//Limito a consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima
$resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina");

//consulta a quantidade total de registros
$todos = mysql_query("$sql");

//Armazeno a quantidade total de registros
$tr = mysql_num_rows($todos);

//Armazeno o resultado da quantidade total de registros pela quantidade de registros por página
$tp = $tr / $registros_pagina;

//Se não houverem registros a se exibir, é acusado o retorno abaixo
if(mysql_num_rows($resultado) < 1) {
	echo "Nenhum registro encontrado";
}
//Caso contrário é exibido o resultado da consulta
else {
	//Exibo o resultado dos registros encontrados na consulta
	while($linha = mysql_fetch_array($resultado)) {
		$coluna = $linha["coluna"];

		echo "$coluna<br /><br />";
	}

	//E por fim monto os links da paginação
	$tp = ceil($tp);
	if($pc>1) {
		$anterior = $pc - 1;
		echo "<a href=\"?lista=$anterior\">[Anterior]</a> ";
	}
	for($i=$pc-5;$i<$pc;$i++) {
		if($i<=0) {
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";
		}
	}
	for($i=$pc;$i<=$pc+5;$i++) {
		if($i==$tp) {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}

			echo "</a> ";
			break;
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";

			if($i==$pc+5 && $tp>$pc+5) {
				echo " ... <a href=\"?lista=$tp\">[$tp]</a>";
			}
		}
	}
	if($pc<$tp) {
		$proxima = $pc + 1;
		echo " <a href=\"?lista=$proxima\">[Próxima]</a>";
	}
}
?>

Edição feita por: onlooker, 29/07/2009, 13:07.

"Você só é você quando ninguém está olhando" (Ann Landers)

#2 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 29/07/2009, 12:03

Bom dia amigo,
Bacana?

Tenta alguma coisa tipo isso :

[codebox]

$r = mysql_num_rows(resultado);
if($r < $registros_pagina)
$inicio = $inicio - ($registros_pagina - $r);



[/codebox]

Não testei nem pensei muito também!
Pode estar meio errado mas é um caminho que você pode seguir...

Depois posta ai o que deu ai!

Abraços e até a próxima!
Mateus Antunes
MBASistemas

#3 onlooker

onlooker

    Normal

  • Usuários
  • 102 posts
  • Sexo:Masculino
  • Interesses:Php, MySql, JS...

Posted 29/07/2009, 13:06

Fala MBA!

Pô cara, você me quebrou um grande galho hehe
Deu certo sim, eu tinha pensado ate em algo parecido, mas nao tinha conseguido fazer dar certo. Sua lógica funcionou perfeitamente.

Abração!
"Você só é você quando ninguém está olhando" (Ann Landers)




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq