Ir para conteúdo

POWERED BY:

Arquivado

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

Kªwªkªmi

Paginação de strings que vem do banco de dados

Recommended Posts

Olá de novo pessoal,

 

Bom, hoje é o seguinte, estou com um sistema de paginação, porém ele tem um defeito.

 

Se ele vê que o banco gera 1000 páginas, ele mostra as mil páginas.

 

O que eu gostaria é que quando o número de páginas mostrados do indice chegasse a 5 ele não mostrasse o resta da quantidade de páginas, mas sim um "...", e quando ele chegasse na página 5 o indice mostrasse as páginas até a 10, e antes do número 5 um "...", e depois da página 10 se tivesse outras páginas mostrasse um "..."

 

Bom irei mostrar imagens para deixar mais lúdico o que eu necessito:

 

Forma de paginação do meu script:

Imagem Postada

 

 

Forma que eu gostaria:

<<Anterior [1] 2 3 4 5 ... Próximo>>

 

Ai se o usuário chega na página 5:

<<Anterior ... 4 [5] 6 7 8 9 ... Próximo>>

 

 

Bom é mais o menos isso que eu queria, se alguem puder me ajudar eu agradeço! Estou tentando fazer esse efeito na paginação faz tempo!

 

Ah, e ai vai meu script se alguem puder editar ele pra mim já eu agradeço:


<?php include('conexao_com_o_bd.php'); ?>
<?php 
$pagessize = 20; // Quantos registros por página vai ser mostrado      
 if($_GET['pages']){
 	$pages = $_GET['pages'];
	}else{
	$pages = 0;
	} 
?>


<table width="700" align="right" cellpadding="0" cellspacing="20" border="0">

	<tr>
		<td><p><font face="Calibri">Veja nossos artigos:</font></p>
		  <p> </p>
	    <p><font face="Calibri">
		
		<?php
		
			
$sql = "SELECT * FROM artigos_entrevistas WHERE publicado = 1 AND tipo = 1 ORDER BY data ASC";

$resultado = mssql_query($sql, $link) or die ("Não foi possível executar a consulta");  

$nrecs = mssql_num_rows($resultado);
     
   $npages = ceil($nrecs/$pagessize);
   $npages++;
    $startrec = $pagessize * $pages;
	 $n = 0;
	$s = 0;

while ($linha=mssql_fetch_array($resultado)) {
	if(($n>=$startrec) &&($s<$pagessize)){
	$id = $linha["id"];
	$titulo = $linha['titulo'];
	
	echo "<p><a href='artigos_det.php?id=".$id."'><li>".$titulo."</li></p>";
	
	$s++;
	
	}
	
	$n++;
	
}	
		?>
		
	</tr>
<tr>
<td align="center"><?php
	  if ( $pages > 0) {
	echo "<a href='".$PHP_SELF."?&pages=".($pages-1) ."' class=pg><b><font face=Calibri size=2> « Anterior</font></b></a>";
	 } else {
	 echo "<font color=#CCCCCC face=Calibri size=2> « Anterior</font>";
	 }
	 
	 for($i=1;$i<$npages;$i++) { 
	 	if ($pages == ($i-1)) {                         
		echo " <span class=pgoff><font face=Calibri color=#cf111111  size=2><strong> [$i]</strong></font></span> ";                
		} else {                        
		$x = $i-1;                        
		echo " <a href='".$PHP_SELF."?&pages=$x' class=pg><b><font face=Calibri  size=2> $i</font></b></a> ";                
		}        
	}
	
	if (($pages+2) < $npages) {                
	 echo "<a href='".$PHP_SELF."?&pages=".($pages+1)."' class=pg><b><font
	  face=Calibri  size=2> Próximo »</font></b></a>";        
	 } else {                 
	 echo "<font color=#CCCCCC face=Calibri  size=2> Próximo »</font>";        
	 }
	  ?></td>
</tr>
</table>

Obrigado desde já galera! Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php include('conexao_com_o_bd.php'); ?>
<?php 
$pagessize = 20; // Quantos registros por página vai ser mostrado      
 if($_GET['pages']){
 	$pages = $_GET['pages'];
	}else{
	$pages = 0;
	} 
?>


<table width="700" align="right" cellpadding="0" cellspacing="20" border="0">

	<tr>
		<td><p><font face="Calibri">Veja nossos artigos:</font></p>
		  <p> </p>
	    <p><font face="Calibri">
		
		<?php
		
			
$sql = "SELECT * FROM artigos_entrevistas WHERE publicado = 1 AND tipo = 1 ORDER BY data ASC";

$resultado = mssql_query($sql, $link) or die ("Não foi possível executar a consulta");  

$nrecs = mssql_num_rows($resultado);
     
   $npages = ceil($nrecs/$pagessize);
   $npages++;
    $startrec = $pagessize * $pages;
	 $n = 0;
	$s = 0;

while ($linha=mssql_fetch_array($resultado)) {
	if(($n>=$startrec) &&($s<$pagessize)){
	$id = $linha["id"];
	$titulo = $linha['titulo'];
	
	echo "<p><a href='artigos_det.php?id=".$id."'><li>".$titulo."</li></p>";
	
	$s++;
	
	}
	
	$n++;
	
}	
		?>
		
	</tr>
<tr>
<td align="center"><?php
	  if ( $pages > 0) {
	echo "<a href='".$PHP_SELF."?&pages=".($pages-1) ."' class=pg><b><font face=Calibri size=2> « Anterior</font></b></a>";
	 } else {
	 echo "<font color=#CCCCCC face=Calibri size=2> « Anterior</font>";
	 }

         //ADICIONEI ESSE IF/ELSE
         if($npages > 5) {
  	     for($i=1;$i<6;$i++) { 
               if($i == 1 || $i == 5)
                 echo "...";
               //echo o resto das páginas.
             }
         } else {
	 
  	     for($i=1;$i<$npages;$i++) { 
 	        if ($pages == ($i-1)) {                         
		echo " <span class=pgoff><font face=Calibri color=#cf111111  size=2><strong> [$i]</strong></font></span> ";                
		} else {                        
		$x = $i-1;                        
		echo " <a href='".$PHP_SELF."?&pages=$x' class=pg><b><font face=Calibri  size=2> $i</font></b></a> ";                
		}        
	     }
         }
	
	if (($pages+2) < $npages) {                
	 echo "<a href='".$PHP_SELF."?&pages=".($pages+1)."' class=pg><b><font
	  face=Calibri  size=2> Próximo »</font></b></a>";        
	 } else {                 
	 echo "<font color=#CCCCCC face=Calibri  size=2> Próximo »</font>";        
	 }
	  ?></td>
</tr>
</table>

 

não li o código com cuidado, mas teoricamente você já fez a parte mais difícil, agora você só faz um laço até 5 caso tenha mais de 5 paginas... (seria legal colocar um link de última e primeira página tb)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara da uma olhada na instrução LIMIT do mysql,

 

dai você especifica do total de resultados qual parte você vai mostrar...

 

 

$limitstart=10;//a partir de

$limit=20;//quantos registros a partir do start

 

$list = "SELECT * FROM table LIMIT $limitstart.",".$limit;

 

acho que você terá de fazer um sql para a paginação e outro para a exibição os resultados

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.