L'actu sur le net

- Contributions de l’équipe OSSA
- Toolinux
- Da Linux French Page
- Daily Daemon News
- Libroscope
- Linagora.com
- LinuxFrench.Net
- LogicielLibre.Net
- PHP

Articles populaires

- [Manuel] Introduction à Cacti
- [Tutoriel] Ajout d’un script dans les commandes Nagios
- [Nagios] Surveillance des disques RAID sous Linux
- [OpenLDAP] Start/stop script
- Fichiers de configurations Samba
- JMX (Java Management eXtensions)
- [OpenLDAP] Script de démarrage et d’arrêt
- [Nagios] Supervision of OpenLDAP’s replication status

 © Linagora.com

Accueil > Contributions > SPIP > Gestion des mots-clés par arbre

Gestion des mots-clés par arbre

GZ - 1.6 Mo
SPIP 1.8b2 + contrib Mots-Clés LNG

Un code-source est à présent disponible - et selon une approche différente et plus dynamique que celle proposée dans Spip-Agora - pour la gestion d’une arborescence pour les mots-clés.

En effet la méthode de gestion peut devenir un « enfer » dans certains cas utilisateurs, en imaginant un webmestre de site qui lui a besoin d’une foultitude de mots-clés. Par exemple, la gestion d’une bibliothèque - avec en plus des raffinements - certains mots-clés finalements intégrés dans d’autres pour gérer ses bouquins). Pardon aussi à Spip-Agora, mais je n’ai pas trouvé la méthode proposée très commode d’utilisation, ne parvenant personnellement pas à ressentir ou même à voir clairement une manipulation facile et compréhensible en comparaison de l’admin SPIP originelle.

Ces choix furent globalement différents ; J. Pyrat m’a recommandé la gestion d’un arbre par représentation intervallaire et c’est vrai que c’est ce qu’il y a de plus commode à utiliser.

Représentation intervallaire des arborescence

E. Le Bescond de CleverAge m’a recommandé d’utiliser DB_NestedSet (une classe de PEAR) qui est un outil complet, mais trop lourd à intégrer pour ce simple usage ; après avoir parcouru le code, je pense que le framework complet de Nested, bien qu’un état de l’art dans une gestion d’arbre récursif, n’apporte rien pour une simple gestion d’arborescence de mots-clés. De plus la reintégration de code de Spip-Agora, basé sur Spip 1.7 qu’il à progressé n’apporte aussi rien àmha et autant d’utiliser Spip-Agora dans ce cas ;). Devant ce dilème, la philosophie de programmation de Spip m’a paru avoir ses propres méthodes de développement, j’ai fait le choix d’ajouter quelques briques nouvelles pour cette gestion.


Pour l’interface j’ai retenu la vision simple que tout le monde maîtrise, du moins connait, une vue en 2 blocs à la façon explorateur classique. De quoi toucher concrètement donc 95% des utilisateurs finaux. L’interface se veut donc simple et proposant un unique submit afin d’alleger tout le processus de demande serveur.

Outil de gestion d'arborescence pour les Mots-Clés

la liste des mots est composée ainsi :

Groupe 1  
mot 1
mot 2
[ ... ]
mot m

On sélectionne le parent dans l’arbre, on sélectionne un mot ou un groupe dans cette liste, on clicke sur "Transférer" et l’élément se voit ainsi ajouté dans l’arbre en tant que fils. Tous les éléments du groupe, dans le cas ou l’on clique sur un champ de groupe. Tous les intitulés des groupes représentés par une couleur distincte.

Cela se fait via l’utilisation d’une bibliothèque Javascript développée originelement par nimai, finalement agrementée de méthodes nombreuses afin d’assurer la gestion de cet arbre, pour gérer notamment l’indentation, les déplacements, suppression.. Et donc l’avantage de ne jamais recharger la page jusqu’à Validation de sa page.

L’installation ou non de l’arborescence dans les mots clés se fait via l’interface d’administration :

Gestion des mots-clés, Version 2

Après la première version d’interface de gestion des mots-clés, qui lui permettait de melanger les mots et les groupes entre eux, cette 2e version s’intègre à présent fonctionnelement dans SPip. L’intégration dans les boucles est réalisée, l’utilisation fonctionnelle a été revue.

Ainsi, chaque groupe de mots dispose de son propre arbre (ces arbres sont en fait des branches de l’arbre fondamental pour ne pas avoir eu à faire de fix et casser une structure centrale existante.

Une méthode de Wharfs [1] permet d’ouvrir l’interface et présente la gestion de l’arborescence sous chaque groupe de mots.

L’ajout d’une selectbox des groupes disponibles dans mots_tous.php avec retrait du while qui suivait afin de n’afficher que le groupe que l’on édite et "onselect" changer de groupe et de page, ce qui permet de pouvoir mieux gerer l’affichage de mot_tous en cas de grands nombres de mots.

Enfin des méthodes nouvelles ont étés ajoutées à l’interface, notamment à mots_edit.php afin de pouvoir lors de la création d’un nouveau mot, ajouter celui ci dans un bout de l’arborescence.

ajout des méthodes en tant que boucle

critères actuellement disponibles :

  • meme_parent : donne la liste des mots ayant meme parent
  • parent : donne le mot parent
  • ancetres : donne la liste des mots ancetres (ex : pere, grand pere, etc..)
  • enfants : donne la liste des mots enfants niveau +1
  • id_* (avec les memes token) : donne la liste correspondante mais par id.

Soit le jeu de test suivant :


PARENT:
<BOUCLE_2(MOTS_ARBRE){parent=2}>
#TITRE
</BOUCLE_2><br>

FILS:
<BOUCLE_3(MOTS_ARBRE){enfants=2}>
#TITRE
</BOUCLE_3><br>

ancetres:
<BOUCLE_4(MOTS_ARBRE){ancetres=2}>
#TITRE
</BOUCLE_4><br>

meme_parent:
<BOUCLE_5(MOTS_ARBRE){meme_parent=2}>
#TITRE
</BOUCLE_5><br>

Ce qui à été Réalisé :

  • La possibilité ou non d’utiliser et d’afficher l’arbre des mots-clés.
  • Une interface schématiquement à la ’Explorateur’, un arbre à gauche, une liste des éléments présents, structurés par groupes/mots-clés, et par ordre alphabétique à droite. Intégré sous chaque groupe de mot et sous forme de ’Wharf’.
  • Une representation en arbre de la liste des mots clés

  • On choisit dans l’arbre l’élément père sur lequel on souhaite ajouter un groupe de mots ou un seul. On peut choisir de remettre l’arbre à plat, et de le recréer sans nécessiter de rechargements permanents sur le serveur.
  • On peut construire ainsi des arborescences (multilingues bien sur) en copiant les mots-clés d’une liste à l’autre, puis en sauvant cet arbre ainsi construit.
  • La méthode de gestion d’arbre retenue est réalisée par représentation intervallaire des arborescences, avec un raffinement supplémentaire de conservation du niveau d’arbre atteint par l’élément défini sur un rang de la table afin de pouvoir générer une représentation complète de l’arbre en une seule requette SQL et sans récursivité.
  • La correction d’un bug dans mots_edit.php3 qui malgrés l’appel &new=oui, passait par une requette SQL selectionnant les champs de $mot_id, donc à zéro, rang sur lequel à été posé la définition de la Racine de l’arbre (cf ecrire/inc_base.php3)
  • Le développement d’une librairie Javascript qui est naturellement réutilisable à d’autres méthodes dans l’avenir.
  • Les tests unitaires sur chaques fonctions créées, la mise en oeuvre sous Geckos.
  • Ajout d’une selectbox à la méthode d’affichage "mots_tous" afin de n’afficher qu’une seule boite et de raffraichir de groupe en groupe en changeant la selectbox.

A améliorer

  • gérer l’unicode dans l’arbre. ( caractères 14, 18, 21) (un algo existe et son implantation est en cours).
  • améliorer l’intégration dans le compilateur de SPIP.

[1] un Wharf est une puce ouvrante/fermante, nom qui provient de NextStep/Afterstep. http://www.tldp.org/FAQ/AfterStep-FAQ-6.html

 Qui sommes nous ?

Dernière mise à jour : 28/03/2008
XHTML - SPIP 1.9.2