maiswww 2 Denunciar post Postado Junho 20, 2015 Bom dia moçada. Seguinte: Estou usando uma função apara paginação, funciona blz, porém a exibição dos links é infinita. Preciso de uma paginação apresentando no máximo 5 links, de 1 a 5. Peço ajuda para ajustar esse detalhe no seguinte código. public function rowCount() { return @mysql_affected_rows(); } public function getUrl( $perpage ) { $this->url = $_SERVER['REQUEST_URI']; return $this; } public function paginate( $perpage ) { $this->pagination = true; $this->perpage = $perpage; return $this; } public function paginateLink() { if ( $this->url != null ) { if ( !preg_match( '/\?/', $this->url ) ) { $this->url .= "?"; } else { $this->url .= "&"; } } else { //$this->url = "?"; } if ( isset( $_GET['page'] ) ) { $this->current = $_GET['page']; $this->page = $this->perpage * $_GET['page'] - $this->perpage; if ( $_GET['page'] == 1 ) { $this->page = 0; } } $this->total = $this->rows; if ( $this->rows > $this->perpage ) { $this->link = "<div class=\"pagination\"><ul>"; $prox = "javascript:;"; $ant = "javascript:;"; if ( $this->current >= 2 ) { $ant = $this->url . "page=" . ($this->current - 1); } if ( $this->current >= 1 && $this->current < ($this->total / $this->perpage) ) { $prox = $this->url . "page=" . ($this->current + 1); } $this->link .= '<li><a href="' . $ant . '">«</a></li>'; $from = round( $this->total / $this->perpage ) ; if($from == 1){$from++;} for ( $i = 1; $i <= $from; $i++ ) { if ( $this->current == $i ) { $this->link .= "<li class=\"active\"><a>$i</a></li>\n"; } else { $this->link .= "<li><a href=\"" . $this->url . "page=$i\">$i</a></li>\n"; } } $this->link .= '<li><a href="' . $prox . '">»</a></li>'; $this->link .= "</ul>\n"; $this->link .= "</div>\n"; } return $this; } public function cut( $str, $chars, $info= '' ) { if ( strlen( $str ) >= $chars ) { $str = preg_replace( '/\s\s+/', ' ', $str ); $str = strip_tags( $str ); $str = preg_replace( '/\s\s+/', ' ', $str ); $str = substr( $str, 0, $chars ); $str = preg_replace( '/\s\s+/', ' ', $str ); $arr = explode( ' ', $str ); array_pop( $arr ); //$arr = preg_replace('/\ /i',' ',$arr); $final = implode( ' ', $arr ) . $info; } else { $final = $str; } return $final; } Desde já, agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Junho 20, 2015 Essa parte do código é a que cria os links da paginação: for ( $i = 1; $i <= $from; $i++ ) { if ( $this->current == $i ) { $this->link .= "<li class=\"active\"><a>$i</a></li>\n"; } else { $this->link .= "<li><a href=\"" . $this->url . "page=$i\">$i</a></li>\n"; } } Mude o início de $i de 1 para um numero aproximado ao que você quer, por exemplo, se eu quiser mostrar apenas 5 links, o meu parâmetro de referência é o valor corrente, a partir que selecionar a quarta página, deve aparecer apenas os links: 2 3 [4] 5 6: $i = ($this->current >= 4) ? $this->current - 2 : 1; Mude também a lógica de contagem: $i <= $from Agora $i não é mais um valor fixo inicial 1, ele é variável, e só deve contar 5 loops, então a lógica deve ser modificada. Outro ponto, é quando selecionar os dois últimos links, você deve tratar para a exibição ficar similar a isso: 5 6 7 8 [9]. Além do mais, é importante adicionar os links de primeira e última página, logo, sua paginação deve mostrar algo semelhante a isso: << < 1 2 3 4 5 > >> Compartilhar este post Link para o post Compartilhar em outros sites
maiswww 2 Denunciar post Postado Junho 20, 2015 Essa parte do código é a que cria os links da paginação: for ( $i = 1; $i <= $from; $i++ ) { if ( $this->current == $i ) { $this->link .= "<li class=\"active\"><a>$i</a></li>\n"; } else { $this->link .= "<li><a href=\"" . $this->url . "page=$i\">$i</a></li>\n"; } } Mude o início de $i de 1 para um numero aproximado ao que você quer, por exemplo, se eu quiser mostrar apenas 5 links, o meu parâmetro de referência é o valor corrente, a partir que selecionar a quarta página, deve aparecer apenas os links: 2 3 [4] 5 6: $i = ($this->current >= 4) ? $this->current - 2 : 1; Mude também a lógica de contagem: $i <= $from Agora $i não é mais um valor fixo inicial 1, ele é variável, e só deve contar 5 loops, então a lógica deve ser modificada. Outro ponto, é quando selecionar os dois últimos links, você deve tratar para a exibição ficar similar a isso: 5 6 7 8 [9]. Além do mais, é importante adicionar os links de primeira e última página, logo, sua paginação deve mostrar algo semelhante a isso: Gabriel, obrigado. Até compreendi a lógica, porém não sei aplica-la ao código. Não sou programador, ainda, apenas estudante então ficou complexo a aplicação do que me explicou. Se puder me mostrar, na verdade implementar o explicado ficarei muito grato. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites