Merci Jerry mais je ne vais pas utiliser un (gros) plugin juste pour ça (je ne me sers pas de l'éditeur je tape tout en html) surtout si c'est pour ensuite faire l'affichage a la mano.
Je pensais à une petite fonction php comme celle que j'avais trouvée pour mon WordPress.
function wcount($content){
return count(explode(" ",strip_tags( $content)));
}
(Edit : il faut supprimer les balises html et php avec strip_tags() pour que le décompte soit juste).
sizeof étant un alias de count, autant utiliser la fonction principale.
Tu peux placer cette fonction dans le header de ton thème avant le doctype entre les deux balises php du début et après le exit();
<?php if (!defined('PLX_ROOT')) exit();
function wcount($content){
return count(explode(" ", strip_tags( $content)));
} ?>
Tu pourras ensuite l'appeler où bon te semble en prenant soin de mettre un ob_start et un ob_get_clean (avant et après) si tu utilises la classe plxShow pour afficher le contenu.
Par exemple, dans le fichier article :
Bon ça fonctionne bien mais (y'a toujours un mais ) en fait je souhaite m'en servir comme indicateur de temps de lecture (pour de longs textes) et du coup j'aurais voulu pouvoir l'afficher avant l'article plutôt qu'à la fin... Idéalement sur la home, en dessous du titre avec les autres infos relatives à l'article.
Ce n'était qu'un exemple. Tu peux placer le résultat sur n'importe quel fichier vu que tu as inclus la fonction dans le header. Adapter bien sûr ce que tu affiches.
Par exemple, sur la home :
J'ai beau la ire et la relire, j'avoue que je ne comprends pas grand-chose à php...
Sinon si tu avais une idée pour l'utiliser également dans une page statique (je bloque sur cet aspect puisque forcément la boucle des articles n'est pas faite pour les pages statiques) ?
Typiquement sur cette page, pour compléter le tableau (et ensuite le rendre triable avec tablesorter)...
Je suppose que ce serait plus pratique d'avoir un compteur directement au niveau de l'admin, à l'enregistrement d'un article, de façon à avoir une variable genre art_count à dispatcher comme c'est le cas pour les tags, les catégories, par exemple dans la fonction lastArtList que j'utilise pour ce tableau...
edit : Par contre cette nouvelle fonction me trouve près d'un tiers de mots en plus !! 8)
L'autre semblait plus réaliste (à peu près le même nombre qu'avec openoffice, l'éditeur gedit ou la commande wc -w sous linux).
C'est parce que tu utilises de l'utf-8. Essaie ça plutôt (trouvée dans les commentaires de la doc, avec en plus les commentaires en français) :
/*
* Explications du masque pour preg_match_all.
*
* La fonction str_word_count standard considère qu'un mot est
* une séquence de caractères qui contient tous les caractères
* alphabétiques, et qui peut contenir, mais pas commencer
* par "'" et "-".
*
* Avec Unicode et UTF-8, une lettre peut être un caractères
* ASCII non accentué tel que "e" ou "E", mais aussi un "é" ou
* un "É", lequel peut se représenter sous la forme de deux
* caractères : d'abord le "E" non accentué, puis l'accent tout
* seul. Une lettre "E" ou "É" fait partie de la classe « L »,
* un accent de la classe « Mn ».
*
* Par ailleurs, "-" n'est plus le seul trait d'union possible.
* Plutôt que de les lister individuellement, j'ai choisi de
* tester les caractères de la classe « Pd ». Un inconvénient
* est que cela inclut aussi le tiret cadratin et d'autres,
* mais cet inconvénient existait déjà avec str_word_count et
* le tiret ascii, et en outre il ne concerne pas le français
* (contrairement à l'anglais, il y a toujours des espaces
* autour de ces tirets).
*
* Enfin, "'" n'est pas non plus la seule apostrophe possible.
* Mais contrairement aux tirets je teste juste l'apostrophe
* typographique U+2019 à part au lieu de tester la classe « Pf »
* car cette dernière contient trop de signes de ponctuation
* à exclure de la définition d'un mot.
*
* Un mot commence donc par une lettre \\p{L}, éventuellement
* accentuée (suivie par un nombre quelconque de \\p{Mn}), et
* ensuite on peut rencontrer un nombre quelconques d'autres
* lettres (\\p{L} et \\p{Mn}), de tirets (\\p{Pd}) ou d'apostrophes
* (' et \\x{2019}). Tout ceci, bien sûr, dans un masque compatible
* avec UTF-8 (/u à la fin).
*
* Pour les références, voir :
* http://fr2.php.net/manual/fr/regexp.reference.php #regexp.reference.unicode
* http://fr2.php.net/manual/fr/reference.pcre.pattern.modifiers.php
*/
define("WORD_COUNT_MASK", "/\\p{L}[\\p{L}\\p{Mn}\\p{Pd}'\\x{2019}]*/u");
function str_word_count_utf8($str)
{
return preg_match_all(WORD_COUNT_MASK, $str, $matches);
}
Pour la page statique, ce que tu voudrais, si j'ai su lire entre les lignes, serait d'avoir le nombre de mots à côté du titre de l'article que tu n'as pas encore affiché c'est ça ?
Si c'est ça, je ne pense pas qu'une simple fonction fasse l'affaire à elle seule. Il faudrait écrire un plugin je pense.
Non, c'est la fonction $plxShow->lastArtList qui possède beaucoup de belles choses sauf ce fameux compteur...
Avec le plugin Archives (que j'ai essayé) je n'avais ni le nombre de mots (forcément) ni le nombre de commentaires.
edit ta première fonction est celle qui se rapproche le plus d'un comptage manuel
C'est vrai aussi que j'abuse des balises persos (des span class="ceci ou cela"), ça joue peut-être, sans compter les nombreuses ponctuations tapées directement en code html (les esperluettes, les guillemets, les espaces insécables, les tirets demi-cadratins, etc...).
Réponses
Je pensais à une petite fonction php comme celle que j'avais trouvée pour mon WordPress.
Un truc du genre :
ou the_content serait remplacé par artContent puis un echo wcount dans le postinfos...
à plus,
Gzyg
sizeof étant un alias de count, autant utiliser la fonction principale.
Tu peux placer cette fonction dans le header de ton thème avant le doctype entre les deux balises php du début et après le exit();
Tu pourras ensuite l'appeler où bon te semble en prenant soin de mettre un ob_start et un ob_get_clean (avant et après) si tu utilises la classe plxShow pour afficher le contenu.
Par exemple, dans le fichier article :
Merci de t'être penché dessus, en tout cas.
à plus,
Gzyg
Bon ça fonctionne bien mais (y'a toujours un mais ) en fait je souhaite m'en servir comme indicateur de temps de lecture (pour de longs textes) et du coup j'aurais voulu pouvoir l'afficher avant l'article plutôt qu'à la fin... Idéalement sur la home, en dessous du titre avec les autres infos relatives à l'article.
à plus,
Gzyg
Par exemple, sur la home :
Tu as l'idée. A toi de l'adapter... ]:D
En fait je bloquais sur l'emplacement de cette partie
Encore merci,
à plus,
Gzyg
Sinon si tu avais une idée pour l'utiliser également dans une page statique (je bloque sur cet aspect puisque forcément la boucle des articles n'est pas faite pour les pages statiques) ?
Typiquement sur cette page, pour compléter le tableau (et ensuite le rendre triable avec tablesorter)...
Je suppose que ce serait plus pratique d'avoir un compteur directement au niveau de l'admin, à l'enregistrement d'un article, de façon à avoir une variable genre art_count à dispatcher comme c'est le cas pour les tags, les catégories, par exemple dans la fonction lastArtList que j'utilise pour ce tableau...
edit : Par contre cette nouvelle fonction me trouve près d'un tiers de mots en plus !! 8)
L'autre semblait plus réaliste (à peu près le même nombre qu'avec openoffice, l'éditeur gedit ou la commande wc -w sous linux).
à plus,
Gzyg
Si c'est ça, je ne pense pas qu'une simple fonction fasse l'affaire à elle seule. Il faudrait écrire un plugin je pense.
Pour la page statique oui, c'est ça, une colonne supplémentaire avec le nombre de mots par article mais effectivement ça n'a pas l'air simple...
À moins qu'une future version de PluXml embarque un compteur natif... ]:D
Ha m***** ! Nowel est déjà passé...
à plus,
Gzyg
Avec le plugin Archives (que j'ai essayé) je n'avais ni le nombre de mots (forcément) ni le nombre de commentaires.
edit ta première fonction est celle qui se rapproche le plus d'un comptage manuel
C'est vrai aussi que j'abuse des balises persos (des span class="ceci ou cela"), ça joue peut-être, sans compter les nombreuses ponctuations tapées directement en code html (les esperluettes, les guillemets, les espaces insécables, les tirets demi-cadratins, etc...).
à plus,
Gzyg
à plus,
Gzyg