Jump to content
raac

Paginação !

Recommended Posts

raac

Viva pessoal,

Ando outra x aqui as voltas com o php e desta vez é com paginação.

Ora entao tenho o seguinte código:


mysql_connect ($dbserver,$dbuser,$dbpass);
mysql_select_db ($dbname);


$sql = mysql_query ("select * from anuncios id WHERE activo='1'");
$total = mysql_num_rows($sql);

$pagina = $_GET['pagina'];
$lpp = "$limite";

$paginas = ceil($total / $lpp);  //Retorna o total de páginas..

if(!isset($pagina)) { $pagina = 0;} //Especifica um valor para a mesma caso nao esteja selecionada.
                                                
$inicio = $pagina * $lpp; //Retorna qual será a primeira linha a ser mostrada no MySQL.

$sql = mysql_query ("select * from anuncios id WHERE activo='1'  LIMIT $inicio,$lpp"); 

Depois vem vem o código para a listagem mas isso não interessa  :nono:

E aqui vem a parte que interessa:


if ($pagina > 0) {
$menos = $pagina - 1;
$url = "$PHP_SELF?pagina=$menos";
echo "<a href='$url'><font color=\"#000000\"><img border=\"0\" src=\"seta_esq.gif\" width=\"27\" height=\"25\"></a>"; //Vai para a pagina anterior.

}

$barra = "| ";
for ($i=0; $i<$paginas; $i++) {

$url = "$PHP_SELF?pagina=$i";
if ($i == 0 ){
$barra = "";
$i = ""; } else { $barra = "| "; }

if ($i == $pagina ){
echo "<font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"><b> $barra <font style=\"font-size: 9pt\" face=\"Arial\" color=\"#4779AB\">$i</b></font>"; }
else {
echo "<font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"> $barra <a style=\"text-decoration: none\"  href='$url'><font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"><b>$i</b></a></font>";
}
}

if ($pagina < ($paginas - 1))  {
    $mais = $pagina + 1;
    $url = "$PHP_SELF?pagina=$mais";
    echo "<font face=\"Tahoma\" size=\"1\"><a style=\"text-decoration: none\" href='$url'><font color=\"#000000\"><img border=\"0\" src=\"seta_dir.gif\" width=\"27\" height=\"25\"></a></font>"; //Vai para a próxima pagina.


    }

Funciona tudo direitinho, mas agora o meu objectivo era ele não fazer um spamm mt grande da lista de páginas disponiveis, porque neste caso se ele tiver 50 páginas ele vai escrever do 1 até ao 50, e o que queria era por exemplo mostrar de 5 em 5 páginas:

1 | 2 | 3 | 4 | 5 ... até 50  , e quando se clica-se na página 5 mostra-se :

5 | 6 | 7 | 8 | 9 ... até 50

se puderem dar uma ajudita agradecia  :cheesygrin:

Share this post


Link to post
Share on other sites
deathseeker25

Isso deve-se resolver com um ciclo for:

if ($pagina > 0) {
$menos = $pagina - 1;
$url = "$PHP_SELF?pagina=$menos";
echo "<a href='$url'><font color=\"#000000\"><img border=\"0\" src=\"seta_esq.gif\" width=\"27\" height=\"25\"></a>"; //Vai para a pagina anterior.

}

$barra = "| ";
for ($i=0; $i<$paginas; $i++) {

$url = "$PHP_SELF?pagina=$i";
if ($i == 0 ){
$barra = "";
$i = ""; } else { $barra = "| "; }
}

if($pagina>20){ //se o numero de paginas for maior que 20 por exemplo
  for($i=0;$i<$paginas;$i+5){//implementas 5 a cada i
  
  $url="$PHP_SELF?pagina=$i";
  if($i==0){
    $barra= "";
    $i="";
  }
else{	$barra= "| ";}
}
  //basicamente, terás de criar regras conforme o que quiseres...
}

if ($i == $pagina ){
echo "<font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"><b> $barra <font style=\"font-size: 9pt\" face=\"Arial\" color=\"#4779AB\">$i</b></font>"; }
else {
echo "<font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"> $barra <a style=\"text-decoration: none\"  href='$url'><font style=\"font-size: 9pt\" face=\"Arial\" color=\"#000000\"><b>$i</b></a></font>";
}
}

if ($pagina < ($paginas - 1))  {
    $mais = $pagina + 1;
    $url = "$PHP_SELF?pagina=$mais";
    echo "<font face=\"Tahoma\" size=\"1\"><a style=\"text-decoration: none\" href='$url'><font color=\"#000000\"><img border=\"0\" src=\"seta_dir.gif\" width=\"27\" height=\"25\"></a></font>"; //Vai para a próxima pagina.


    }

Tens aí o script completo, no entanto vê aqui o que adicionei:

if($pagina>20){ //se o numero de paginas for maior que 20 por exemplo
  for($i=0;$i<$paginas;$i+5){//implementas 5 a cada i
  
  $url="$PHP_SELF?pagina=$i";
  if($i==0){
    $barra= "";
    $i="";
  }
else{	$barra= "| ";}
}
  //basicamente, terás de criar regras conforme o que quiseres...

Se funcionar, poderás criar regras conforme o que necessitares. :)

Não testei o script, mas penso que está tudo ok. Ora experimenta lá...

Share this post


Link to post
Share on other sites
raac

hmmm não tou a conseguir  :wallbash:

continua a retornar todas as páginas...

Share this post


Link to post
Share on other sites
deathseeker25

hmmm não tou a conseguir  :wallbash:

continua a retornar todas as páginas...

Sim, porque o número de páginas não é maior do que 20 pois não? :)

Share this post


Link to post
Share on other sites
raac

não , eu alterei isso para um número baixo  :)

meti : if($pagina>6)

E para além de não dar o load da página ficou mt lento, e chega a um ponto que por vezes da erro e diz que o tempo de execuçao expirou

Fatal error: Maximum execution time of 30 seconds exceeded in /httpdocs/vv/busca.php on line 804

que é esta linha :  $url = "$PHP_SELF?pagina=$i";

Share this post


Link to post
Share on other sites
deathseeker25

não , eu alterei isso para um número baixo  :P

meti : if($pagina>6)

E para além de não dar o load da página ficou mt lento, e chega a um ponto que por vezes da erro e diz que o tempo de execuçao expirou

Isso do load já não deve ter bem a ver com o script, digo eu. No entanto, vou estudar atentamente o assunto e procurar uma resposta. Supostamente o que o meu script fazia era, se o numero de páginas fosse igual a 20, a cada link para página ele incrementava 5, isto é, começando no 0 ia de 5 em 5 até 20, por exemplo...

:)

Share this post


Link to post
Share on other sites
raac

não , eu alterei isso para um número baixo  :P

meti : if($pagina>6)

E para além de não dar o load da página ficou mt lento, e chega a um ponto que por vezes da erro e diz que o tempo de execuçao expirou

Isso do load já não deve ter bem a ver com o script, digo eu. No entanto, vou estudar atentamente o assunto e procurar uma resposta. Supostamente o que o meu script fazia era, se o numero de páginas fosse igual a 20, a cada link para página ele incrementava 5, isto é, começando no 0 ia de 5 em 5 até 20, por exemplo...

:)

o erro é :

Fatal error: Maximum execution time of 30 seconds exceeded in /httpdocs/vv/busca.php on line 804

que é esta linha :  $url = "$PHP_SELF?pagina=$i";

Share this post


Link to post
Share on other sites
raac

não , eu alterei isso para um número baixo  :P

meti : if($pagina>6)

E para além de não dar o load da página ficou mt lento, e chega a um ponto que por vezes da erro e diz que o tempo de execuçao expirou

Isso do load já não deve ter bem a ver com o script, digo eu. No entanto, vou estudar atentamente o assunto e procurar uma resposta. Supostamente o que o meu script fazia era, se o numero de páginas fosse igual a 20, a cada link para página ele incrementava 5, isto é, começando no 0 ia de 5 em 5 até 20, por exemplo...

:)

Não conseguiu dar uma olhadela no erro ?

Share this post


Link to post
Share on other sites
pedrotuga

yaha!!! raac! boa malha! Assim é que é fixe para o pessoal aprender.. simplesinho e eficiente.

vou usar o teu código. Gostei, simples!

Share this post


Link to post
Share on other sites
pedrotuga

Bem... esta é uma tecnica simples. PEssoalmente aconselho-a vivamente para pequenas aplicações pois é bem simples e facil de implementar, e pode funcionar muito bem.

O problema é quando fazemos um query que devolve um volume de dados grande. Nesse caso a paginação deve ser feita ao nivel do sql. Primeiro um count para ver quantos registo se obtem, depois instrucoes de sql diferentes de acordo com a cardinalidade da pagina.

Visitem o site phpbrasil.com, acho k tem la exemplos desse tipo. Nao vou por aqui um exemplo de codigo como o raac fez, e bem, porque estou apertado com o tempo.

Share this post


Link to post
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

×
×
  • 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.