Système de "tags" avec eZ publish

J'ai reçu cet après midi un mail d'une personne me demandant comment fonctionne le système de tags sur mon blog et plus généralement comment mettre en place un tel système avec eZ publish. Comme elle me le suggère, c'est effectivement un sujet pouvant faire l'objet d'un billet, alors c'est parti ...

Pour faire court, un système de tags est un système de mots clefs ; à chaque fois que j'écris un billet, je l'associe à un ou plusieurs mots clefs. Comme mon blog tourne souvent autour des mêmes sujets (Web, Linux, Ubuntu et biensûr eZ publish), le nombre de tags est assez restreint. Pour le moment, j'en ai une cinquantaine mais j'en utilise qu'une quarantaine. Un représentation de l'utilisation des tags est l'affichage en nuage, c'est à dire que la taille du mot est différente en fonction de son utilisation.

A priori pour réaliser un tel système avec eZ publish, je vois 4 possibilités :

  1. Utiliser le datatype Keywords
  2. Utiliser le datatype Object relations
  3. Utiliser la fonctionnalité Related Objects
  4. Utiliser plusieurs emplacement ( location) pour les billets

Utilisation du datatype Keywords

À l'époque où j'ai commencé à développer ce blog, j'avoue que je ne connaissais pas le datatype Keywords (c'est l'un des charmes d'eZ publish, on en apprend tous les jours...). Ce type de donnée permet de stocker pour un objet un ensemble de mots clefs séparés par des virgules. L'administration d'eZ publish propose pour remplir ce champs un simple champs input text. On peut alors récupèrer la liste des objets correspondant à un ou plusieurs mots à l'aide de la fonction keyword de fetch. La fonction keyword_count de fetch permet comme son nom l'indique de compter les objets correspondant à un ou plusieurs mots.

Cette technique semble donc bien adapté mais il y a trois principaux inconvénients à l'utiliser :

  1. je n'ai pas trouvé le moyen de faire la liste complète des mots utilisés, donc générer le nuage de mots clefs ( tags cloud) paraît difficile.
  2. comme les mots sont tappés directement dans un champs texte, il risque d'y avoir des incohérences (pluriel, majuscule, orthographe, ...)
  3. il ne semble pas possible de faire un export RSS avec le mécanisme par défaut pour un mot donné.

Utilisation du datatype Object relations

Ce type permet d'associer l'objet en cours d'édition à un ou des objets existants. On peut donc imaginer associer un billet à des objets tags créés par ailleurs. Le problème de l'utilisation de cette technique est l'affichage du nuage de tags. En effet, il est simple d'afficher la liste des objets de type tags mais pour chacun il faut faire un fetch reverse_related_objects_count pour obtenir le nombre de billets associer à un mot. Par ailleurs, il n'est pas possible avec ce mécanisme d'utiliser l'export RSS.

Utilisation de la fonctionnalité Related Objects

Ce mécanisme est très proche de l'utilisation du datatype Object relations, la principale différence est que cette relation s'exprime au niveau de l'objet plutôt que des attributs. Comme l'indiquent plusieurs commentaires sur la documentation officielle, la différence avec les datatype Object relations n'est pas très claire. Une utilisation mentionnée dans les forums d'ez.no est de permettre la remise à zéro du cache d'un noeud lorsqu'un autre est modifié en le mettant en objet lié dans certains cas bien particuliers où l'utilisation de la fonctionnalités SmartCache ne suffit pas. Mais pour l'implémentation d'un système de tags, cette technique a les mêmes inconvénients que la précédente.

Utilisation de plusieurs emplacement ( locations) pour les billets

J'ai mis en place cette technique sur ce blog. Mon dossier tags (qui sert à afficher le nuage) contient l'ensemble des objets de classe Tags. Chaque billet est créé dans le dossier racine du blog, ensuite j'ajoute un ou des emplacements à mon billet pour le tagguer. Au final cette technique est la plus simple :

  • l'affichage du nuage est un simple fetch list puisque chaque ezcontentobjecttreenode a un attribut children_count permettant de déterminer le poids du mot ;
  • pour chaque billet, l'affichage des tags correspondant est une simple boucle sur l'attribute parent_nodes de l'objet ezcontentobject ;
  • générer un flux RSS des billets pour un tag donné est très simple, et moyennant un mini hack de 3 lignes dans le script d'export on peut même générer le flux RSS avec les adresses principales des billets ;
  • en activant la fonctionnalités emplacement du mode edition, il est possible de décider lors de l'édition des tags associés à un billet.

Finalement, le seul mini inconvénient de cette technique est que les billets se trouvent accessibles à la fois par l'URL de leur noeud principal mais aussi par les URLs des noeuds fils des tags ce qui pour un référencement correct peut être gênant. Il faut donc faire attention à la génération des adresses (cf. hack pour le RSS juste au dessus). J'ai d'ailleurs fait une suggestion dans ce sens dans le forum adhoc.

Tags : eZ Publish, Truc, Blog

» Commentaires

- Try this contribution (#61632) par dis le 27 Septembre 2006 à 14:05
I don't understand french that much, but maybe you are interessted in that :

http://ez.no/community/contribs/applications/ezlabel
- Multi-positionnement automatique (#61642) par Plopix le 30 Septembre 2006 à 14:21
Salut,

Tout ça combiné avec un petti rajout dans l'admin: un boutton permettant de taguer(multi-positionner) directement l'objet au bon endroit...
Une selectBox qui en fin de compte gère le tagging automatiquement... (Une sorte d'ajout de mot-clef façon SPIP)

Du coup c'est transparent pour l'administrateur et permet d'aller plus vite que l'ajout de location basique ;)

Plop +
- très bien, mais (#61650) par rbg le 01 Octobre 2006 à 10:42
Super choix de sujet, c'est un thème récurrent.
J'aime bien la solution que tu as retenu pour ton blog. Elle est très proche d'eZ publish, dans l'esprit du logiciel, et semble pouvoir donner lieu à des traitements assez simples et performants.
J'aime bien aussi la suggestion de Plopix et de dirk pour améliorer l'usabilité.
....

cela étant, le tagging à la base c'est vraiment pour les visiteurs autant que pour les contributeurs, une vraie solution de tagging devrait comprendre des outils back office de rapprochement, d'analyse de similitude, de correction suggérée et d'indexation de tous ces tags. Le jous ou l'on aura ça dans eZ publish, je pense qu'on pourra être une "vraie" solution pour les bloggueurs ... (et pas simplement pour les bloggeurs fondus d'eZ publish)

De plus l'utilisation pourrait aller bien au delà de l'usage "blog" !

Ce n'est pas encore dans la roadmap d'eZ (d'autres chats à fouetter ...) mais si d'aventure certains on envie de développer une extension de ce type ce serait vraiment intéressant !

Roland
- Beau billet ! (#61655) par Bertrand Dunogier le 02 Octobre 2006 à 10:56
Belle comparaison du pour et du contre des méthodes possibles, pour finir avec une approche très eZ.

Quelques petites extensions peuvent assez facilement être ajoutées, qui retirent et ajoutent simplement des emplacements aux objets. Simple et efficace !
- Utiliser le enhanced object relation (#61672) par xavier le 04 Octobre 2006 à 17:42
Hello,

Puis-je me permettre de rajouter à ton panorama une extension "enhanced object relation" ?

http://ez.no/community/contribs/datatypes/enhanced_objectrelation

Cela permet par exemple de rajouter une liste avec check box de tous les objets du type "topic". Tu publies ton billet, coches debian, ez et climat (cela va automatiquement les rajouter comme related objects).

Dans le view full de la classe topic, tu affiches les reverse related et dans ta page debian tu as tous tes billets qui ont été cochés debian.

Petit conseil: aller prendre la version sur le svn, qui est souvent plus à jour que celle en tgz.

X+
- Export RSS (#61673) par xavier le 04 Octobre 2006 à 17:50
Gabriel a écrit une extension pour générer des RSS un peu plus avancés pour faire ce que vous voulez. Je ne sais pas trop ou cela en est, mais c'est pas trop compliqué comme extension...

X+
- eZ Keywords Nodes (#64317) par Plopix le 09 Février 2007 à 14:20
Salut,

Ce billet date un peu mais voila une extension qui va directement dans ton sens :
http://ez.no/community/contribs/applications/ez_keywords_nodes

J'avais besoin de ce principe, j'ai donc fait une extension.

;)
- La 5ème possibilité pour générer facilement un nuage de tag (#66769) par Ronan le 10 Avril 2008 à 10:26
Merci Tigrou pour avoir bien résumé le "problème" des tags dans eZ Publish.

Voici une autre possibilité pour générer un nuage de tag (tagcloud), avec une petite extension toute légère, elle-même largement basée sur l'extension ezwebin :

http://blog.coolforest.net/index....splay-a-Tag-Cloud-with-eZ-Publish-4x

Feedbacks et contributions bienvenus !

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login