Filtre à couper le texte

© Christian PAULUS. Document créé le 27 octobre 2007 , mis à jour le 27 octobre 2007.

Ce n'est pas le tout d'être une femme du monde. Encore faut-il savoir de quel monde il s'agit. Pierre Dac

Accueil du site > Astuces > SPIP > Filtre à couper le texte

Filtres / SPIP 1.9.2

Le filtre SPIP couper permet d’extraire une partie du texte. Par défaut, la longueur de cette extraction est de 50 caractères. Si le texte dépasse cette longueur, les 50 premiers caractères (environ, car couper tient compte des mots) sont retournés, agrémentés d’un (…) pour signifier au lecteur qu’il s’agit ici d’un extrait du texte.

Pour en savoir plus sur le filtre couper, lire la page des filtres sur spip.net.

Le besoin : transformer ce (…) en « Lire la suite de ce texte » - ou quelque chose du genre – en y proposant un lien sur l’article.

PNG

Au plus simple : utiliser le filtre couper en tant que fonction dans un nouveau filtre.

Un peu de code

La fonction couper_suite() :

<?php

function couper_suite($texte$id_article$url$titre$taille=50) {
    
$texte couper($texte$taille);
    
$pattern "\(\.\.\.\)";
    if(
preg_match("'".$pattern."$'"$texte)) {
        
$texte ""
            
preg_replace("'".$pattern."$'"""$texte)
            . 
"<a class='lire-suite' title='" _T('Lire_la_suite_de_') . $titre
            
"' href='$url#texte_$id_article'>•••"
            
_T('Lire_la_suite')."</a>\n";
    }
    return(
$texte);
}

?>

Copiez cette fonction et collez-là dans votre script mes_fonctions.php.

Dans la foulée, apportez votre traduction dans le script local_fr.php (pour la version française), local_en.php (pour la version anglaise), etc.

Voici un extrait pour local_fr.php :

<?php 

$GLOBALS
[$GLOBALS['idx_lang']] = array(
    
'Lire_la_suite' => "<span>suite</span>"
    
'Lire_la_suite_de_' => "Lire la suite de l&acute;article "
);

?>

Finalisez l’installation de ce filtre par quelques feuilles de style à placer dans votre fichier css :

<style type="text/css">
<!--
a.lire-suite {
        font-size: 90%;
        font-style: italic;
        font-weight: bold;
        color:red;
}
a.lire-suite span {
        padding-left:0.5ex;
        color: #999933;
}
-->
</style>

Il ne reste plus qu’à mettre en œuvre le filtre couper_suite dans vos squelettes. Par exemple :

<div class="texte">[(#TEXTE|couper_suite{#ID_ARTICLE, #URL_ARTICLE, [(#TITRE)], 150})]</div>

Ici, le texte sera coupé à environ son 150ème caractère, le petit lien en fin d’extrait permettra au lecteur d’appeler la page de l’article concerné.

Touche finale : placez l’ancre dans votre squelette d’article, juste avant le traitement du texte de cet article :

<a name="texte_#ID_ARTICLE" id="texte_#ID_ARTICLE"></a>
[<div class="texte">(#TEXTE)</div>]

Plussoyez !

Les forums sont fermés.

  • Filtre à couper le texte 27 octobre 2007 21:49, par Gras ladin
    Impec ! je cherchais une solution de ce genre pour remplacer le filtre couper de SPIP. Fomidable. Devrait être dans la version officielle. Merci. Merci. Merci.

    Les forums sont fermés.

  • Filtre à couper le texte 2 avril 2008 22:09, par johne
    ou je doit mettre le fichier de langue local_fr.php dans quel repertoire

    Les forums sont fermés.