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
Discussions par date d’activité
29 discussions
Bonjour,
Est-ce qu’il existe #URL_EXTERNE pour utiliser dans les squelettes ?
Merci !
Euh, qui ferait quoi ? Tu vois un champ qui correspond dans l’édition du contenu ? :p
Ah, ça doit être mon Spip alors ! - :)
Je vois dans l’interface de création d’une définition URL externe (je joins une copie d’écran)...
Ah oui ok c’est Kent1 qui a rajouté ça ya 6 mois :
http://zone.spip.org/trac/spip-zone/changeset/92030
Bah si ya un champ en SQL, ça s’appelle avec la balise du même nom en majuscule, comme pour n’importe quel type de contenu.
C’est bon, merci, ça marche.
Désolé pour le dérangement !
Répondre à ce message
Bonjour,
Je viens d’effectuer la mise à jour du plugin SAISIES de 2.5.18 vers 2.5.20 et je rencontre un bug avec la page définition.
Quand je souhaite modifier une définition (« exec=definition_edit »), j’obtiens des « 1 » dans tous les champs. Et si j’enregistre, c’est bien-sûr la cata. Tous mes champs sont effacés et remplacés par des « 1 ».
Par contre, pour l’enregistrement d’une nouvelle définition, tout fonctionne normalement.
(Avec Dictionnaires V1.1.2).
Amicalement.
C’est corrigé en mettant 2.5.21
Merci, Rastapopoulos, pour la réactivité. C’est OK.
Répondre à ce message
Bonjour,
Ce plugin s’avère très utile mais je n’ai pas trouvé comment l’empêcher de couper les libellés (à 75 caractères je crois).
Il se trouve que je dois faire face à de très longs acronymes :)
Merci de votre aide.
Salut, si je ne me trompe pas, c’est par ici que ça se passe :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/dictionnaires/trunk/inc/dictionnaires.php?rev=91469#L178
Malheureusement, la valeur de coupe est définie à 80 caractères en dur pour l’instant...
@b_b elle est en dur mais la fonction est parfaitement surchargeable par contre.
Il suffit d’avoir une fonction dictionnaires_remplacer_defaut() dans son mes_fonctions.php (ou peut-être mes_options.php si ça ne marche pas), avec la mise en forme qu’on veut dedans.
Répondre à ce message
Bonjour,
J’ai constaté une anomalie sur un de nos sites en utilisant la version 1.0.4, lorsque l’on créé une définition dont le titre possède un accent ça plante le site en front office et affiche cette erreur :
Je suis en SPIP 3.0.19 et j’utilise une surcharge des filtres dictionnaires_remplacer_defaut et dictionnaires_remplacer_abbr de cette manière :
Ce problème je ne le constate pas sur un SPIP de base, j’en déduis qu’il s’agit d’une particularité de notre site.
Si vous avez une idée... merci d’avance :)
Freed
J’ai ajouté une option (u) aux regex pour mieux prendre en compte les accents (suite à une discussion sur ce forum) :
http://zone.spip.org/trac/spip-zone/changeset/88279
La doc dit :
Bonjour RastaPopoulos,
Merci pour cet update du plugin, cependant en le testant j’obtiens la même erreur :(
Non mais le plugin n’a pas bougé, c’est une modif qui date d’il y a 4 mois et qui justement pourrait être en rapport avec ton erreur.
Le problème que tu décris ressemble pas mal à celui corrigé ici :
http://zone.spip.org/trac/spip-zone/changeset/91004/
Tu as testé avec la version 1.0.5 ?
Oui je suis passé en 1.0.5 ce matin pensant qu’il s’agissait d’une correction du problème
Le lien que tu viens de me donner semble bien correspondre à un des contats de mon problème (ces symptômes se produisaient en production seulement)
Autre info :
J’obtiens ces erreurs de preg_replace_callback en environnement de développement et recette
En production j’avais pas d’erreurs affichées (peut-etre que l’environnement n’affiche pas les erreurs PHP) mais tous les textes disparaissaient.
En local (XXAMP) je n’ai pas d’erreur, ni de disparition de texte, en revanche lorsque j’ai un terme avec un accent il semble ne pas être traité
Re-bonjour,
Finalement en ayant livré la nouvelle version du plugin en production (1.0.5) le problème de textes vides était toujours présent, en réalité les erreurs PHP n’étant pas affichées en prod, nous ne voyions pas le problème qui finalement était le même (preg_replace_callback)
Nous avons choisi de désactiver le filtre |definitions sur les textes en attendant de trouver une solution
PS : notre serveur de production est en PHP 5.4.40 , je ne sais pas si ça peut jouer sur quelque chose.
Merci
Répondre à ce message
Bonjour,
Je rencontre un souci avec ce plugin lorsque je tente d’afficher une liste d’articles avec pagination en AJAX et qu’un terme provenant du dictionnaire se trouve dans la balise #INTRODUCTION (c’est à dire en début de texte quoi)
J’obtiens un « Aborted » sur l’url appelée.
Existe-t-il un filtre qui désactive le dictionnaire volontairement sur certains textes ?
Merci d’avance.
Freed
La balise #INTRODUCTION passe par propre(), donc par la détection auto des définitions.
Mais je ne saurais pas dire pourquoi en ajax ça ferait tout planter, ya pas de raison immédiate qui me vient à l’esprit. Peut-être qu’il faudrait détecter qu’on est dans un hit ajax (il me semble qu’il y a une globale ou un truc pour savoir ça) et ne pas lancer la machinerie dans ce cas. Mais bon yorait pas vraiment de raison de faire ça, un même contenu aurait alors des fois des définitions, des fois pas, suivant s’il est chargé en ajax ou pas, ce n’est pas très cohérent…
Faudrait surtout comprendre pourquoi ça plante. :(
J’avais corrigé le problème en utilisant define(’DICTIONNAIRES_DETECTION_MANUELLE’, true) ; et en appliquant le filtre |definitions uniquement sur les textes complets.
C’est un peu contourner le problème mais pas besoin d’avoir des définitions dans des listes selon moi.
Répondre à ce message
Bonjour,
Si j’ajoute le mot Marche dans un dictionnaire, le plugin fait un lien par exemple sur une partie du mot dé[marche]. Si j’enlève le é, ce mot n’est pas impacté...
Voici un exemple du problème sur cette article (dans le paragraphe la cane de Montfort au 19e siècle) :
- > http://broceliande.brecilien.org/La-cane-de-Montfort-dans-les-traditions-populaires
Quelqu’un rencontre-t’il ce phénomène ?
Merci de plugin génial !
Oui c’est très bizarre, comme si la lettre accentuée était reconnu comme étant un caractère « hors-mot ».
Le masque de recherche est généré ici :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/dictionnaires/trunk/inc/dictionnaires.php#L113
Chaque masque DOIT débuter par
[^\w@\.]
càd PAS (^
) un caractère de mot (\w
) ni un arobase ni un point. La lettre accentuée est donc reconnue comme compatible avec ce truc, ce qui n’est pas normal (un problème de charset ?).Si tu es très fort en expression rationnelle ou si tu connais quelqu’un qui est très fort, je veux bien un indice parce que pour l’instant moi je ne vois pas. :(
j’ai essayé chez moi avec diverses lettres accentuées, je n’arrive pas à reproduire.
SPIP 3.1.0-alpha — utf-8
bibliothèque MySQL (5.0.51a) - serveur MySQL (5.5.41)
interclassement utf8_general_ci
Si Claude n’arrive pas à reproduire, ça irait donc peut-être bien dans le sens d’un problème d’encodage, de charset chez Philippe.
Un test rapide sur https://regex101.com/ me montre que l’expression capture bien le caractère accentué de démarche. En ajoutant la modifieur u après la regex cela semble mieux.
Philippe tu peux tester si en ajoutant « u » après le « s » à la fin du masque ça marche chez toi ? À l’endroit que j’ai pointé plus haut, la fin est ligne 122 :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/dictionnaires/trunk/inc/dictionnaires.php#L122
OK ça marche !
Merci pour votre réactivité !
Pour info, je suis sur SPIP 3.0.17 utf8, mySQL 5.5.41 interclassement utf8_general_ci.
A noter que j’utilise le plugin Full Text.
Voilà j’ai commité sur les deux versions du plugin Philippe :
http://zone.spip.org/trac/spip-zone/changeset/88279
Répondre à ce message
A noter que le plugin permet de surcharger la sortie HTML
Même s’il s’agit d’une mauvaise pratique en terme d’accessibilité de placer du contenu dans l’attribut title.
Voici un exemple pour afficher la définition dans le titre d’un lien (pour réaliser une info-bulle type « tooltip »),
on pourra ajouter dans mes_fonctions.php
Premièrement, il est possible de remplacer uniquement un seul type de définition, par exemple que les « abbr » :
Et deuxièmement, attention à ce que dit le commentaire dans le code, et qu’il faudrait que je rajoute dans la documentation :
Au niveau accessibilité, il ne faut pas que l’information se trouve uniquement dans le title.
Tu as raison ^^.
Pour des info-bulles, on m’a signalé le plugin bigfoot plus respectueux en accessibilité.
Répondre à ce message
Je m’en suis sorti par une boucle recherche.
Cela nécessite le plugin « Recherche Fulltext ».
1. J’ai ajouté un fichier nommé « inc_recherche » dans mon squelettecontenant le code suivant :
2. J’ai ajouté ces 2 lignes dans ma page :
Je ne doute pas que tout cela soit perfectible, mais c’est une solution rapide.
En parcourant le forum du plugin Fulltext, je me suis d’ailleurs aperçu qu’un autre développeur faisait le lien entre ces 2 plugins
Répondre à ce message
Bonjour et merci pour ce plugin,
Y a t-il un moyen de boucler les articles où sont présents les termes d’un dictionnaire ?
Cordialement,
Salut, ça doit pouvoir se faire en bouclant sur les champs titre et termes des définitions associées à un dictionnaire. Puis ensuite, en bouclant sur les articles de ton site en cherchant les termes dans le texte des article.
Ça me parait très (TRES) couteux. Surtout ce qui est prévu (todolist) au départ, c’est de scanner un contenu dès qu’il est édité (un article par exemple) et d’ajouter le lien à la définition (il y a déjà une table definitions_liens de prévue dans la base). Bref : comme pour les documents quoi. Notamment pour l’afficher ensuite dans l’admin en-dessous de chaque définition.
Oui c’est coûteux, je proposais cette solution car je ne savais pas que c’est dans la todo :p Maintenant on le sait ^^
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |