Jump to content

Limitar a exposição do nº de paginas na pesquisa


MGC
 Share

Recommended Posts

Boas amigos,

Possuo um problema 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 base do meu site é 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[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>";
$ListingTable .= "</table><br><br>\n";

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

felizmente, nas minhas pesquisas consegui este condigo:

// Número máximos de botões de paginação 
$max_links = 2; 
// Exibe o primeiro link "primeira página", que não entra na contagem acima 
echo "<a href='?painel=lista&p=1'><li class='text'>Primeira Pagina</li></a> "; 
// Cria um for() para exibir os links antes da página atual 
for($i = $p-$max_links; 
    $i <= $p-1; 
    $i++) { 
// Se o número da página for menor ou igual a zero, não faz nada 
// (afinal, não existe página 0, -1, -2..) 
if($i <=0) { 
//faz nada 
// Se estiver tudo OK, cria o link para outra página
} else { echo "<a href='?painel=listar&p=$i'><li>$i</li></a> "; } } 
// Exibe a página atual, sem link, apenas o número 
echo " <li class='page'><a href='?painel=listar&p=$p' title=''> $p </a></li> "; 
// Cria outro for(), desta vez para exibir os links após a página atual 
for($i = $p+1; 
    $i <= $p+$max_links; 
    $i++) { 
// Verifica se a página atual é maior do que a última página. Se for, não faz nada.
if($i > $pags) { 
//faz nada 
} 
// Se tiver tudo Ok gera os links.
else { echo "<a href='?painel=listar&p=$i'><li>$i</li></a> "; } } 
// Exibe o link 'última página' 
echo "<a href='?painel=listar&p=$pags'><li class='text'>Ultima Pagina</li></a>";

Agora, gostaria de consiliar os dois.

Alguem pode ajudar-me a consiliar os dois codigos?

Obrigado pela atenção.

Link to comment
Share on other sites

A melhor forma de "conciliar" os dois códigos é aprender a programar em PHP. Nós aqui não fazemos consultoria de corte e costura. O que é que já fizeste para resolver o problema no teu código, sem tentar copiar cegamente outro?

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Eu não fiz copia nenhuma do codigo.

Cederam-me esse codigo, mas infelizmente á pormenores que não entendo.

Simplesmente pretendia um pequeno apoio, pois sei que não é muito complicado rectificar o codigo.

Com os melhores cumprimentos.... a todos...!

Link to comment
Share on other sites

Eu não fiz copia nenhuma do codigo.

Cederam-me esse codigo, mas infelizmente á pormenores que não entendo.

Simplesmente pretendia um pequeno apoio, pois sei que não é muito complicado rectificar o codigo.

Com os melhores cumprimentos.... a todos...!

Conseguiste fazer tudo menos responder à minha pergunta. O que é que já tentaste? Que pormenores é que não entendes?

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Boas,

Eu já tentei "adaptar" o meu codigo, com o que foi-me cedido.

Infelizmente não sou bom na interpretação do PHP. Até tentei aceder a alguma informação basica da linguagem php, como interpretar as letras, os simbolos, etc.

Neste caso sei que terei de substituir o contexto que possuo, nomeadamente na base ...

$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 ";
			  
               }

inserindo o codigo

$max_links = 2; 
// Exibe o primeiro link "primeira página", que não entra na contagem acima 
echo "<a href='?painel=lista&p=1'><li class='text'>Primeira Pagina</li></a> "; 
// Cria um for() para exibir os links antes da página atual 
for($i = $p-$max_links; 
    $i <= $p-1; 
    $i++) { 
// Se o número da página for menor ou igual a zero, não faz nada 
// (afinal, não existe página 0, -1, -2..) 
if($i <=0) { 
//faz nada 
// Se estiver tudo OK, cria o link para outra página
} else { echo "<a href='?painel=listar&p=$i'><li>$i</li></a> "; } } 
// Exibe a página atual, sem link, apenas o número 
echo " <li class='page'><a href='?painel=listar&p=$p' title=''> $p </a></li> "; 
// Cria outro for(), desta vez para exibir os links após a página atual 
for($i = $p+1; 
    $i <= $p+$max_links; 
    $i++) { 
// Verifica se a página atual é maior do que a última página. Se for, não faz nada.
if($i > $pags) { 
//faz nada 
} 
// Se tiver tudo Ok gera os links.
else { echo "<a href='?painel=listar&p=$i'><li>$i</li></a> "; } } 
// Exibe o link 'última página' 
echo "<a href='?painel=listar&p=$pags'><li class='text'>Ultima Pagina</li></a>"; 

sei, (julgo) que seja aqui a manipulação.

Obrigado pela atenção e ajuda.

Link to comment
Share on other sites

Corrige a indentação, sff. Isso está perto de ilegível.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Boas

O codigo que aqui foi apresentado não é meu. Foi cedido por um programador.

Tenho site, mas infelizmente o codigo foi adicionado / alterado por um programador que era parceiro no projecto.

Simplesmente desejo adicionar ligeiros codigos, de forma a tornar o site mais atual.

Caso possam ajudar agradeço.

Sei que quem sabe, é fácil conjugar... e até nem é preciso o codigo todo...

Obrigado pela sua atenção e compreensão.

Abraços.

Link to comment
Share on other sites

Boas amigos,

Fiz algumas ligeiras correcções ao script:

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

// limite de links
$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>";
            $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.

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

Nas paginas seguintes dá erro:

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

linha 511 corresponde ao codigo:

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

Agradecia uma ajuda de quem tem pratica no assunto.

Obrigado pela gentileza em ajudar-me nesta tortura.

Abraços.

:down: ?

Link to comment
Share on other sites

Usa o geshi sff:

http://www.portugal-a-programar.pt/index.php?showtopic=6931

O código está melhor mas ainda tem problemas de formatação.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

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

// limite de links
$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>";
            $ListingTable .= "</table><br><br>\n";

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

Espero que esteja melhor para entender.

Obrigado pela chamada de atenção, e desculpem pela minha falha.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.