• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

raac

Paginação !

10 mensagens neste tópico

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  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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á...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hmmm não tou a conseguir  :wallbash:

continua a retornar todas as páginas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora