Ma réponse n’est pas directe à ta question mais l’inclut.
Je voulais une fonction couper qui garde le formatage. En me balladant sur spip-contrib (plus précisément là :
Cela donne le filtre couper_formatage. A priori, il peut garder ton image
pour l’utiliser il faudra faire
(#TEXTE|couper_formatage300,#URL_ARTICLE)
(en modifiant le 300, qui est le nombre de caracères, mais pas le #URL_ARTICLE
Voici le code à mettre dans le fonctions.php3 :
Merci de cette contrib. J’ai réutiliser un bout du code pour recréer un filtre "couper" qui garde le formatage du texte. Cela donne le filtre couper_formatage. En plus il ajoute un lien "lire la suite" (c’est pourquoi il utilise deux paramètres.
pour l’utiliser il faudra donc faire
(#TEXTE|couper_formatage300,#URL_ARTICLE)
(en modifiant le 300, qui est le nombre de caracères, mais pas le #URL_ARTICLE
Voici le code à mettre dans le fonctions.php3 :
// coupe une chaîne à $limite caractères, sans coupure de mot
// (un mot est considéré comme un groupe de caractères séparé par des espaces)
function couper_formatage($texte, $limite,$url) {
// la longueur du texte est <= $limite, on retourne le texte entier
if (strlen($texte) <= $limite) return $texte;
// on fait la coupure avant le 1e espace après $limite caractères
$texte = nl2br($texte);
$pos = strpos(substr($texte, $limite), " ");
// s'il y a un espace après $limite caractères ou juste après $limite caractères
// on retourne la partie de $texte jusqu'avant cet espace
if (is_integer($pos) && $pos) return substr($texte, 0, $limite+$pos) . " (...)"." <a
href=\"$url\">Lire la suite</a>";
// sinon (pas d'espace après $limite caractères ou juste après $limite caractères) on retourne le texte
else return $texte;
}