+2

Paginação de um arquivo em Texto

criado por Danilo Faustinoni Cabello em 13/05/2004 10:26am
Outro dia tava lendo um artigo do site e vi uma pergunta de uma pessoa pedindo um sistema de paginação de arquivos, pensei, isso deve ser facil é só pensar um pouco, utilizando o artigo que ensina a mexer com arquivos, abrindo pra leitura, etc, criei o meu código para paginar dividindo-o em partes, vamos lá.

Como é meu primeiro artigo vou explicar do meu jeito, espero que gostem:

Pode escolher qualquer nome para a página que faz a paginação, pois o código já esta preparado pra isso.

<?php
global $PHP_SELF;

// A partir do PHP 4.2.3 é necessário declarar a variável $PHP_SELF como global.

@$pagina = $_REQUEST['pagina'];
@$exibe  = $_REQUEST['exibe'];

// Usamos $_REQUEST para pegar os valores das variáveis página e exibe.
// Um recurso que já existia mas que agora é obrigatório.
// Usamos @ para se o valor for NULL, o PHP não dar aquela mensagem chata.

if ($pagina == "") {
    $pagina = "1"; 
}

if ($exibe == "") {
    $exibe = "15"; 
}

// Verificando se as variavéis tão com valor NULL, EMPTY, como queiram chamar.
// Aqui que você define quantas linhas você quer por página modificando a variável $exibe

$arquivo_linhas = file("texto.txt");

// Aqui a $arquivo_linhas é uma array que começa a partir do 0 (zero) e vai ate a última // linha.
// Cada valor da array tem o conteúdo de sua respectiva linha.
// Escolha o seu arquivo o meu é texto.txt como acima.

$conta_linhas = count($arquivo_linhas);

// Count serve para contar quantas CHAVES tem dentro de uma ARRAY.
// Por exemplo, array[3] é a ultima então ele vai contar 0,1,2,3 e na variável resultar 4, // muito útil esse comando.

$total_paginas = ceil(($conta_linhas/$exibe));

// Ceil serve para arredondar um número pra cima então dividimos o total de linhas pelo 
// quanto de linhas vamos exibir, arredondamos para cima e obtemos o número de páginas.
// Por exemplo, 5 divido por 2 vai dar 2.5 que signifaca que temos 3 páginas sendo a 
// última com 1 registro.

echo "<center> Arquivo tem ".$conta_linhas." linhas <br>";
echo "Página ".$pagina." de ".$total_paginas."</center><br>";

// Usamos das informações calculadas para passar informações em texto para o leitor.

$linha_chegar = (($pagina-1)*$exibe);

// Essa é uma variável que determina por que linha devemos começar a exibir ao leitor, 
// porque se ele estiver na página 3 vai querer que comece pela linha onde parou e não 
// pela primeira.

for ($linha = 0; $linha != $linha_chegar; $linha++) {
    list ($num_linha, $conteudo_linha) = each ($arquivo_linhas); 
}

// For basico para posicionar na linha com conteúdo certo a começar.
// Vou explicar: Loop de $linha igual 0 enquanto $linha for diferente da $linha_chegar 
// vai somando um a cada loop
// Ai vem o comando que faz grande parte de tudo.
// List faz com que as variáveis $num_linha receba a CHAVE (KEY) da ARRAY e que a 
// $conteudo_linha receba seu VALOR (VALUE)
// Esse EACH faz com que pegue separado cada valor da array.
	
$ultima_linha = ($linha_chegar + $exibe);
if ($ultima_linha > $conta_linhas) {
    $ultima_linha = $conta_linhas; 
}

echo "<center>Mostrando linhas de ".($linha_chegar+1)." a ".$ultima_linha."</center><br>";

// Aqui a gente mostra de qual linha a qual linha o leitor está lendo. (meio redundante)
// A variável $ultima_linha recebe o valor de onde o posicionador parou mais o quanto 
// exibe por página.
// Se ela for maior que o número de linhas do arquivo quer dizer que tá no fim dele, 
// entaum ela recebe o valor do total de linhas.

$parar = "não";
while ($parar == "não") {
    list ($numlinha, $conteudolinha) = each ($arquivo_linhas);
    echo $conteudolinha."<br>";
	
    if (($numlinha + 1) == $ultima_linha) {
        $parar = "sim"; 
    }
}

// Loop principal ele é o sistema da exibição.
// Enquanto parar for igual a não continuar o loop usando o LIST que já expliquei e o EACH
// agora com ECHO para imprimir o conteúdo da linha na página.
// Agora dá pra entender como o LIST funciona não é?
// Se a CHAVE da array mais um (1) for igual ao valor da ultima linha, parar ganha o valor // de sim e o loop acaba.

echo "<BR>";

$navegacao = 1;

while ($navegacao <= $total_paginas) {
    if ($navegacao != $pagina) {
        echo ' <a href="'.$PHP_SELF.'?pagina='.$navegacao.'">'.$navegacao.'</a> '; 
    } else { 
        echo ' '.$navegacao.' '; 
    }
    $navegacao++;
}
?>

Fazendo sistema de navegação das páginas.
Enquanto o valor de $navegacao for menor que o total de páginas faz o loop.
Se $navegacao for diferente da página atual coloca link senão, isto é for a pagina atual não coloca link.

Na próxima página vocês tem o código inteiro sem comentários.
Espero que tenham gostado do meu artigo.

Comentários:

Mostrando 1 - 10 de 12 comentários
edyd junges disse:
valeu
esse script me quebrou um super galho aki
que era de mostrar um arquivo de notícias do FusionNews (que eh flatfile) por páginas
05/04/2006 8:47pm (~10 anos atrás)

Pedro Mineiro disse:
Viva!
O artigo esta bem feito e bem documentado. Acho que mais vale documentar no proprio codigo, é muito mais facil de ler.
Agora esta um problema basico no artigo. Os ficheiros txt podem conter o texto todo seguido sem endl... para esses ficheiros este artigo nao funciona :(
alguma forma de contornar isto?
08/12/2005 9:02pm (~11 anos atrás)

rui paiva disse:
tens o artigo "Paginação de Resultados" que te pode ajudar no que necessitas.
10/06/2004 6:20am (~12 anos atrás)

Reginaldo disse:
Eu tenho umcliente que é uma revista, e algumas materias dos caras são enormes e fica uma tripa gigante.

Ele me pediu para fazer uma paginação das materias, mas as materias são dinamicas via gerenciador php/mysql.

Alguem teria uma dica para me ajudar?
01/06/2004 1:35pm (~12 anos atrás)

poiseh.. no começo é sempre assim! kem nunk trabalhou com um arquivo txt antes de passar para um mysql, postgree etc..
todo mundo passa por essa vidinha.. eh como crescer no php.. faz parte! =)
bom eh isso!

[]`z
22/05/2004 3:31pm (~12 anos atrás)

EquipeXQ disse:
Olha. Como o objetivo aqui é sempre a didática...eu acho que cada artigo, tutorial etc..tem que ser como é colocado, obviamente que haverá milhares de opções, sofisticações e aprofundamento, ocorre que o iniciante que está aprendendo necessita o mais básico possivel. Se o Artigo é para programador avançado, terá um conteúdo avançado, caso contrário creio que deve ser como é, mesmo porquê há momentos em que você necessita exatamente o que está ali, por mais simples ou complexo que seja.
Não é verdade?...abraço a todos.
20/05/2004 1:07pm (~12 anos atrás)

opa pessoal o artigo está bem simples mesmo, eu mandei ele no começo de 2003 por isso ele usava txt, não tinha muita coisa ali nem aqui, depois de 3 meses desisti de ver meu artigo, bom desculpa ai quem achou muita complicação pra fazer algo simples e com um txt mas eu tava no começo e talz queria ajudar a comunidade, espero que esteja pelo menos funcional

valew, []'s
19/05/2004 4:20pm (~12 anos atrás)

já que é arquivo texto, não seria melhor armazenar o conteúdo em um arquivo XML? Com certeza, seria bem mais fácil especificar quantas páginas e quais conteúdos você quer pegar delas usando um XML do que apenas um TXT puro.

--
Espero ter ajudado,
Turbano
19/05/2004 7:52am (~12 anos atrás)

Legal o artigo. Só vejo dois problemas. O primeiro é usar um .txt (ta bom que é pra texto, mas esquecam .txt e .inc). O segundo é o problema de quebrar paragráfos no meio. Acho que você deveria dividir quando der uma linha em branco, talvez como uma melhora no programa. Uma divisão inteligente, mas que nao deixe que em fique apenas um paragráfo, mas sim o máximo de parágrafos, sem que ultrapasse $exibe e sem que corte algum ao meio.

[]´s

llbra
14/05/2004 10:10pm (~12 anos atrás)

gostei muito do seu artigo, além do que é muito util =)
14/05/2004 2:42pm (~12 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)