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. En plus du formatage, il ajoute un lien "lire la suite" (c’est pourquoi il utilise deux paramètres). C’est donc vers le lien "Lire la suite" que l’on peut modifier comment agit la fonction sur la fin.
pour l’utiliser il faudra faire
(#TEXTE|couper_formatage{300,#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_formatage{300,#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;
}