Dictionnaires

Présentation

Le plugin Dictionnaires sert à définir des choses, regroupées dans des dictionnaires. Une définition peut avoir plusieurs statuts comme les articles, tandis qu’un dictionnaire peut juste être actif ou inactif. Lorsqu’un dictionnaire est activé, cela signifie que ses définitions seront cherchés dans tous les textes du site.

Par défaut, deux types de définitions sont disponibles : normale ou abréviation (sigle, acronyme ou autre).

Chaque définition peut lister des termes supplémentaires qui seront reconnus aussi (le pluriel par exemple). Pour les abréviations, le système ajoute automatiquement une version avec p.o.i.n.t.s, il n’est dont pas nécessaire de les ajouter vous-mêmes.

Un plugin proche existe : le plugin Glossaire mais SPIP a tendance à mouliner lorsque la liste des définitions (un groupe de mots-clés) est trop importante. Moins proche et entièrement manuel, le raccourci Wikipedia de SPIP : [?Wikipedia].

L’avantage du plugin Dictionnaires est qu’il demande moins de ressources et qu’il présente deux nouveaux objets qui suivent l’analogie Rubriques/Articles et peuvent chacun recevoir des logos et des documents.

Fonctionnement

Lorsqu’un dictionnaire est actif, toutes ses définitions publiées sont recherchées dans les textes qui passent par la fonction propre(). Les termes trouvés sont alors remplacés par une fonction personnalisable (cette fonction est aussi personnalisable suivant le type de définition).

La fonction par défaut ajoute un lien "Définition" en note <sup> après le mot, lien qui pointe vers la page de la définition (pour info, le plugin fournit des squelettes compatibles avec Zpip pour afficher une définition et un dictionnaire).

Ce comportement n’est fait que pour les premières occurrences de chaque texte. Ceci est personnalisable depuis la page de configuration du plugin.

Une option "sensible à la casse" est disponible pour chaque définition. Ceci indique au détecteur de prendre en compte uniquement le terme exact ("ce" ne sera pas reconnu pour "CE").

Pour chaque dictionnaire, vous pouvez définir le type par défaut des nouvelles définitions qui y seront crées.

Lors de l’installation, le plugin propose une fonction d’importation des acronymes définis à l’aide du plugin Forms&Tables. Les éléments sont importés en tant qu’abréviations (modifiable ensuite).

Installation du plugin

L’installation se fait par la méthode habituelle, Dictionnaires ne demande que le plugin Saisies comme plugin complémentaire pour fonctionner.

Configuration du plugin

Une fois l’installation faite, le menu "Configuration" de SPIP affiche un item "Dictionnaires".

Par ce lien, vous arrivez à la page "Configurer les dictionnaires" qui propose deux cases déjà cochées :

  • Remplacer uniquement la première occurrence d’une définition
  • Remplacer uniquement la première occurrence d’une abréviation

Cela vous permet d’afficher les définitions sur tous les termes d’un texte ou seulement la premier fois qu’ils sont rencontrés.

La constante define('DICTIONNAIRES_DETECTION_MANUELLE', true); permet de spécifier que l’auteur des squelettes se charge d’appliquer le filtre |definitions sur les balises souhaitées, et non sur tout les textes qui passent par la fonction propre().

Saisie des dictionnaires

Il faut d’abord créer un ou des dictionnaires et, pour chacun, créer des définitions. Le menu « Édition » de SPIP contient aussi une entrée « Dictionnaires ». Il vous suffit de cliquer sur « Ajouter un nouveau dictionnaire ».

Liste des champs pour l’objet Dictionnaire :

  • Titre (champ obligatoire)
  • Descriptif (champ)
  • Abréviation par défaut (case à cocher)

Cet objet a deux statuts possibles : Inactif (par défaut)/Actif. Un dictionnaire actif aura ses termes détectés dans les contenus du site.

Accessoirement, le plugin permet d’utiliser un raccourci supplémentaire : [mon texte->dictionnaireXXX].

Saisie des définitions

Une fois un dictionnaire créé, sa page de "vue" propose d’ajouter des définitions.

Cliquer sur « Ajouter une nouvelle définition » donne une liste de champs pour l’objet Définition :

  • Titre (champ obligatoire)
  • Dictionnaire (menu déroulant, obligatoire)
  • Texte (champ)
  • Termes (champ listant "Des termes supplémentaires qui permettront de détecter la définition, séparés par des virgules.") [1]
  • Abréviation (case à cocher, « Est-ce un sigle, un acronyme ou autre abréviation ? »)
  • Sensibilité à la casse (case à cocher : « La détection de ce terme sera sensible aux minuscules et majuscules. »)

Cet objet a trois statuts possibles : « proposé à l’évaluation » (par défaut)/« publié en ligne »/« à la poubelle ».

La date de création d’une définition ne peut être modifiée que sous le statut « publié en ligne ».

Accessoirement, le plugin permet — ici aussi — d’utiliser un raccourci supplémentaire : [mon texte->definitionXXX].

Utilisation dans vos squelettes

Comme cité plus haut, le plugin fournit des squelettes compatibles avec Zpip pour afficher une définition et un dictionnaire. Vous pouvez consulter ces squelettes dans le répertoire contenu du plugin.

Le plugin met aussi aussi à disposition deux modèles utilisables depuis vos squelettes ou le texte de vos pages :
-  <dictionnaires> affiche la liste des dictionnaires
-  <dictionnaire> affiche la liste des définitions d’un dictionnaire.

Les balises de l’objet « dictionnaire » sont :

  • #ID_DICTIONNAIRE
  • #URL_DICTIONNAIRE
  • #LOGO_DICTIONNAIRE
  • #TITRE
  • #DESCRIPTIF

Les balise de l’objet « definition » sont :

  • #ID_DEFINITION
  • #URL_DEFINITION
  • #LOGO_DEFINITION
  • #TITRE
  • #TEXTE
  • #TERMES
  • #INTRODUCTION

Notes

[1Par exemple, pour la définition « Dioïque », vous pouvez aussi lister les termes : dioïques, dioïcie ; pour la définition « Tomenteux », les termes, tomenteuse, tomenteuses…

Dernière modification de cette page le 13 février 2019

Discussion

20 discussions

  • Bonjour,

    Dans le cadre d’une galaxie de site, j’aimerais pouvoir :

    • soit avoir un site central qui contiendrait toutes les définitions, utilisables ensuite sur n’importe quel des autres sites
    • soit avoir les définitions sur chacun des des sites, mais utilisées sur tous les sites à fois

    Une idée de comment faire ?

    PS : sachant que j’ai un plan B : faire un plugin qui ait en dur les définitions dans son script d’upgrade et qui les crée dans tout les sites

    Répondre à ce message

  • 4

    Re-Bonjour,

    Autre chose : j’aurais voulu éventuellement organiser 1 dictionnaire par langue.
    Comment peut-on ensuite, pour un même mot, n’afficher que la langue correspondante (les dictionnaires pouvant être nommé « fr », « en » pour faciliter) ?

    • Bé tu peux pas, ce n’est pas prévu. Ya bien un champ lang pour les définitions mais ya pas pour les dictionnaires, ni de système d’héritage par défaut (comme les rubriques de telle langue dont les articles ont la même langue par défaut à la création), ni encore moins de gestion de plusieurs définitions des mêmes termes, ça fait forcément conflit, ya pas de système qui choisirait la bonne définition suivant le contexte.

    • Bonjour RastaPopoulos,
      Merci pour cette réponse rapide. Aurais-tu une idée de comment procéder pour mettre en place ce dictionnaire sur un site multilingue ?
      Et, effectivement il y a un champ Lang pour les définitions, mais as-tu une idée de comment on pourrait s’en servir ?

    • Non là tout de suite je ne vois pas. Il faudrait une évolution du plugin déjà pour éditer ce champ (SPIP a un formulaire générique pour ça je crois), mais ensuite surtout il faudrait que lors du scannage des textes, on ait le contexte du moment (dont la langue) pour pouvoir alors sélectionner en priorité telle ou telle définition. Sauf que par défaut, quand on ne contrôle pas soi-même les appels, c’est appliqué automatique dans le pipeline « post_propre » pour tous les textes, et là on n’a absolument pas le contexte courant.

    • Bonjour RastaPopoulos,
      C’est ballot. Et je ne suis pas assez technos pour mettre les mains dans le cambouis. Dommage, parce que cette idée de dictionnaires est absolument brillante ! Merci quand même pour ta réponse, en espérant que quelqu’un de techniquement talentueux s’y mette un de ces 4 ;-)

    Répondre à ce message

  • 1

    Bonjour,
    Merci pour ce plugin fantastique !
    Petit bug en utilisant le plugin Multilang : les titres sont correctement traduits mais les URLs ne sont pas traduites, et on lit donc les balises au lieu du lien.

    • Tu veux dire que Multilang permet de traduire le champ « url_externe » ? Ça ne devrait pas normalement, généralement ça s’applique que sur les textes, titre, descriptif, etc.

      Soit il ne faut pas que multilang s’applique sur ce champ (ce qui est le cas dans les autres contenus il me semble, qu’il ne s’applique pas sur les champs d’URL, sur les articles ou autre). Soit il faut que la balise #URL_EXTERNE ait le filtre « typo » appliqué par défaut comme pour les titres afin que ça gère les multi.

    Répondre à ce message

  • 3

    Bonjour,

    On ne peut pas mettre à la poubelle une définition contrairement à ce qu’indique le libellé.

    Dans le fichier « dictionnaires_tables.php », à la ligne 159, le statut_textes_instituer pour « à la poubelle » est « refuse » au lieu de « poubelle ».

    Est-ce volontaire de la part des auteurs ?

    Merci !

    • Je constate la même chose.
      Comme ça, je dirais que c’est une erreur, les définitions mise à la poubelle n’étant alors jamais traitées par le cron « optimiser ».

      Je peux m’occuper de corriger. Go ?

    • Pour moi c’est Go !

      Merci Peetdu !

    • La version 1.2.0 corrige la chaine de langue pour le statut « Refusé » et introduit un nouveau statut « Poubelle ».

      Note pour ceux qui pensaient avoir avaient mis à la poubelle leur définitions :
      Ces définitions ont maintenant clairement le statut « Refusé ». Si vous voulez les supprimer, il vous faut passer leur statut à « à la poubelle »

      Les définitions misent à la poubelle seront supprimées de la base de données au bout d’environ 24h (note : c’est vrai pour n’importe quel objet mis à la poubelle, sauf Auteurs je crois).

    Répondre à ce message

  • Bonjour,

    Je crois que j’ai trouvé un bug potentiel dans instituer_definition
    appelé juste après insert_definition(), le id_dictionnaire de l’id_definition qui vient d’être créé vaut 0, et on va vouloir mettre à jour avec un vrai id de dico, mais l’autorisation porte sur l’id qui vaut 0 et non sur l’id final
    cf le commit que je viens de faire avec 2h perdue à identifier que je devais passer 0 et pas l’id_dictionnaire que j’avais
    spip-zone : https://zone.spip.net/trac/spip-zone/changeset/111124 (1 files) : Migrer les sigles du précédent plugin sans avoir besoin de la présence de F&T. + des autoriser_exception pour que ça marche avec SPIP-cli.

    Est-ce que je modifie instituer_definition pour utiliser le id_dictionnaire que l’on veut utiliser si le id_dictionnaire enregistré est 0 ?

    Répondre à ce message

  • 3

    Bonjour,
    Dans un site en construction sous spip 3.2 avec le plugin-squelette soyez créateur, j’ai voulu faire un dictionnaire. J’ai pour l’instant entré 4 ou 5 définitions. Elles apparaissent bien dans le pied de la page d’accueil. Mais j’ai fait un article test dans lequel se retrouvent ces mots (et d’autres que je définirai quand le problème sera résolu !). Seulement 2 de ces mots sont cliquables vers leur définition. Je ne sais pas ce que j’ai fait pour ceux-là, et pas pour les autres, (ou inversement !)
    Par ailleurs, comment mettre automatiquement ces mots en couleur par exemple, ou en caractères gras, parce que je trouve que le «  ? » n’est pas très visible.
    Merci de votre aide.
    http://www.loeilepleumien.fr ; http://www.loeilepleumien.fr/?Essai-pour-une-definition

    • Bé je ne sais ce que tu as dans ta config, donc je ne sais pas pourquoi certains sont détectés et d’autres pas… Après ya une différence entre abréviation pas définition classique, pas forcément le même rendu. La génération de comment sont transformés les mots détectés est dans une fonction PHP surchargeable par type de définition (à décrire dans cette doc ici, c’est un manque encore, désolé).

    • Merci pour cette réponse. S’il faut que j’aille regarder dans la partie programmation, alors là, c’est foutu... :-( Dommage ! Je trouvais l’idée du dictionnaire bien sympa, et elle correspondait bien à ce dont j’avais besoin) ! Je vais rechercher encore. Il y a peut-être quelque chose que je n’ai pas fait comme il fallait...
      Cordialement

    • Il se pourrait que https://zone.spip.net/trac/spip-zone/changeset/110957 réponde à la question des éléments non détectés...

    Répondre à ce message

  • 2

    Bonjour,

    SPIP 3.21, PHP 7.0, Windows (WAMP).
    Seuls plugins installés : Dictonaire + Saisie.

    Constat : le dictionnaire ne trouve que les mots pour lesquels on a coché « Sensible à la casse ».

    Répondre à ce message

  • Bonjour,

    Bravo et merci pour ce plugin que j’étudie pour une très certaine intégration.

    Je voulais modifier le code HTML généré par le filtre ... et je découvre donc, avec joie, les fonctions et la possibilité de surcharge commentée :

    /*
     * Fonction de remplacement par défaut pour les abbréviations trouvées dans les textes
     * Ceci est un EXEMPLE montrant qu'on peut mettre un truc différent pour un type de définition précis
     * Mais ce code est une MAUVAISE PRATIQUE en accessibilité
     * (car seuls les gens avec des yeux valides et un pointeur de souris ont accès à l'information)
     */
    function dictionnaires_remplacer_abbr_dist($mot, $definition){
            return '<abbr title="'.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">'.$mot.'</abbr>';
    }

    C’est le commentaire qui me gêne, il me semble, au contraire, que l’emploi de la balise <abbr> est plus bénéfique en terme d’accessibilité.

    Voir Guide AccessiWeb

    Répondre à ce message

  • 1

    Bonjour
    J’ai un bug d’affichage depuis le maj en spip 312
    La réactivation de dictionnaires 114 affiche en boucle le message d’erreur suivant :
    Warning : preg_replace_callback() : Compilation failed : invalid UTF-8 string at offset 23 in /www/docs/plugins/dictionnaires/dictionnaires_fonctions.php on line 50

    J’ai de plus tout le site qui est passé en caractère iso latin avec des losanges sur tous les caractères accentués.
    Je ne sais pas si cela a un rapport ?

    Merci pour votre retour

    Répondre à ce message

  • Bonjour,

    Plugin très utile, bravo !
    Je suis en spip 3.1 et je souhaiterai faire apparaître en bas de l’article (façon notes) le récaptitulatif des définitions utilisées plus haut dans ce même article.
    Je sèche sur la boucle à utiliser ?
    Merci pour votre aide

    Répondre à ce message

Ajouter un commentaire

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom