Lexarino_
Invité n'ayant pas de compte PHPfrance
29 nov. 2005, 13:02
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
