Ir para conteúdo

POWERED BY:

Arquivado

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

Fábio_Design

Paginação PHP Ocultando alguns links anteriores!

Recommended Posts

Ola pessoal bom dia.. Sou novo por aqui e preciso de uma ajudinha de vcs, seguinte to tentando fazer uma paginação para um sistema de notícias onde exibirá as ultimas. Tipo « Anterior | 1 | 2 | 3 | Próximo »

 

Bom ja conseguir fazer uma parte na verdade, garinpando em algumas paginas e aqui no forum tb, + tive uma nessidade e naum encontrei nada assim, por exemplo se aumentar a quantidade de noticias para 5000 posts e eu colocar pra exibir 50 posts por pagina ele vai criar | 1 | 2 | ate o | 100 | entaum naum ficara muito interessante esses varios links um abaixo do outro, certo... ja vi em alguns sites inclusive aki no forum msm a exibição de apenas uns 10 links e quando passar disse mostrara o link para a pagina 11 e o link para a 1 ficara oculto ate voltar, espero q entendam.. beleza seria assim!!

 

« Anterior | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Próximo » passando do 10 ficaria assim

« Anterior | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Próximo » e assim por diante se alguem pode me dar uma luz ou indicar algum script seria muito bom, ja tentei de td e nada.. flw!! um abraço a todos t+ :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabio, não sei se sua intenção era pegar algo já pronto ou criar o seu, mas fiz este paginador para atender minhas necessidades, possui também esse lance de ocultar páginas que você comentou e por enquanto tá funcionando legal. Como não procurei referências de como seria a melhor implementação disso, então ficou meio esquisitinho, mas funciona legal.

 

Detalhes:

1- Fiz este código para exibir até 7 links de páginas no navegador, além dos 4 links de navegação (primeira página, recuar uma página, avançar uma página e avançar à última página). Assim não fica com muita informação na tela. Se o número de registros selecionados gerar menos que 7 páginas, então o número de elementos do array do paginador é reduzido sozinho. Ex.: Se sua pesquisa gerar 100 registros e você quiser exibir 30 registros por página, os elementos da variável $Nav serão = |1| |1| |1| |2| |3| |4| |9| |10|. Onde os elementos de cor azul representam as páginas que você deverá usar no seu código para indicar avanço e recuo de páginas. Se você quiser 10 registros por página $Nav será: |1| |1| |1| |2| |3| |4| |5| |6| |7| |9| |10|. Repare que a página "8" ficou oculta, porém conforme você for avançando a visualização das páginas ela aparecerá.

 

2- Como tenho usado apenas ADODB para acessar banco de dados, então a rotina está preparada para isso. Se você usar outra forma de acesso, altere apenas as duas primeiras linhas da rotina para adequar ao seu modo de acesso;

 

3- O código é genérico, ou seja, você pode usar em qualquer lugar do mesmo jeito. Não será necessária nenhuma adaptação para uso em outras páginas suas que precisem de paginador.

 

4- Exemplo de uso: Se você usa Smarty Template para publicar sua página, então faça o seguinte:

PagingRegisters($RegistrosPorPagina, $PaginaCorrente, $SuaConsultaSQL, $SuaConexaoComBD, $VariavelRetornoRegistros, $VariavelArrayDoNavegador);

$smarty->assign("registros", $VariavelRetornoRegistros);

$smarty->display("NomeDeSuaPagina.tpl");

 

5- Se você estiver na primeira página, os dois primeiros elementos do array do navegador aparecerão como -1 e -2, para você saber que está visualizando a primeira página. Se você estiver na última página, os últimos dois elementos aparecerão como -3 e -4, indicando o mesmo. Se o registros selecionado retornarem apenas uma página, então $Nav será: |-1| |-2| |1| |-3| |-4|

 

O código completo é:

/*//////////////////////////////////////////////////////////////////////////////
Descrição: Cria uma array para ser usado como navegador entre páginas
		   e cria ou array que retorna os registros que devem ser exibidos.
Parâmetros: $RegsPerPage	 : Número de registro que deverão ser exibidos
							   por página;
			$CurrentPage	 : Página que está sendo exibida;
			$SQLSentence	 : Sentença SQL a ser executada;
			$DBConnection	: Conexão com o banco de dados corrrente.
			
			&$RegistersLoaded: [OUT] Retorna à rotina chamadora desta função os registros 
							   carregados de acordo com os parâmetros;
			&$Nav			: [OUT] Retorna à rotina chamadora desta função o array
							   que representa como o navegador deve ser de 
							   acordo com os parâmetros passados à função;
Retorno: 1
//////////////////////////////////////////////////////////////////////////////*/
function PagingRegisters($RegsPerPage, $CurrentPage, $SQLSentence, 
   $DBConnection, &$RegistersLoaded, &$Nav)
{
   $sql = $DBConnection->Execute($SQLSentence);
   $sql->MoveFirst;
   
   // Se a pesquisa falhar, então apenas reseta o navegador 
   // e torna vazia a variável de retorno dos registros.
   if (!$sql)
   {
	  $nav_tmp		 = array();
	  $nav_tmp		 = array_pad($nav_tmp, 4, "");
	  $nav_tmp[0]	  = -1;
	  $nav_tmp[1]	  = -2;
	  $nav_tmp[2]	  = -3;
	  $nav_tmp[3]	  = -4;
	  $RegistersLoaded = array();
	  return 1;
   }
   
   // Determina o número de paginas que existirão
   $i = $sql->PO_RecordCount();  
   if ($RegsPerPage <= 0) $RegsPerPage = 1;	  
   $num_pages = ceil($i / $RegsPerPage); 

   // Se não encontrou nenhum registro, então apenas reseta o
   // navegador e torna vazia a variável de retorno dos registros.
   if ($i == 0)
   {
	  $nav_tmp		 = array();
	  $nav_tmp		 = array_pad($nav_tmp, 4, "");
	  $nav_tmp[0]	  = -1;
	  $nav_tmp[1]	  = -2;
	  $nav_tmp[2]	  = -3;
	  $nav_tmp[3]	  = -4;
	  $RegistersLoaded = array();
	  return 1;
   }
	
   // Se a página corrente for maior que o número de páginas disponíveis para 
   // visualização, então corrige o valor e seta o valor máximo de páginas.
   if ($CurrentPage > $num_pages) $CurrentPage = $num_pages;
	  
   // Cria o navegador de páginas
   $nav_tmp = "";
   $nav_tmp = array();
   if ($num_pages > 7) 
	  $elements = 11; 
   else 
	  $elements = $num_pages + 4;
   $nav_tmp = array_pad($nav_tmp, $elements, "");
   
   // Numera as páginas
   $from = $CurrentPage - 4;
   if ($from <= 0) $from = 1;
   
   $to = $from + 7;
   if ($to > $num_pages) $to = $num_pages;
   if (($to - $from) < 7) $from = $num_pages - 6;
   if ($from <= 0) $from = 1;
							   
   for ($i = 2; $i < 9; $i++) 
   {
	  $nav_tmp[$i] = $from;
	  $from++;
   }
   
   // Elimina os elementos excedentes
   if ($num_pages < 7) array_splice($nav_tmp, 2 + $num_pages, -2);	   

   // Configura as páginas de recuo
   if ($CurrentPage > 1) 
   {
	  $nav_tmp[0] = 1; // Primeira página é sempre "1"
	  $nav_tmp[1] = $CurrentPage - 1;
   }
   else
   {
	  $nav_tmp[0] = -1; 
	  $nav_tmp[1] = -2;		 
   }

   // Configura as páginas de avanço
   if ($CurrentPage < $num_pages) 
   {
	  $nav_tmp[count($nav_tmp)-2] = $CurrentPage + 1;
	  $nav_tmp[count($nav_tmp)-1] = $num_pages; // Última página
   }
   else
   {
	  $nav_tmp[count($nav_tmp)-2] = -3;
	  $nav_tmp[count($nav_tmp)-1] = -4;
   }

   // Retorna o formato do navegador à rotina chamadora
   $Nav = $nav_tmp;
   
   // Carrega os registros da página corrente
   $i = 0;
   $print_register = array();
   $sql->MoveFirst;

   while(!$sql->EOF)
   {
	  $i++;
	  // Verifica a partir de qual a posição os registros devem 
	  // ser exibidos, concatenando-os um-a-um.
	  if (($i > (($CurrentPage - 1) * $RegsPerPage)) and ($i <= ($CurrentPage * $RegsPerPage)))
	  {
		 unset($tmp);
		 $tmp = (array)$sql->FetchNextObj();
		 array_push($print_register, $tmp);
	  }
	  else
		 $sql->MoveNext();

	  if ($i > ($RegsPerPage * $CurrentPage)) break;		 
   }								  
	  
   // Retorna os registros à rotina chamadora.
   $RegistersLoaded = $print_register;   

   return 1;		
}

Espero que atenda sua necessidade...

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, eu gostaria de agradecer pelas respostas... WBB obrigado msm pelo post + complicou um pouco ao qual eu tinha pensado + to dando uma olhada com relação vejam ai como ta +/- o codigo q adaptei:.. vlw um abraço a todos e qualquer coisa estamos ai!!!

 

Página: ult_noticias.php

<?php
/* Incluindo a configuração do banco de dados através do arquivo "conn_atual1.php" */
include("includes/conn_atual1.php");

$pg = $_GET["pg"];
if (!isset($pg)) // Variável $pg é a página atual
$pg = -1;
$inicial = $pg * 20; // Este 20 é o número de resultados por tela
  
/* Monta e executa a consulta em SQL para mostrar os resultados */
$sql_todas = "SELECT noticia_id, categoria_id, categoria_nome, noticia_todas, `noticia_data`, noticia_hora, noticia_ativado FROM tb_noticias ORDER BY noticia_id DESC LIMIT $inicial, 20"; // Esta variável $inicial vai ser o registro de início
$res_todas = mysql_query($sql_todas) or die ("Erro não foi possível realizar a consulta."); // Recebe o resultado da consulta SELECT
$linha1 = mysql_fetch_assoc($res_todas);

/* Monta e executa a consulta em SQL para contar o total de... */
/* registros e saber a quantidade de páginas que será usado */
$sql_contar = "SELECT noticia_id, categoria_id, categoria_nome, noticia_todas, `noticia_data`, noticia_hora, noticia_ativado FROM tb_noticias ORDER BY noticia_id";
$res_contar = mysql_query($sql_contar) or die ("Erro não foi possível realizar a consulta."); // Recebe o resultado da consulta SELECT
$total_paginas = mysql_num_rows($res_contar);
$paginas = ceil($total_paginas / 20); // Aqui o 20 representa a quantidade que você quer mostrar
?>

<?php do { // Fazendo um loop para mostrar os resultados
/* Corrigindo os campos data e hora */
$novadata = substr($linha1['noticia_data'],8 ,2) . "/" .
substr($linha1['noticia_data'],5 ,2);
$novahora = substr($linha1['noticia_hora'],0 ,2) . ":" .
substr($linha1['noticia_hora'],3 ,2);

$id = $linha1['noticia_id']; // Criando uma variável por onde passará as URLs dos links
echo "<tr>
	<td width=\"496\" height=\"20\" align=\"left\" valign=\"top\" class=\"texto1\"><br/>[ <strong>$novadata</strong> - <strong>$novahora</strong> ] - <a href=\"noticias.php?noticia_id=$id\" target=\"_top\" class=\"texto10_link\">{$linha1['noticia_todas']}</a></td>
  </tr>";
} while ($linha1 = mysql_fetch_assoc($res_todas));
?>

<?php
/* Criando os links dinâmicos */
if ($pg > 1) {
$url = $pg - 1;
echo "| <a id=mulink href=\"$PHP_SELF?pg=$url\">Anterior</a> |";
}
else {
echo "";
}

/* Mostrando os diferentes índices das páginas, se e que há várias páginas */
for ($i = 1; $i < ($paginas + 1); $i ++) {
if ($i == $pg) {
echo "<font face=Arial size=2 color=ff0000><b>  $i  </b></font>";
}
else {
echo "<a id=mulink href=\"$PHP_SELF?pg=$i\">  $i  </a>";
}
}

if ($pg < $paginas) {
$url = $pg + 1;
echo "<a id=mulink href=\"$PHP_SELF?pg=$url\"> Próximo</a>";
}
else {
echo "";
}
?>

<?php
mysql_free_result($res_todas);
mysql_free_result($res_contar);
mysql_close($conexao); // Fecha a conexão com o MySQL
?>

t+...

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.