Découper un article en plusieurs pages

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2007, 11:33

Bonjour,
pour un site j'utilise Spip pour la gestion du contenu et la rédaction d'articles.
Lors de la redaction d'articles trop long, j'aimerais que celui ci soit découper automatiquement (suivant le nombre de caractères ou de paragrpahes) en plusieurs pages.

Sur les sites Spip la seule solution que j'ai trouvé est celle ci : http://www.spip-contrib.net/Decouper-un ... orum393729
Mais le découpage se fait manuellement par le redacteur qui doit lors de
la rédaction d'un article indiqué à quel moment il veut que le changement de page s'effectue. Ce qui pour ce site là est trop contraignant pour le rédacteur. Je prefere donc soumettre mes articles à un découpage automatique hasardeux qui demande aucune intervention du rédacteur.

J'ai donc besoin de votre aide pour modifier mes_fonctions.php afin que la découpe des pages se fasse de façon automatique par rapport à un nombre de caractère par exemple. Je me doute que c’est « $page = split(’-----’, $texte) ; » qu’il faut remplacer cependant je ne vois pas comment.

Je sais bien qu’une telle découpe automatique n’est pas conseillé mais je souhaite juste savoir comment est il possible de le faire. Merci de vos réponses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mai 2007, 11:44

$page = split(’-----’, $texte) ;
Ce code va découper le contenu de la variable $texte à chaque fois qu'il trouve la chaine '-----' et mettre les différentes valeurs obtenues dans un tableau $page.

Si tu veux le remplacer, il te suffit donc, à l'identique, de remplir le tableau $page avec les différentes parties de ton texte. Tu peux à partir de la, avec les fonction strlen(), substr(), wordwrap(), découper ta chaine. wordwrap() te permet nottament d'insérer un séparateur tous les n caractères en revenant au mot précédent pour ne pas le couper. Tu pourrais aini par exemple intégrer automatiquement des '-----' et laisser le split ci-dessus fonctionner normalement.

Le problème, et le plus dur à résoudre (du moins pour moi qui ne connait pas spip) est à mon avis d'identifier les paragraphes pour ne pas couper n'importe où... A toi de voir le contenu de $texte et de voir ce qui est utilisable pour une découpe propre :) (des balises html de type <p> ? peut être 2 retours charriot consécutif ? ... )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 451 Messages

10 mai 2007, 11:45

En faisant une recherche google avec :
php decouper un texte
Le premier lien indique :
http://www.asp-php.net/ressources/bouts ... aspx?id=88

Ca ne convient pas ?
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2007, 11:47

wordwrap() te permet nottament d'insérer un séparateur tous les n caractères en revenant au mot précédent pour ne pas le couper. Tu pourrais aini par exemple intégrer automatiquement des '-----' et laisser le split ci-dessus fonctionner normalement.
Bonne idée, j'yavais pas pensé.
je vais essayer ça merci.

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2007, 12:04

ça fonctionne. Nickel Merci. :D
Je chercherais plus tard à ameliorer ce script pour notamment que le passage de pages ne se fasse pas au milieu d'un mot. Mais bon le principal est là.
Merci encore.

Code : Tout sélectionner

$texte2 = wordwrap($texte, 2000, '-----', 1); $page = split('-----', $texte2);