Ir para conteúdo

Arquivado

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

MGC

Limitar paginas ::: paginação

Recommended Posts

Boas amigos Tutoriais,

 

Possuo um probleminha no meu site.

Quero limitar o numero de paginas que são expostas. Ou seja, cada vez que acrescento conteudo aumenta o numero de paginas.

Por exemplo: 1 | 2 | 3 | 4 | 5 | 6 | 7

 

o que pretendo é limitar:

Exemplo: 1 | 2 | 3 | 4 | ... | 7

mas que quando estiver na pagina 4 apareça as paginas posteriores. Ou seja, fique resumido assim: 1 | ... | 3 | 4 | 5 | 6 | 7

 

O codigo que possuo é este:

 

$rnav = mysql_query($qnav) or die(mysql_error());

$rows = mysql_num_rows($rnav);

 

if($rows > $ByPage)

{

 

$ListingTable .= "<table class=\"tlistnav\" border=0 cellspacing=0 align=center width=100% >";

$ListingTable .= "<tr><td align=center><font face=verdana size=2> | ";

 

$pages = ceil($rows/$ByPage);

 

for($i = 0; $i <= ($pages); $i++)

{

$PageStart = $ByPage*$i;

 

$i2 = $i + 1;

 

if($PageStart == $Start)

{

$links[] = " <span class=CurrPageIdx>$i2</span>\n\t ";

}

elseif($PageStart < $rows)

{

 

$links[] = " <a class=BlackLink href=\"search.php?Start=$PageStart&c=$_GET[c]&s=$_GET&search_kw=$_GET[search_kw]&CategoryID=$_GET[CategoryID]&search_district=$_GET[search_district]&search_place=$_GET[search_place]&search_city=$_GET[search_city]&PostID=$_GET[PostID]&zip=$_GET[zip]&old=$_GET[old]\">$i2</a>\n\t ";

 

}

}

 

$links2 = implode(" | ", $links);

 

$ListingTable .= $links2;

 

$ListingTable .= "| </td></tr>";

$ListingTable .= "</table><br><br>\n";

 

}

else // rows <= bypage (no navbar required)

{

$ListingTable .= "<br><br>\n";

}

 

 

Alguem pode ajudar nesta dor de cabeça?

Obrigada pela ajuda pessoal...!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o que você quer fazer não é difícil, mas é bem chato, o começo da lógica, para você aplicar é:

1 - Como você quer que sempre sejam exibidos 5 links por vez, você deve primeiro verificar se existem até 5 páginas, se o máximo for 5 basta um for normal.

2 - Caso existam mais de 5 você tem que verificar se a página atual é menor ou igual a 3, se for, basta um for normal também.

3 - Caso a página atual seja maior do que 3, você teria que ver se ela está entre as 3 últimas, se estiver você terá que fazer um for normal, mas começando da 5ª página de "trás pra frente", exemplo, se tivesse 80 páginas você teria que começar o for no 76.

4 - Caso não se encaixe em nenhuma das alternativas anteriores você monta sabe que tem que exibir 5, mas que deve começar 2 páginas anteriores à atual, ou seja, se estiver no na página 13 deve começar na página 11, assim você terá 11 - 12 - 13 - 14 - 15.

 

Essa é a lógica, tente aplicá-la que a gente vai te ajudando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o que você quer fazer não é difícil, mas é bem chato, o começo da lógica, para você aplicar é:

1 - Como você quer que sempre sejam exibidos 5 links por vez, você deve primeiro verificar se existem até 5 páginas, se o máximo for 5 basta um for normal.

2 - Caso existam mais de 5 você tem que verificar se a página atual é menor ou igual a 3, se for, basta um for normal também.

3 - Caso a página atual seja maior do que 3, você teria que ver se ela está entre as 3 últimas, se estiver você terá que fazer um for normal, mas começando da 5ª página de "trás pra frente", exemplo, se tivesse 80 páginas você teria que começar o for no 76.

4 - Caso não se encaixe em nenhuma das alternativas anteriores você monta sabe que tem que exibir 5, mas que deve começar 2 páginas anteriores à atual, ou seja, se estiver no na página 13 deve começar na página 11, assim você terá 11 - 12 - 13 - 14 - 15.

 

Essa é a lógica, tente aplicá-la que a gente vai te ajudando.

 

Obrigado pela logica.

É exactamente isso... mas infelizmente sou um pouco "bobo" no php.

Qd começo a ver muitas tentativas e erros o meu "brain" entra em ebulição...!

 

Sera que alguem com uma mente mais fresca me pode dar um toque em codigo.! Será possível?

Ja tentei ver alguns codigos por aqui, mas nada feito.

 

Agredecia pessoal a Vossa gentileza....!

 

Abraços.!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas tutoriais.

Consegui fazer alguns ajustes, mas infelizmente esta a dar mais luta do que julgava.

Eis o codigo:


if(!empty($_GET[start]))
{
  $Start = $_GET[start];
}
else
{
  $Start = '0';
}

// limite de links por pagina
$ByPage = '13';

$rnav = mysql_query($qnav) or die(mysql_error());
     $rows = mysql_num_rows($rnav);


        if($rows > $ByPage)
        {


                                 $ListingTable .=  "<table class=\"tlistnav\" border=0 cellspacing=0 align=center width=100% >";
           $ListingTable .= "<tr><td align=center><font face=verdana size=2> | ";

           $pages = ceil($rows/$ByPage);
        $pagesLimit = 10;//Limite de páginas 

        $lowAllow = (int)($Start - ($pagesLimit / 2)); 
           $start = ($lowAllow <= 0) ? 1 : $lowAllow; 
           $aboveAllow = $start + $pagesLimit; 
           $until = ($aboveAllow > $pages) ? $pages : $aboveAllow; 

           for($i = $start; $i <= $until; $i++) 
           {
              $PageStart = $ByPage*$i;

              $i2 = $i + 1;

              if($PageStart == $Start)
              {
                 $links[] = " <span class=CurrPageIdx>$i2</span>\n\t ";
              }
              elseif($PageStart < $rows)
              {
$links[] = " <a class=BlackLink href=\"search.php?Start=$PageStart&c=$_GET[c]&s=$_GET[s]&search_kw=$_GET[search_kw]&CategoryID=$_GET[CategoryID]&search_district=$_GET[search_district]&search_place=$_GET[search_place]&search_city=$_GET[search_city]&PostID=$_GET[PostID]&zip=$_GET[zip]&old=$_GET[old]\">$i2</a>\n\t ";   

              }
           }

           $links2 = implode(" | ", $links);

           $ListingTable .= $links2;


           $ListingTable .= "| </td></tr>";
           tablefix added </tr> to tlisnav

           $ListingTable .= "</table><br><br>\n";

        }
        else  // rows <= bypage (no navbar required)
        {
         $ListingTable .= "<br><br>\n";
        }

 

Infelizmente o codigo esta a dar erro, pois a pagina 1 (primeira pagina) não aparece, e quando clico na pagina dois já so aparece 9 | 10 | 11 e não aparece a pagina 1 | ou posteriores. Tambem não surge as reticencias...!

Testando com limite de 5, o resultado inicial da paginação é: 2 | 3 | 4 | 5

 

Nas paginas seguintes da erro:

Warning: implode() [function.implode]: Invalid arguments passed in C:\Programas\xampp\htdocs\teste\search.php on line 511

 

A linha 511 corresponde ao codigo:

 

$links2 = implode(" | ", $links);

 

haverá uma alma caridosa que possa salvar meu pescoço desta embrulhada?

 

Agradecia.

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.