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.










