raac Posted March 3, 2006 at 03:34 PM Report #16544 Posted March 3, 2006 at 03:34 PM 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 😁
deathseeker25 Posted March 3, 2006 at 05:26 PM Report #16564 Posted March 3, 2006 at 05:26 PM 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á...
raac Posted March 3, 2006 at 07:32 PM Author Report #16591 Posted March 3, 2006 at 07:32 PM hmmm não tou a conseguir continua a retornar todas as páginas...
deathseeker25 Posted March 3, 2006 at 07:39 PM Report #16593 Posted March 3, 2006 at 07:39 PM Sim, porque o número de páginas não é maior do que 20 pois não? 🙂
raac Posted March 3, 2006 at 07:42 PM Author Report #16595 Posted March 3, 2006 at 07:42 PM 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";
deathseeker25 Posted March 3, 2006 at 07:48 PM Report #16598 Posted March 3, 2006 at 07:48 PM 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 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... 🙂
raac Posted March 3, 2006 at 07:49 PM Author Report #16599 Posted March 3, 2006 at 07:49 PM 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";
raac Posted March 4, 2006 at 07:35 PM Author Report #16798 Posted March 4, 2006 at 07:35 PM Em 03/03/2006 às 20:48, deathseeker25 disse: 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 ?
pedrotuga Posted March 6, 2006 at 06:00 PM Report #17080 Posted March 6, 2006 at 06:00 PM yaha!!! raac! boa malha! Assim é que é fixe para o pessoal aprender.. simplesinho e eficiente. vou usar o teu código. Gostei, simples!
pedrotuga Posted March 14, 2006 at 12:40 AM Report #18183 Posted March 14, 2006 at 12:40 AM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now