MGC Posted March 24, 2012 Report Share Posted March 24, 2012 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 More sharing options...
pedrosorio Posted March 24, 2012 Report Share Posted March 24, 2012 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 More sharing options...
MGC Posted March 24, 2012 Author Report Share Posted March 24, 2012 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 More sharing options...
pedrosorio Posted March 24, 2012 Report Share Posted March 24, 2012 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 More sharing options...
MGC Posted March 24, 2012 Author Report Share Posted March 24, 2012 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 More sharing options...
brunoais Posted March 24, 2012 Report Share Posted March 24, 2012 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 More sharing options...
MGC Posted March 24, 2012 Author Report Share Posted March 24, 2012 Corrige a indentação, sff. Isso está perto de ilegível. Lamento, mas nao percebi o solicitado..... Link to comment Share on other sites More sharing options...
pedrosorio Posted March 24, 2012 Report Share Posted March 24, 2012 Infelizmente não sou bom na interpretação do PHP. Tens um site, e código em PHP, mas não és bom na interpretação do PHP? Não percebo nada... Lamento, mas nao percebi o solicitado..... http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
MGC Posted March 24, 2012 Author Report Share Posted March 24, 2012 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 More sharing options...
MGC Posted March 25, 2012 Author Report Share Posted March 25, 2012 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 More sharing options...
brunoais Posted March 25, 2012 Report Share Posted March 25, 2012 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 More sharing options...
MGC Posted March 25, 2012 Author Report Share Posted March 25, 2012 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 More sharing options...
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