SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Rédaction > Assistants de rédaction

Mesurer la longueur d’un article

mardi 16 novembre 2004, par François Schreuer. Dernier ajout dimanche 29 avril 2007


Un petit article à vocation pédagogique pour montrer comment il est possible d’utiliser un filtre php dans spip.


Il peut être utile de compter le nombre de signes, de caractères ou de mots d’un article (comme par exemple ici).

Voici, exposé en quelques étapes simple, comment réaliser cela dans un squelette spip.

Longueur d’un champ

Pour compter très simplement le nombre de signes dans un champ, ajoutez ceci dans votre squelette à l’endroit où vous souhaitez placer l’information.

Quelques explications :

  • Le filtre textebrut supprime les balises html et autres broutilles qui ne rentrent pas en ligne de compte dans le chiffre que nous souhaitons obtenir.
  • Comme toute fonction php, strlen peut-être utilisée comme filtre spip. Le cas présent est très simple puisqu’un seul paramètre est requis par la fonction.
  • Notez qu’il est essentiel de respecter l’ordre des filtres : le texte doit passer par textebrut avant le comptage des signes.

Sans les blancs

Rigoureusement parlant, nous venons de compter les signes d’un champ. Nous pouvons aussi compter seulement les caractères (soit les signes sans les blancs).

Pour ce faire, on commence par créer un filtre supprimer_blancs ad hoc, à placer dans le fichier mes_fonctions.php3 (à créer, si nécessaire, dans la racine de votre spip).

Il ne reste plus qu’à appeler ce filtre dans votre squelette.

Longueur d’un article

Pour compter non plus la longueur d’un seul champ, mais la longueur de tout un article, le plus simple est sans doute d’utiliser une ligne de php directement dans le squelette :

De même, si vous ne voulez compter que les caractères, sans inclure les blancs, il suffit de placer ceci dans votre squelette (sans oublier de placer le filtre supprimer_blancs dans votre fichier mes_fonctions.php3).

Nombre de mots

Il est aussi possible de compter le nombre de mots contenus dans un champ.

Pour ce faire, nous allons retirer du texte tout ce qui risquerait d’interférer dans le comptage : ponctuation, appel de notes de bas de page, espaces excédentaires,... C’est l’objet des fonctions supprimer_notes et supprimer_ponctuation. Ensuite, il suffit de placer chaque mot dans un tableau et de retourner la taille du tableau, ce que fait la fonction nombre_de_mots, qui peut être appelée comme filtre depuis un squelette. Enfin, la fonction number_format_fr permet d’afficher les nombres obtenus en espaçant les milliers avec des espaces insécables.

De la même façon qu’on avait procédé pour le comptage des signes, on peut donc afficher le nombre de mots d’un article, tous champs confondus, de la manière suivantes.


Répondre à cet article

  • Mesurer la longueur d’un article

    2 février 2006 14:50, par jojo

    Sur le sommaire j’affiche le chapo et s’il n’existe pas le texte filtré avec couper_mot. Dans les 2 cas, je met un lien sur l’article. Si le texte est court je voudrais afficher l’article en entier sans mettre un lien sur l’article ..

    Auriez vous une idée de la boucle ? merci

    Répondre à ce message

    Retour au début des forums

  • > Mesurer la longueur d’un article

    18 août 2005 23:14, par Bernard

    Serait il possible d’adapter cette contrib pour obliger les redacteurs à ne pas dépasser 2500 caractères tout compris lors de la rédaction d’un article..
    Ceci pour éviter les pages au kilomètres ;o)
    Merci d’avance

    Répondre à ce message

    • > Mesurer la longueur d’un article 19 août 2005 00:43, par François

      Salut,

      Serait il possible d’adapter cette contrib pour obliger les redacteurs à ne pas dépasser 2500 caractères tout compris lors de la rédaction d’un article.. Ceci pour éviter les pages au kilomètres ;o)

      Pas vraiment ou enfin si — tout est possible —, mais alors ce ne sera pas une « adaptation » de la présente contrib, qui se contente de traiter les données pour les afficher dans l’espace public.

      Cela dit, c’est une vraie usine à gaz que de vouloir empêcher les rédacteurs de poster au-delà d’un certain nombre de signes, qui risque en plus de se révéler assez embêtante à l’usage (parce que bon, 2500 signes, c’est court, hein). Est-ce qu’il ne vaut pas mieux en parler avec les rédacteurs via le forum interne ou via une annonce interne ?

      Ce qui serait peut-être utile, par contre, c’est de connaître la longueur des articles dans l’interface privée (et ça c’est assez facile à faire — il suffit de patcher ecrire/articles.php3).

      François

      Répondre à ce message

      • > Mesurer la longueur d’un article 21 août 2005 14:58, par Bernard

        En fait j’ai tenté ça, mais ça me bloque uniquement si je veux retoucher l’article, donc ce n’est pas bon.

        if(strlen($texte)>2500)
        {
        exit('trop de caractères');
        }
        echo substr($texte,0,2500); //ne prend que les 2500 premiers caractères

        En fait ta proposition ne peut s’appliquer dans mon cas.
        J’ai beaucoup d’auteurs (site de littérature) et ceux ci sont incorrigibles ! _ Pas moyen de les limiter ! Il me font des romans et cela je n’en veux pas. Je veux une page au format écran ou presque.
        Il me faut donc limiter les caractères lors de la saisie et si possible faire apparaitre un petit compteur du nombre de caractères restants.
        Pour ceux qui auraient envie de faire une contrib interessante ! Je ne suis pas assez bon en php..
        Mais je te remercie néanmoins pour ta réponse rapide.

        Répondre à ce message

        • > Mesurer la longueur d’un article 21 août 2005 16:19, par Bernard Blazin

          Ca y’est j’ai trouvé un système ! Dans articles.php3 (spip 1.8.1) après la ligne 1601 je rajoute mon code ainsi :

          //
          // "Demander la publication"
          //
          if(strlen($texte)>2500)
          {
          exit('Vous avez dépassé 2500 caractères! Veuillez modifier votre texte et le réduire avant de pouvoir le proposer');
          }
          echo substr($texte,0,2500); //ne prend que les 2500 premiers caractères

          Ainsi si le redacteur dépasse 2500 caractères il ne peut pas proposer son texte à la publication. Il lui faut retoucher son article et passer en dessous du nombre butoir pour pouvoir reproposer son texte.
          J’imagine que ma solution est un peu archaïque, mais je débute en php.
          j’aimerai toutefois trouver la solution pour afficher un compteur de caractères qui s’incremente lors de la saisie et qui bloque tout à 2500 caractères, ce serait plus élégant.

          Répondre à ce message

          • > Mesurer la longueur d’un article 21 août 2005 19:01, par François Schreuer

            J’imagine que ma solution est un peu archaïque

            Oui, de fait. Utiliser un "exit" en plein milieu du code, c’est quand même assez violent (j’imagine que le pied de page ne s’affiche pas, voire que l’aspect graphique de la page est un peu chamboulé ?).

            Sur le fond, je reste très moyennement convaincu de l’utilité d’imposer une limite aussi sévère aux rédacteurs (tu n’a pas peur que ça les fasse fuir ?), mais bon, ça c’est ton problème.

            François

            Répondre à ce message

            • > Mesurer la longueur d’un article 26 août 2005 20:07, par Bernard

              Non tout est impeccable.. L’exit arrive après un "if" donc la violence est modérée ;o)
              Par contre cela ne fonctionne pas sous 1.8.2. Si ça interesse quelqu’un j’ai la solution pour la 1.2

              Répondre à ce message

    Retour au début des forums



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net