Un peu d’histoire
La première version du plugin avait pour objectif de déplacer le code PHP de la contribution initiale hors du squelette. Il avait fallu pour cela emporter un peu de HTML avec.
L’introduction d’une balise #FOREACH dans SPIP permettait de correctement séparer les calculs en php du rendu html en exploitant 2 modèles : 1 pour le nuage et 1 pour chaque mot-clé.
Ce critère apporte de nouvelles simplifications : Le nuage se réalise avec une seule boucle, dans un seul fichier, tous les calculs sont réalisés à l’aide de balises et de filtres SPIP. Il permet donc de complètement transformer le nuage de mots-clés en surchargeant uniquement le modèle.
Définition
Il faut comprendre la fréquence comme étant le nombre de fois que l’on associe l’objet éditorial courant à un objet éditorial d’un autre type.
Par exemple, dans le cas des mots-clés, cela pourrait être le nombre d’articles auxquels on à associé chacun de ceux qui seront affichés par une boucle MOTS qu’il fallait écrire précédemment :
<BOUCLE_m(MOTS)>
#PUCE le mot #TITRE est associé
<BOUCLE_a(ARTICLES){id_mot}></BOUCLE_a>
#TOTAL_BOUCLE fois à des articles.
<//B_a>
</BOUCLE_m>
et qui devient aujourd’hui :
<BOUCLE_m(MOTS){frequence}>
#PUCE le mot #TITRE est associé #FREQUENCE fois à des articles.
</BOUCLE_m>
On ajoute le critère {frequence}
à notre boucle MOTS et la balise #FREQUENCE affichera le compte. C’est ici l’équivalent du #TOTAL_BOUCLE de l’ancienne notation.
Choix des objets éditoriaux
Pour poursuivre avec l’exemple des mots-clés, on sait que ceux-ci peuvent être associés à des articles, des brèves, des rubriques, des sites, voire des messages de forum. On sait aussi qu’on peut étendre les possibilités de SPIP et les associer à d’autres objets éditoriaux, créés pour l’occasion. Ce critère prévoit ces possibilités. Il suffit pour cela de préciser de quels objets on souhaite calculer la fréquence. Exemple :
<BOUCLE_m(MOTS){frequence rubriques}>
#PUCE le mot #TITRE est associé #FREQUENCE fois à des rubriques.
</BOUCLE_m>
Attention : Pour les messages de forum, on utilisera « forum » comme paramètre et pour les sites, ce sera « syndic ».
Choix de la fréquence minimum
Poursuivons toujours. Je réalise un nuage avec un très grand nombre de mots-clés. Et ma charte graphique m’impose un espace limité sur la page d’accueil. Je ne pourrais pas afficher tous les mots-clés. Je choisis donc, de limiter l’affichage aux mots-clés les plus utilisés. Exemple :
<BOUCLE_m(MOTS){frequence breves>=50}>
#PUCE le mot #TITRE est associé au moins 50 fois à des brèves.
</BOUCLE_m>
On a un éventail assez large d’opérateurs de comparaison : =, != (différent), >, <, >= et <=
. Et on peut utiliser une balise SPIP pour spécifier le nombre à comparer, comme le montre l’exemple ci-dessous.
Choix d’une fréquence précise :
<BOUCLE_m(MOTS){frequence forum=#ENV{freq_forum,0}}>
#PUCE le mot #TITRE est associé précisément #ENV{freq_forum,0} fois à des messages de forum
</BOUCLE_m>
#ENV{freq_forum,0}
renvoie à une utilisation classique de la balise #ENV. Se référer à la documentation pour son utilisation. Il est par contre utile de savoir que pour cet usage précis, le code ,0
est nécessaire ici pour éviter un plantage SQL. Vous pouvez bien sur choisir une autre valeur par défaut.
Si vous personnalisez le modèle nuage ou que vous exploitez ce critère dans un autre contexte dans un squelette inclus, pensez à transmettre le paramètre au moment de l’inclusion :
[(#MODELE{nuage}{freq_forum})]
ou
<INLURE{fond=inclusion}{freq_forum=100}>
MAX_FREQUENCE
La balise #MAX_FREQUENCE permet pour une boucle donnée d’afficher la valeur maximale de la balise #FREQUENCE. Exemple :
<BOUCLE_m(MOTS){frequence}>
#PUCE #TITRE associé #FREQUENCE fois à des articles
[<p>(#FREQUENCE|=={#MAX_FREQUENCE}|?{
C'est le mot le plus utilisé !
})</p>]
</BOUCLE_m>
Quelques limitations
On ne peut pas cumuler les fréquences pour plusieurs types d’objets. On aurait apprécié que le critère puisse s’écrire {frequence articles>10,rubriques>10}
. Cela aurait permis de construire une requête avec des OR ou des UNION, ceci dit si la technique des requêtes SQL vous intéresse. Malheureusement, il n’y a pas de mécanisme dans SPIP permettant de produire de telles requêtes. Ce fait que cette option sera développé plus tard, quand SPIP permettra cette construction.
#FREQUENCE ne tient pas compte du statut des objets sur lesquels on fait le calcul. Il faudrait être en mesure d’ajouter cette information quand c’est nécessaire. Suggestions de code bienvenus sur la liste de discussions spip-zone.
L’extensibilité du critère à d’autres objets que les mots-clés n’est pas automatique. La programmation nécessaire étant assez complexe, les explications supplémentaires à produire feront l’objet d’une prochaine publication.