Mots arborescents

Ce plugin permet de gérer une arborescence de mots-clés. La configuration d’un groupe de mots dispose d’une nouvelle option pour autoriser pour ce groupe les arborescences de mots-clés. Dans ces groupes, des mots enfants peuvent être créés pour former donc des arborescences de mots.

Présentation vidéo

Vidéo disponible en différents formats sur Médias SPIP

Fonctionnement

Ce plugin étend le fonctionnement du plugin « Mots » (inclus dans SPIP) afin de permettre de gérer des arborescences de mots. Il ajoute pour cela certains champs dans les tables spip_groupes_mots et spip_mots. Il surcharge également quelques fichiers du plugin « Mots ».

Une nouvelle option est présente dans les groupes de mots, pour autoriser dans ce groupe des mots arborescents (la valeur est non par défaut) :

Option mots arborescents sur les groupes de mots

Notons tout de suite, que si cette option est active, revenir à « non » aplatira tous les mots arborescents présents dans ce groupe de mot ! Attention donc !

Option mots arborescents sur les groupes de mots : message de précaution

L’option active, la création d’un mot dans un tel groupe de mots ajoute un champ de saisie pour définir éventuellement un mot parent :

Sélecteur de mot parent

À chaque profondeur dans la hiérarchie, un losange est ajouté. Dans l’image suivante, le mot clé a un parent sélectionné :

Un mot parent est défini ici pour ce mot clé

Notons qu’il n’est pas possible de changer le groupe de mots d’un mot clé qui a le champ parent rempli : pour déplacer un mot clé dans un autre groupe de mots, il faudra mettre le champ « Mot parent » sur vide. Voilà ce qu’on obtient si on essaie ici de changer de groupe sans effacer le mot parent sélectionné :

Une erreur apparait si l’on tente changer un mot enfant de groupe, avec le mot parent défini

Enfin, déplacer un mot qui contient des mots enfants dans un autre groupe de mots est possible, mais si le groupe destination n’accepte pas de mots arborescents, l’arborescence sera aplatie. C’est ce qu’indique le message de prévention suivant :

Un avertissement est présent sur les mots clés ayant des enfants
Si un mot clé a des enfants, et s’il existe des groupes de mots clés qui n’autorisent pas les mots arborescents, un message d’avertissement s’affiche.

En dehors de ces quelques détails, les fonctionnements sont assez identiques concernant les mots clés ou l’ajout de mot clé aux objets éditoriaux.

Prérequis

Ce plugin nécessite SPIP 3.0 minimum.

Il est compatible avec
-  le plugin « Mots techniques »,
-  le plugin « Motus » (à vérifier).

Contre-indication

Incompatible actuellement avec le plugin « Groupes de mots clés arborescents (gma) » car ils surchargent tous les deux des fichiers du plugin « Mots » (ça va encore), et parfois les mêmes fichiers (là ça ne va plus) !

Technique

Table spip_groupes_mots :

L’option de mots arborescents sur la table des groupes de mots est définie avec le champ mots_arborescents qui peut valoir oui ou non. Toute autre valeur que oui, est cependant considérée comme non !

Table spip_mots :

Des champs sont ajoutés dans la table des mots clés :

  • id_parent : contient l’identifiant du mot clé parent, sinon 0. Ce champ sert au calcul des critères {racine}, {branche_mot}, et bien évidemment {id_parent}.
  • id_mot_racine : contient l’identifiant du mot racine (c’est l’équivalent de id_secteur sur les rubriques).
  • profondeur : contient la profondeur dans la hiérarchie de mots. Les mots racines ont une profondeur 0 (comme le champ profondeur sur les rubriques donc).

Boucles :

Le plugin permet d’utiliser une boucle HIERARCHIE_MOTS afin de dresser la liste de l’arborescence d’un mot donné.

Un squelette de test est disponible dans test/motsar.html du plugin, et exécutable par un webmestre avec http://le_beau_site/?page=test/motsar. Il liste les groupes de mots acceptant les mots arborescents, et toute l’arborescence.

Voici un simple exemple listant, pour un mot clé donné, l’arborescence de ses mots enfants :

<BOUCLE_mot(MOTS){id_mot}>
	<h2>#TITRE</h2>

	Enfants de ce mot :
	<B_enfants>
		<ul>
	<BOUCLE_enfants(MOTS){id_parent}{par num titre, titre}>
			<li>#TITRE
			<BOUCLE_recursif(BOUCLE_enfants) />
			</li>
	</BOUCLE_enfants>
		</ul>
	</B_enfants>

</BOUCLE_mot>

Discussion

17 discussions

  • Bonjour,

    Si je veux afficher les mots cles d’un groupe dans la page du groupe, je ne les vois pas tous, a cause d’un critere qui restreint les resultats aux mots qui ont un parent. De plus, l’affichage des profondeurs n’est pas du tout intuitif, car les puces qui indiquent la profondeur des mots donnent leur profondeur absolue dans le site, alors qu’il serait preferable de montrer leur profondeur relative a l’endroit ou l’on se trouve. Du coup si on affichait un groupe de mots, deux mots qui sont directement associes a ce groupe peuvent avoir ou non des puces, suivant le fait qu’ils aient un parent ou non, ce qui n’a rien a voir avec le groupe que l’on visualise. Du coup on ne peut plus savoir si un mot appartient au groupe que l’on visualise, ou bien s’il est un descendant d’un mot du groupe qu’on visualise.

    Desole si ce n’est pas clair. En tous cas j’ai modifie le fichier mots-admin-arborescents.html pour resoudre ces problemes :

    #SET{mots,#LISTE}
    #SET{profondeurs,#LISTE}
    
    <B_mots>
    [(#SET{entete,
    	<tr class='first_row'>
    		<th class='picto' scope='col'></th>
    		<th class='titre' scope='col' colspan='2'>[(#TRI{multi titre,<:info_titre:>,ajax})]</th>
    		<th class='utilisations' scope='col'></th>
    		<th class='action' scope='col'></th>
    		<th class='id' scope='col'>[(#TRI{id_mot,<:info_numero_abbreviation:>,ajax})]</th>
    	</tr>
    })]
     
    <BOUCLE_mots(MOTS){id_parent?}
    	{id_mot?}{id_groupe?}{id_mot_racine ?}{profondeur ?}
    	{id_rubrique?}{id_article?}{where?}{tri #ENV{par,num titre},#GET{defaut_tri},_mots}{par titre}>
        #SET{profondeur_base,#PROFONDEUR}
    	#SET{mots,#GET{mots}|push{#ID_MOT}}
        #SET{profondeurs,#GET{profondeurs}|array_merge{#ARRAY{mot#ID_MOT,0}}}
    	<BOUCLE_mots_enfants(MOTS){id_parent}{tri #ENV{par,num titre},#GET{defaut_tri}}{par titre}>
    		#SET{profondeurs,#GET{profondeurs}|array_merge{#ARRAY{mot#ID_MOT,#PROFONDEUR|moins{#GET{profondeur_base}}}}}
            #SET{mots,#GET{mots}|push{#ID_MOT}}
    		<BOUCLE_enfants(BOUCLE_mots_enfants)></BOUCLE_enfants>
    	</BOUCLE_mots_enfants>
    </BOUCLE_mots>
    
    <B_liste_mot>
    #ANCRE_PAGINATION
    <div class="liste-objets mots">
    <span class='image_loading'>&nbsp;</span>
    <table class='spip liste'>
    [<caption><strong class="caption">(#ENV*{titre,#GET{total}|singulier_ou_pluriel{info_1_mot_cle,info_nb_mots_cles}})</strong></caption>]
    	<thead>
    		#GET{entete}
    	</thead>
    	<tbody>
    	<BOUCLE_liste_mot(MOTS)
    		{id_mot IN #GET{mots}}
    		{pagination #ENV{nb,20}}>
    		#SET{url_voir,#AUTORISER{voir,mot,#ID_MOT}|?{#ID_MOT|generer_url_entite{mot}|parametre_url{redirect,#ENV{retour}},''}}
    		#SET{url_edit,#AUTORISER{modifier,mot,#ID_MOT}|?{#URL_ECRIRE{mot_edit,id_mot=#ID_MOT}|parametre_url{redirect,#ENV{retour}},''}}
    		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    			<td class='picto'>[(#VAL|puce_statut{mot,#ID_MOT,#ID_GROUPE})]</td>
    			<td class='titre principale'[(#LOGO_MOT|non) colspan='2']>
    				<div class="motsar">
    				[[(#GET{profondeurs}|table_valeur{[mot(#ID_MOT)]}|mostar_tabulation)](#GET{url_voir}|oui)]

    Répondre à ce message

  • Bonjour, on a testé la compatibilité avec SPIP 4.2, ça ne fonctionne malheureusement pas... Une mise a jour prévue sous peu ? Merci :)

    Répondre à ce message

  • 2

    Bonjour, ce plugin sera-t-il mis à jour pour la version 4 de SPIP ?

    • Bonjour,
      Je réponds tardivement car je viens de tester ce plugin sur un de mes sites en version 4 et ça semble fonctionner... Peut-être un oubli par les admins de spip.

      Pour l’utiliser, charger le plugin en local (depuis ton site, il ne sera pas présenté dans l’interface des plugins). Une fois chargé, ouvrir la page « paquet.xml » et faire la modification suivante :

      Remplacer la ligne : compatibilite=« [3.0.4 ;3.2.*] »
      Par la ligne : compatibilite=« [3.0.4 ;4.0.*] »

      Et un peu plus haut la ligne : version=« 1.1.12 »
      Par la ligne : version=« 1.2.0 »

      Les modification faites, tu peux le télécharger via ftp sur ton site, dans le dossier plugins. Il ne te reste plus qu’à l’activer.

      Enjoy !

    • Attention en faisant les modifs à ne pas modifier les guillemets !

    Répondre à ce message

  • Bonjour,
    Une demande un peu particulière...
    Que faudrait-il ajouter, en modifiant partout « mot » par « word » part exemple, pour créer un plugins fonctionnant indépendamment de mot ?
    En effet ce plugin ne crée pas les objets existant dans mot (table, saisie...).
    Cordialement.

    Répondre à ce message

  • 1

    Bonjour,

    Je viens de constater qu’en utilisant les crayons avec #EDITtitre, le id_parent est perdu à l’enregistrement et le mot clef revient à la racine du groupe.

    Répondre à ce message

  • Je viens signaler un petit bug.
    Lorsque l’on ajoute un champ extra dans la table « groupe_mots » et que l’on restreint ce nouveau champ « Par groupe », le plugin « Mots arborescents » ne répond plus.

    Répondre à ce message

  • Bonjour,

    Je constate un souci avec les crayons :
    -  j’ai un mot-clé avec un parent
    -  je modifie en partie publique le titre du mot-clé avec les crayons
    -  le mot-clé perd alors son parent

    Constaté avec un SPIP 3.1.7 et les crayons en dernière version.

    Répondre à ce message

  • 1

    Je seconde le dernier commentaire.

    Il serait vraiment benefique a l’ensemble de la communauté d’integrer les deux plugins ’mot arborescent’ ET ’groupe de mot cle arborescent’ au noyau SPIP.

    Il semble evident que les groupes de mot cle ET les mot cle puissent avoir des parents.

    Je suis prêt a contribuer financièrement au development ;) $$$

    Phil

    Répondre à ce message

  • 1

    Bonjour,
    Impossible de créer un mot clé enfant, j’obtiens l’erreur ci-dessous, alors que je ne déplace pas le mot clé (création) et que je sélectionne bien un groupe permettant les mots arborescents.

    « Le groupe de mot d’origine a été remis. Pour déplacer ce mot dans un autre groupe de mot, vous ne devez rien mettre dans le champ mot parent. »

    Et lorsque je créé un mot sans définir de mot parent à la création, impossible de le renseigner après, malgré que le mot parent sélectionné soit dans le bon groupe de groupe et qui permet les mots arborescents et que je ne change pas de groupe de mots...

    « Vous ne pouvez pas définir un mot parent qui n’appartient pas au groupe de mot sélectionné. »
    et
    Le groupe de mot d’origine a été remis. Pour déplacer ce mot dans un autre groupe de mot, vous ne devez rien mettre dans le champ mot parent.

    • Voici une piste pour l’erreur rencontrée : j’avais contrairement à la vidéo de démo, des cases à cocher au lieu d’un select pour choisir le mot parent. En forçant le select dans selecteur_mot_parent.html , cela fonctionne désormais :

      [(#SAISIEmots_recursif, id_parent,
      id_groupe,
      label=Mot parent,
      exclus=#GETexclus,
      forcer_select=oui
      )]

    Répondre à ce message

  • Il semble impossible de supprimer un mot cle depuis le backend si il est parent d’autres mots cles. Des lors, il n’y a aparemment aucune page du backend qui liste ces mots enfants, et je n’ai ete en mesure de supprimer le mot parent qu’apres avoir effectue des updates de ma base avec PHPMyAdmin, ce qui n’est pas tres pratique, surtout pour ceux qui n’ont pas ce genre de privileges.

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

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