num_pesq_pag = $max_res; // define o número de pesquisas (detalhada ou não) por página // consulta a ser realizada, abaixo consta um exemplo: $sql = "SELECT * FROM tabela"; // metodo que realiza a pesquisa $resultado = $mult_pag->executar($sql, $conexao, "", "mysql"); $reg_pag = mysql_num_rows($resultado); // total de registros por paginas ou telas // visualizacao do conteudo for ($n = 0; $n < $reg_pag; $n++) { $linha = mysql_fetch_object($resultado); // retorna o resultado da pesquisa linha por linha em um array // relaciona o resultado com o seu devido campo da tabela, por exemplo: $email = $linha->nome_do_campo_na_tabela; $nome = $linha->nome_do_campo_na_tabela; $comentario = $linha->nome_do_campo_na_tabela; echo "
$nome $email $comentario
"; } // pega todos os links e define que 'Próxima' e 'Anterior' serão exibidos como texto plano $todos_links = $mult_pag->Construir_Links("todos", "sim"); echo "

Esta é a lista de todos os links paginados

\n"; for ($n = 0; $n < count($todos_links); $n++) { echo $todos_links[$n] . " "; } // função que limita a quantidade de links no rodape $links_limitados = $mult_pag->Mostrar_Parte($todos_links, $coluna, $max_links); echo "

Esta é a lista dos links limitados

\n"; for ($n = 0; $n < count($links_limitados); $n++) { echo $links_limitados[$n] . " "; } // classe que multiplica paginas class Mult_Pag { // Valores padrão para a navegação dos links var $num_pesq_pag; var $str_anterior = "Anterior"; var $str_proxima = "Próxima"; var $str_primeira= "Primeira      "; var $str_ultima= "      Última"; // Variáveis usadas internamente var $nome_arq; var $total_reg; var $pagina; /* Metodo construtor. Isto é somente usado para setar o número atual de colunas e outros métodos que podem ser re-usados mais tarde. */ function Mult_Pag () { global $pagina; $this->pagina = $pagina ? $pagina : 0; } /* O próximo método roda o que é necessário para as queries. É preciso rodá-lo para que ele pegue o total de colunas retornadas, e em segundo para pegar o total de links limitados. $sql parâmetro: . o parâmetro atual da query que será executada $conexao parâmetro: . a ligação da conexão do banco de dados $tipo parâmetro: . "mysql" - usa funções php mysql . "pgsql" - usa funções pgsql php */ function Executar($sql, $conexao, $velocidade, $tipo) { // variavel para o inicio das pesquisas $inicio_pesq = $this->pagina * $this->num_pesq_pag; if ($velocidade == "otimizada") { $total_sql = preg_replace("/SELECT (.*?) FROM /sei", "'SELECT COUNT(*) FROM '", $sql); } else { $total_sql = $sql; } // tipo da pesquisa if ($tipo == "mysql") { $resultado = mysql_query($total_sql); $this->total_reg = mysql_num_rows($resultado); // total de registros da pesquisa inteira $sql .= " LIMIT $inicio_pesq, $this->num_pesq_pag"; $resultado = mysql_query($sql); // pesquisa com limites por pagina } else if ($tipo == "pgsql") { $resultado = pg_exec($conexao, $total_sql); if ( pg_numrows( $resultado ) > 0 ) { // total de registros da pesquisa inteira $this->total_reg = pg_numrows( $resultado );//pg_Result($resultado, 0, 0); } $sql .= " LIMIT $this->num_pesq_pag, $inicio_pesq"; $resultado = pg_Exec($conexao, $sql);// pesquisa com limites por pagina } return $resultado; } /* Este método cria uma string que irá ser adicionada à url dos links de navegação. Isto é especialmente importante para criar links dinâmicos, então se você quiser adicionar opções adicionais à estas queries, a classe de navegação irá adicionar automaticamente aos links de navegação dinâmicos. */ function Construir_Url() { global $REQUEST_URI, $REQUEST_METHOD, $HTTP_GET_VARS, $HTTP_POST_VARS; // separa o link em 2 strings @list($this->nome_arq, $voided) = @explode("?", $REQUEST_URI); if ($REQUEST_METHOD == "GET") $cgi = $HTTP_GET_VARS; else $cgi = $HTTP_POST_VARS; reset($cgi); // posiciona no inicio do array // separa a coluna com o seu respectivo valor while (list($chave, $valor) = each($cgi)) if ($chave != "pagina") $query_string .= "&" . $chave . "=" . $valor; return $query_string; } /* Este método cria uma ligação de todos os links da barra de navegação. Isto é útil, pois é totalmente independete do layout ou design da página. Este método retorna a ligação dos links chamados no script php, sendo assim, você pode criar links de navegação com o conteúdo atual da página. $opcao parâmetro: . "todos" - retorna todos os links de navegação . "numeracao" - retorna apenas páginas com links numerados . "strings" - retornar somente os links 'Próxima' e/ou 'Anterior' $mostra_string parâmetro: . "nao" - mostra 'Próxima' ou 'Anterior' apenas quando for necessários . "sim" - mostra 'Próxima' ou 'Anterior' de qualqur maneira */ function Construir_Links($opcao, $mostra_string) { $extra_vars = $this->Construir_Url(); $arquivo = $this->nome_arq; $num_mult_pag = ceil($this->total_reg / $this->num_pesq_pag); // numero de multiplas paginas $indice = -1; // indice do array final $numero_links_proximos=4; for ($atual = 0; $atual < $num_mult_pag; $atual++) { // escreve a string esquerda (Pagina Anterior) if ((($opcao == "todos") || ($opcao == "strings")) && ($atual == 0)) { if ($this->pagina != 0){ $array[++$indice] = '' . "Primeira" . '      '; $array[++$indice] = '' . $this->str_anterior . ''; } elseif (($this->pagina == 0) && ($mostra_string == "sim")){ $array[++$indice] = $this->str_primeira; $array[++$indice] = $this->str_anterior; } } // escreve a numeracao (1 2 3 ...) if (($opcao == "todos") || ($opcao == "numeracao")) { if (($atual > $this->pagina - $numero_links_proximos)&&($atual < $this->pagina + $numero_links_proximos) ){ if ($this->pagina == $atual){ $array[++$indice] = ""; $array[++$indice] = ($atual > 0 ? ($atual + 1) : 1); $array[++$indice] = ""; }else{ if (($atual == ($this->pagina -($numero_links_proximos-1)))&&($atual != 0)) { $array[++$indice] = "..."; } $array[++$indice] = '' . ($atual + 1) . ''; if (($atual == ($this->pagina +($numero_links_proximos-1)))&&($atual != $num_mult_pag-1)){ $array[++$indice] = "..."; } } } } // escreve a string direita (Proxima Pagina) if ((($opcao == "todos") || ($opcao == "strings")) && ($atual == ($num_mult_pag - 1))) { if ($this->pagina != ($num_mult_pag - 1)){ $array[++$indice] = '' . $this->str_proxima . ''; $array[++$indice] = '      ' . "Última" . ''; } elseif (($this->pagina == ($num_mult_pag - 1)) && ($mostra_string == "sim")){ $array[++$indice] = $this->str_proxima; $array[++$indice] = $this->str_ultima; } } } return $array; } /* Este método é uma extensão do método Construir_Links() para que possa ser ajustado o limite 'n' de número de links na página. Isto é muito útil para grandes bancos de dados que desejam não ocupar todo o espaço da tela para mostrar toda a lista de links paginados. $array parâmetro: . retorna o array de Construir_Links() $atual parâmetro: . a variável da 'pagina' atual das páginas paginadas. ex: pagina=1 $tamanho_desejado parâmetro: . o número desejado de links à serem exibidos */ function Mostrar_Parte($array, $atual, $tam_desejado) { $size = count($array); if (($size <= 2) || ($size < $tam_desejado)) { $temp = $array; } else { $temp = array(); if (($atual + $tamanho_desejado) > $size) { $temp = array_slice($array, $size - $tam_desejado); } else { $temp = array_slice($array, $atual, $tam_desejado); if ($size >= $tamanho_desejado) { array_push($temp, $array[$size - 1]); } } if ($atual > 0) { array_unshift($temp, $array[0]); } } return $temp; } } ?>