SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 229 visiteurs en ce moment

Accueil > Navigation > Nuage de mots (tagcloud) > Nuage de mots-clés > tags cloud

tags cloud

sans boucle de comptage, avec le plugin CFG

17 février 2009 – par k3utchi – commentaires

10 votes

Attention, cette contribution est EN CHANTIER : elle n’est peut-être pas fonctionnelle.

-  0-0-

-  Ajouts dans le squelette mots
-  Affichage du nuage
-  Personnalisation du nuage
-  Paramétrage avec CFG
-  Exemples

Il y a quelques jours j’ai proposé une boucle qui me permet d’afficher un nuage - Nuage de mots-clés tout en SPIP.

Écrite uniquement en SPIP et avec une structure html très simple, elle présente l’avantage d’être très facilement intégrable à un squelette et à son habillage, et également d’être intégralement mise en cache entre les recalculs.

Mais comme on me l’a fait très judicieusement remarquer, c’est par contre au moment du recalcul qu’elle n’est pas vraiment économique puisqu’elle compte tous les éléments associés à chaque mot-clé, et pour un site avec beaucoup d’éléments et beaucoup de mots-clés, ça représente beaucoup de requêtes sql et beaucoup de calculs.

Il fallait donc trouver une solution pour répartir la charge de travail dans le temps, et si possible ré-utiliser les calculs faits à d’autres endroits dans le site.

C’est chose faite avec la version présentée ici. Le nuage à l’arrivée est absolument identique.

L’affichage du nuage a besoin pour fonctionner :

  • de connaître le score de chaque mot, calculé en fonction du nombre d’éléments qui lui sont associés (articles, rubriques et sites)
  • de connaître les scores minimums et maximums pour calculer le coefficient qui permettra de calculer la taille de chaque mot en fonction de son score.

Dans la première version présentée sur spip-contrib, le calcul du nuage reposait sur deux boucles :

  • une boucle de comptage qui calcule tous les scores et extrait les extrêmes
  • une boucle d’affichage qui génère la liste de mots et style chacun en fonction des valeurs calculées par la première boucle.

En fait, le calcul fait par la première boucle est déjà effectué pour l’affichage des pages associées aux mots-clés.

Il suffit donc de dire au squelette mot.html que, chaque fois qu’il recalcule la page d’un mot donné, au passage il mette de côté le nombre d’éléments associés à ce mot, tant qu’il y est vu qu’il les compte de toutes façons.

Pour pouvoir réutiliser ce score dans le squelette du nuage, complètement indépendamment du squelette mots, j’ai utilisé les fonctions du plugin CFG qui permettent de stocker des variables dans la base de données et de les récupérer ensuite.

La boucle du squelette nuage se contente donc ensuite de récupérer les scores, de calculer la taille et d’afficher les mots, mais elle ne compte rien. Le calcul des scores, quant à lui, est réparti entre les recalculs des différentes pages du squelette mots, le travail est donc bien réparti dans le temps puisque chacune de ces pages à une durée de vie propre dans le cache.

Il est bien sûr nécessaire d’avoir installé et activé le plugin CFG.

Lire aussi
-  Références du plugin CFG sur Spip-Contrib

Ajouts dans le squelette mots

Dans tout squelette mot bien constitué, on trouve normalement une boucle qui compte les éléments associés à un mot, et qui ressemblera plus ou moins à ça :

Cette boucle génère une liste non-ordonnée des articles associés au mot portant l’id_mot du contexte (en général celui de la boucle englobante mot_principal dont l’id est récupéré dans l’URL).

De la même manière on trouvera des boucles pour lister les rubriques et les sites associés à ce mot.

Il faut récupérer le total de chacune de ces boucles et le traiter pour le transformer en score.

Stockage de chaque total dans une variable

En se servant de la balise #SET{variable, valeur}, on stocke la balise #GRAND_TOTAL de chaque boucle (ou #TOTAL_BOUCLE si les résultats ne sont pas paginés).

Notez que la balise #SET doit se trouver hors de la boucle qu’elle compte (pour ne pas être itérée), mais dans la partie optionnelle après pour pouvoir récupérer la balise de comptage : soit entre </BOUCLE_xxx> et </B_xxx>.

Traitement des variables : calcul et stockage du score

Pour calculer et stocker le score de chaque mot, on utilise une fonction php (à ajouter au fichier mes_fonctions.php qu’il faut créer au besoin si aucune fonction n’est déjà définie)

On envoie le résultat à la fonction nuage_score() en ajoutant dans le squelette mot.html la balise suivante, après les boucles présentées plus haut :

Voici la fonction nuage_score()à ajouter à mes_fonctions.php :

Le score est calculé de la manière suivante :

  • 2 points sont donnés pour chaque rubrique associée à ce mot clé,
  • 1 point pour chaque article associé et
  • 1/4 de point pour chaque site associé.

Remarques
Ces valeurs sont complètement arbitraires et peuvent bien évidemment être modifiées.

Le calcul du score de chaque mot utilise les boucles du squelette mot.html correspondant, et n’est pas recalculé tant que ces pages ne sont pas mises à jour. Si par exemple la page d’un mot-clé n’est jamais affichée, le score de ce mot-clé n’est pas mis à jour non plus. Par contre, chaque fois qu’une page du squelette mot.html est recalculée, le nuage est mis à jour sur l’ensemble des pages où il est affiché, à condition de bien utiliser des inclusions indépendantes (sans le #).

Affichage du nuage

La structure de base du nuage est minimaliste, il s’agit d’une simple liste non ordonnée des mots-clés.

La taille de chaque mot clé est définie par un peu de css en ligne, soit pour chaque ligne :

On peut pour chaque mot récupérer le score qui est enregistré dans la base de données. Néanmoins, pour calculer la taille on ne peut appliquer un coefficient fixe. En effet, si on souhaite que le mot ayant le score le plus bas et celui ayant le score maximum aient toujours la même taille, quel que soit son score, il faudra tenir compte de ces valeurs pour calculer le coefficient.

Au début de la boucle, on récupère les valeurs min et max qu’on stocke dans des variables SPIP :

On récupère le score de chaque mot avec la balise #CONFIG{nuage/scores/#ID_MOT}

Pour calculer la taille de chaque mot, on filtre le score en transmettant les valeurs min et max à une nouvelle fonction.

Balise d’affichage de la taille :

La fonction nuage_taille() est également à ajouter au fichier mes_fonctions.php

Ce qui donne pour le fichier nuage.html

Personnalisation du nuage

CSS
On peut faire passer une classe en paramètres à l’appel de l’inclusion du squelette pour appliquer des attributs css aux balises de la boucle. Ou plus simplement en stylant à partir de l’élément parent. On peut donc afficher le même fichier inclus dans différents contextes avec différents rendus.

Paramètres du score
Les valeurs des éléments associés aux mots-clés sont définies dans la fonction nuage_score()

Ces valeurs numériques peuvent être changées, ou rendues paramétrables dans l’espace privé à partir d’un formulaire CFG.

Paramètres de la taille
Les valeurs de base de la taille d’affichage des mots-clés en fonction de leur score sont définies dans la fonction nuage_taille()

La base représente la taille du plus petit mot-clé, l’écart ce qui la sépare de la taille du plus grand. Ces valeurs numériques peuvent être changées, ou rendues paramétrables dans l’espace privé à partir d’un formulaire CFG.

Tri des mots-clés

Par défaut, aucun critère n’est précisé pour définir l’ordre d’affichage des mots clés ou en exclure certains, on peut bien sûr en ajouter.

  • <BOUCLE_lesmots (MOTS){par type, titre}> pour classer les mots par groupe et alphabétiquement dans un groupe.
  • <BOUCLE_lesmots (MOTS){type!==^_}> est très pratique : tous les mots provenant de groupes dont le nom commence par un underscore « _ » sont exclus. Si on utilise des mots-clés non sémantiques qu’on souhaite exclure du nuage, il suffit de les placer dans un groupe dont le nom commence par « _ », par exemple « _administration ».

Paramétrage avec CFG

Les paramètres de calcul du score, ainsi que ceux de l’affichage, peuvent être paramétrés dans le fichier mes_fonctions.php. Ils peuvent également être modifiés dans l’espace privé au moyen d’un formulaire CFG, qui stockera les valeurs choisies dans la base de données.

Mise en place du formulaire
Enregistrer dans le dossier fonds du squelette ou du dossier plugins/cfg le fichier cfg_nuage.html

On accède ensuite au formulaire par l’espace privé.

Récupération des valeurs du formulaire

La fonction nuage_score() peut désormais récupérer les valeurs saisies dans le formulaire plutôt que des valeurs fixes.

Les paramètres base et écart sont communs à tous les mots du nuage, on les récupèrera donc une seule fois avant le début de la boucle, et on les passe en paramètres à la boucle nuage_taille en même temps que le minimum et le maximum.

Le squelette nuage.html doit donc être modifié comme ceci :

Et la fonction nuage_taille() doit également être modifiée pour utiliser les variables qu’on lui fait passer :

Exemples

Ce nuage est utilisé sur les sites suivants :
-  Another teacher’s website
-  OpenEnglishWeb

P.-S.

Help wanted

Je ne comprends pas grand chose à ce qui se passe sous le capot de spip, et je n’ai aucune certitude quant au bien-fondé de certains choix que j’ai dû faire. Il doit y avoir très très moyen d’optimiser l’écriture des scores et des paramètres dans la base de données, et je suis preneur de toute indication et de tout conseil sur ce sujet. Merci !

Dernière modification de cette page le 4 octobre 2011

Retour en haut de la page

Vos commentaires

  • Le 23 février 2009 à 12:51, par k3utchi En réponse à : Nuage de mots clés

    hello

    je ne crois pas que cette contrib marche mieux ou moins bien que le plugin nuage. elle fait moins de choses en tout cas (pas de prise en compte de la popularité par exemple), mais elle est très économe en ressources.

    pour l’intégration au code il y a :

    -  des fonctions à ajouter au fichier mes_fonctions.php (nuage_score et nuage_taille)
    -  des balises à ajouter dans le squelette mots.html
    -  un fichier nuage.html à ajouter au dossier des squelettes de ton site
    -  une inclusion à ajouter dans les squelettes pour afficher le nuage
    -  la feuille de style à adapter pour intégrer le nuage à l’habillage
    -  éventuellement, un formulaire CFG à ajouter dans le dossier fonds

    Tout est à copier-coller depuis l’article, avec deux possibilités : avec formulaire CFG ou sans.

    Il est clair que ça n’est pas aussi simple que d’installer un plugin...

    Mais quoi qu’il en soit tu as raison, ça n’est pas super clair, je vais regrouper les snipets de code dans un zip et les proposer à télécharger.

    Répondre à ce message

  • Le 23 février 2009 à 11:08, par Regis92 En réponse à : Nuage de mots clés

    Bonjour k3utchi,

    Merci pour cette contrib, je trouve que ton nuage de mots-clés marche mieux que les deux autres contribs dans le même genre trouvées sur spip-contrib ;-)

    Par contre, étant débutant sur Spip, je ne m’y retrouve plus trop dans cette nouvelle page !

    Pourrais-tu STP préciser simplement quel est le code final à intégrer sur nos sites et à quel endroit ?

    MERCI !

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Adaptive Images

    15 novembre 2013 – 69 commentaires

    Un plugin pour permettre aux sites responsive d’adapter automatiquement les images de la page à l’écran de consultation. Adaptive Images, que l’on pourrait traduire par Images adaptatives, désigne la pratique qui vise à adapter les taille, (...)

  • Social tags

    8 septembre 2008 – 428 commentaires

    Le plugin Social Tags permet d’ajouter des icônes de partage de liens vers les sites tels que Digg, Facebook, Delicious.... Une fois le plugin installé et activé (voir doc.), le choix des sites se fait via un menu de configuration. Insertion (...)

  • Module de Paiement Stripe

    17 octobre – commentaires

    Stripe est un prestataire de paiement externe https://stripe.com/fr qui propose une API moderne et une interface de paiement extrêmement conviviale et efficace. Ce module permet les paiements à l’acte et les paiement récurrents. Configuration (...)

Ça spipe par là