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
textebrutsupprime 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,
strlenpeut-ê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
textebrutavant 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.



Vos commentaires
# Le 2 février 2006 à 14:50, par jojo
En réponse à : Mesurer la longueur d’un article
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
# Le 18 août 2005 à 23:14, par Bernard
En réponse à : > Mesurer la longueur d’un article
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
# Le 19 août 2005 à 00:43, par François
En réponse à : > Mesurer la longueur d’un article
Salut,
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
# Le 21 août 2005 à 14:58, par Bernard Blazin
En réponse à : > Mesurer la longueur d’un article
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.
# Le 21 août 2005 à 16:19, par Bernard Blazin
En réponse à : > Mesurer la longueur d’un article
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.
# Le 21 août 2005 à 19:01, par François Schreuer
En réponse à : > Mesurer la longueur d’un article
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
# Le 26 août 2005 à 20:07, par Bernard Blazin
En réponse à : > Mesurer la longueur d’un article
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