Jump to content


Photo

Paginar Texto Em Forma De Livro, Ta Valendo Até A Lógica!


  • Faça o login para participar
4 replies to this topic

#1 Marcos Aurélio

Marcos Aurélio

    Das terras geladas da Sibéria

  • Usuários
  • 208 posts
  • Sexo:Masculino

Posted 20/06/2007, 20:09

Boa noite caros amigos!

Tenho um sério problema, preciso fazer um script de livro, ele funciona assim: você insere no banco de dados os capítulos, e depois ele tem que pegar todos os capítulos, ver quantas páginas tem e fazer a paginação, isso seria fácil, se não fosse:

- Todo início de capítulo tem que ser em uma nova página;

- Não contar HTML como caractere (seria só negrito, itálico e....;

- Teria que aceitar a imagem, pensei em algo assim: pega-se o tamanho da imagem, e calcula-se qual o tamanho do espaço que ela ocuparia (seria pré-definido), e subtraia da quantidade de texto da página. EX: na página 15 tem uma imagem de 300x300 = 200 caracteres, só se pode ter 500 caracteres por página, logo essa página só pode ter mais 300;

- Não cortar a palavra (EX: "esse seria o fim da pági...", deixar assim "esse seria o fim da", sem cortar);

- Não pode ser pesado pois, tratando-se de livros, são grandes quantidades de texto, se for algo pesado, demoraria anos para processar;

- Como fazer isso, se o texto não está agrupado, e sim, separado por inserções no banco de dados?

Estou postando mais por desencargo de consciência, acho que não vou conseguir respostas :(


O script para paginar o texto é blz, nosso amigo Savior já desvendou, mas isso aí de cima... já pesquisei muito e não achei nada a respeito!


[codebox]<?php
$texto = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque luctus, metus vel accumsan sodales, dolor ipsum tincidunt lectus, eget molestie augue odio sit amet ligula. Cras ultrices. Nunc sagittis molestie ante. Aenean posuere eleifend elit. Praesent quam est, pellentesque in, aliquet id, auctor id, sapien. Integer sodales rutrum purus. Proin nisl diam, mattis nec, feugiat eu, consectetuer id, felis. Phasellus tristique, justo non rhoncus facilisis, metus urna facilisis metus, nec ornare massa sapien sed tortor. Duis est. Suspendisse varius, lorem ut euismod tristique, nibh ante porta nisl, sit amet tempor leo tellus nec nunc. Curabitur neque. Pellentesque non lectus. Integer mattis, est et auctor luctus, massa nisi congue tortor, in aliquam elit nisl vitae dui. Curabitur eros eros, scelerisque ut, ultrices ac, rhoncus id, risus.

Praesent pulvinar consequat ante. Suspendisse laoreet rhoncus augue. Duis aliquam urna sit amet orci. Curabitur sit amet lacus. Sed aliquam, neque et dapibus eleifend, pede massa eleifend eros, vitae posuere enim quam quis arcu. Nulla sit amet quam quis lorem vulputate tempus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris faucibus sem id elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec nulla ante, rhoncus commodo, porttitor eget, vulputate ac, augue. Quisque auctor aliquam leo. Etiam tempus libero nec orci. Donec non nunc.

Fusce ut felis at augue iaculis nonummy. Sed sem magna, luctus nec, consectetuer ac, interdum sollicitudin, lacus. Mauris sed nisl in odio ullamcorper adipiscing. Aenean dui elit, tempus at, hendrerit vel, semper non, dolor. Praesent magna sem, gravida vitae, tincidunt vel, facilisis non, risus. Sed malesuada. Nunc at lectus. Etiam sed tellus eu dui feugiat tempus. Pellentesque in mauris eu orci tincidunt pulvinar. Quisque nec turpis eget lorem bibendum tempor. Aenean ultrices feugiat mauris. Cras non enim sed leo euismod ullamcorper. Duis tellus. Vestibulum tempus tellus eu nulla.

Vestibulum condimentum pede sed libero. In eu eros ut arcu sollicitudin porttitor. Ut varius placerat nisi. Vestibulum diam orci, hendrerit porttitor, tempor in, consectetuer eu, felis. In tristique adipiscing dui. Curabitur mattis sem at arcu sodales interdum. Curabitur laoreet tristique elit. Cras sodales venenatis mauris. Praesent vehicula diam sit amet orci. Donec ac pede at metus hendrerit imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed scelerisque erat. Duis sit amet sapien at quam placerat porttitor. Fusce placerat tellus eu pede. Pellentesque fermentum quam sodales erat. Proin at orci. Donec sem risus, feugiat vitae, commodo vel, accumsan id, massa. Mauris auctor consequat eros. Ut arcu. Pellentesque condimentum, erat vitae sagittis facilisis, turpis enim semper purus, sit amet mollis nibh nunc nec magna.

Nulla eu metus id arcu lobortis pharetra. In mollis metus eu elit. Vestibulum pretium lorem vel magna. In scelerisque quam sit amet risus. Nulla sem turpis, fermentum vel, blandit et, bibendum consequat, quam. Suspendisse ultrices mauris eget sem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed fringilla. Etiam ligula arcu, sagittis ut, placerat vitae, imperdiet nec, felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque hendrerit ullamcorper lacus.
";
echo str_word_count($texto) . " palavras <br />";
echo strlen($texto) . " caracteres <br />";


$pagina = (int)(isset($_GET['pagina']) ? $_GET['pagina'] : 1);
$limite = 255; //Caracteres por pagina

if ((strlen($texto) > $limite) && ($pagina > 0)) {


$total = ceil(strlen($texto) / $limite);
$lim_inf = ($pagina > 1) ? ($limite * ($pagina - 1)) : 0;
$lim_sup = $limite * $pagina;
echo "Páginas: " . $total . "<br />";
echo "Limite de caracteres: " . $limite;
echo "<hr />";
echo "<p>";
for ($i = 1; $i <= $total; $i++) {
echo "<a href=\"?pagina=" . $i . "\">" . (($i < 10) ? "0" : "" ) . $i . "</a> ";
}
echo "</p>";

if ($lim_inf > 0) {
do {
//Procurará por espaços, quebras de linha, tabs, etc.
// Caso nao ache incrementa +1 para procurar na proxima index,
// caso ache, para o processo.
if (preg_match('/\\s/',$texto[$lim_inf]))
break;
$lim_inf++;
} while (true); //Performance
}
do {
//Procurará por espaços, quebras de linha, tabs, etc.
// Caso nao ache incrementa +1 para procurar na proxima index,
// caso ache, para o processo.
if ((!isset($texto[$lim_sup])) || (preg_match('/\\s/',$texto[$lim_sup])))
break;
$lim_sup++;
} while (true); //Performance

echo "<p>" . substr($texto, $lim_inf, ($lim_sup - $lim_inf)) . "</p>";

echo "<p><a href=\"?pagina=0\">Ver texto na integra</a>";
} else {
echo $texto;
}
?>[/codebox]

---------------------
Editado: tinha esquecido de algumas coisas.

Edição feita por: Marcos Aurélio, 20/06/2007, 21:53.


#2 SRCC

SRCC

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado

Posted 21/06/2007, 02:12

O banco de dados é MySQL?
Os capítulos estão em campos blob?
Cada capítulo é um item da tabela?

#3 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 21/06/2007, 03:04

- Não contar HTML como caractere (seria só negrito, itálico e....;

strip_tags()

- Não cortar a palavra (EX: "esse seria o fim da pági...", deixar assim "esse seria o fim da", sem cortar);

str_truncate()

[]’s :DAté mais

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 21/06/2007, 08:35

- Não contar HTML como caractere (seria só negrito, itálico e....;

strip_tags()

- Não cortar a palavra (EX: "esse seria o fim da pági...", deixar assim "esse seria o fim da", sem cortar);

str_truncate()

[]’s :D


Eu que fiz a paradinha que ele tá usando PR...
Se você tiver olhando lá em cima, eu fiz um str_truncate ali tabajara >_>'.

Ele não soube se explicar direito.
Ele quer uma função que corte a string, sem contar as tags html, mas que na hora de mostrar o texto, estas tags html voltem.

Texto (quantidade de caracteres = 44

<strong>Lorem ipsum dolor sit amet.</strong>


Porem, entretando, todavia,
ele quer que somente o que conte 27 caracteres, que seria somente o que está dentro da tag strong. Na hora de mostrar o texto o strong voltasse.

Atualmente do jeito que tá, pode cortar no meio do html, tinha que descobrir um jeito de fazer isto, além de verificar espaços em branco verificar que se alguma tag tiver aberta, ainda não cortar a string. Mas é fogo viu pensa num jeito.

(y)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 Marcos Aurélio

Marcos Aurélio

    Das terras geladas da Sibéria

  • Usuários
  • 208 posts
  • Sexo:Masculino

Posted 21/06/2007, 11:29

Porem, entretando, todavia, ele quer que somente o que conte 27 caracteres, que seria somente o que está dentro da tag strong. Na hora de mostrar o texto o strong voltasse.

Atualmente do jeito que tá, pode cortar no meio do html, tinha que descobrir um jeito de fazer isto, além de verificar espaços em branco verificar que se alguma tag tiver aberta, ainda não cortar a string. Mas é fogo viu pensa num jeito.


Exatamente! (y) Alguém pode me ajudar?

Edição feita por: Marcos Aurélio, 21/06/2007, 11:30.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq