Page 1 sur 1

Couper un article trop long en plusieurs articles.

Posté : 23 nov. 2005, 12:09
par Lexarino
Bonjour à tout :)

Voilà, j'ai besoin de conseils pour trouver la meilleure façon de fractionner un article en plusieurs parties.

En effet, j'aimerais que la page qui reçoit l'article depuis ma base de données ne s'étende pas à l'infini... l'intérêt c'est que ça rend le design moins déformé et surtout, ça permet de recharger les publicités !

On voit souvent ce genre de procédés sur internet...

Une solution serait d'insérer l'article déjà fractionné dans la base de donnée, une entrée différente pour chaque partie... m'enfin c'est pareil après l'option imprimée sera obligée de jongler dans la base pour coller les parties à la suite... c'est faisable mais bon...

Je pensais à une autre solution : insérer des balises php aux endroits à couper mais après il faut trouver le script qui permet d'indiquer à la page de pas considérer la fin du texte et ensuite en cliquant sur le lien suite, lui indiquer de pas lire le début...

Bref pas évident pour moi... mais pour vous ?!

Merci d'avance, n'hésitez pas à me donner des liens :)

Posté : 23 nov. 2005, 20:24
par Truc
Salut, voila un sujet similaire ... tu pouras faire des modifs pour prendre en compte un début et une fin pour le découpage je pense.

Problème résolu !

Posté : 29 nov. 2005, 13:02
par Lexarino_
bon j'ai fini par bidouiller mon propre script, je me suis dit que j'allais venir vous le présenter, je pense que ça peut aider :

en fait il faut préformater son texte avec par exemple {cut} là où on veut couper et {fin} pour la fin.

Après on opère chirurgicalement avec les fonctions :
strpos() qui va chercher la position des caractères {cut} et {fin}
et puis substr_replace() qui va servir à effacer tout ce qui doit être couper pour afficher qu'une portion de la chaine de texte...

Voilà l'exemple :
Admettons une page php qui affiche un article depuis une base de données, qu'on nommera page.php :
// Recherche la position de l'information {cut} et ajoute 5 pour la conservée.

if (empty($HTTP_GET_VARS['$cut'])) {
$source = "Texte à couper {cut} parce que trop long {cut2} bien trop long{fin}" ;
$pos = strpos($source, "{cut}") ;
$pos = ($pos +5) ;
// 1-cherche la position de {fin}.
$pos_fin = strpos($source, "{fin}") ;
// 2-calcul l'écart entre le {cut} et le {fin}.
$calcul = (($pos_fin +5) - $pos) ;
// 3-conserve tout ce qui se trouve jusqu'à {cut} et supprime tout ce qui suit.
$source_coupee = substr_replace($source, '', $pos, $calcul) ;
}

Après : on remplace l'information {cut} par un lien "afficher la suite".
$affichage = str_replace("{cut}", "<p><strong><a href='page.php?id={x}&cut=1'>Lire la suite</a></strong><p>", $source_coupee) ;

Puis pour afficher la suite, il faut couper le texte précédent le {cut} et garder celui qui vient ensuite :
C'est pour cela que dans le lien plus haut, on introduit la variable $cut qui permet de savoir où en est la lecture.

On introduit alors le code suivant sous le premier bloc de cet exemple :
// On vérifie où en est la lecture :
if ($HTTP_GET_VARS['$cut'] == "1") {

$source = "Texte à couper {cut} parce que trop long {cut2} bien trop long{fin}" ;
$pos = strpos($source, "{cut}") ;
$pos = ($pos +5) ;
// 1- On supprime tout ce qu'il y a avant le {cut}
$source_coupee = substr_replace($source, '', 0, $pos) ;
//on cherche la position du {cut2} et cette fois : on ajoutte 6 pour le supprimer.
$pos2 = strpos($source_coupee, "{cut2}") ;
$pos2 = ($pos2 +6) ;
//on cherche une nouvelle fois la position de {fin} qui depuis la coupure juste au dessus, n'est plus la même que la fois d'avant.
$pos_fin = strpos($source_coupee, "{fin}") ;
//on calcule la distance entre le {cut} et la {fin} pour supprimer tous les caractères qui s'y trouvent :
$calcul = (($pos_fin +5) - $pos2) ;
//2- On supprime enfin le reste de la chaine calculée juste avant.
$source_coupee = substr_replace($source_coupee, '', $pos2, $calcul) ;
}
Voilà, je vous laisse deviné comment rédiger le code pour la dernière page du {cut2} à {fin}


Je sais pas si c'est le code le plus pratique, en tout cas ça évite d'avoir à couper son article en plein d'entrées dans la base puis ensuite jongler entre les enregistrement... surtout pour les mises à jour.

On peut aussi imaginer un script qui vient mettre les infos {cut_n} et {fin} de façon automatique, tous les X caractères... mais bon je trouve que c'est plus intéressant quand même de choisir manuellement où on veut couper son article : ça permet de jouer avec le suspens du visiteur...
...oui oui un peu comme les pubs sur TF1 :)