Jump to content
Fórum Script Brasil
  • 0

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


Question

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:

pag.png

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 alguém puder me ajudar eu agradeço! Estou tentando fazer esse efeito na paginação faz tempo!

Ah, e ai vai meu script se alguém 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!

Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Opa, tudo joia?

Bom, eu não vou analizar seu código todo para lhe dar a resposta exata. Vou tentar te passar a idéia e você adapta ok?

Para fazer o que você quer, uma das maneiras é modificar o "for" que gera a paginação.

Ao invés de colocar

for($i=1;$i<$npages;$i++) {
use
for ($i = $pagatual - 3; $i <= ($pagatual + 3); $i++)
{
    if ($pagatual > 0 and $pagatual < $totaldepaginas) { //Seu codigo }
}

sendo $pagatual, a página atual que você se encontra (duhh hehe)

Assim, ao invés de você ter um for que passa por todas as páginas, ele vai mostrar apenas as 3 anteriores, a atual e as 3 posteriores. Temos que colocar um $pagatual > 0 para evitar q pessoas q estão na página 1 vejam -2 na páginação por exemplo. Também tem o $pagatual < $totaldepaginas para evitar que você veja mais páginas do que existam.

Qualquer dúvida pergunte ai. Flws

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149405
    • Total Posts
      645894
×
×
  • Create New...