Le 17 juillet 2013 18:25, Dsls <[email protected]> a écrit : > Je ressors un chantier que j'avais évoqué il y a quelques temps : la > suppression des catégories du core, ainsi que des méta-données, ainsi que du > plugin tags, au profit d'un plugin "taxonomy". > > Les raisons de ce chantier : > * Après tout, une catégorie, c'est une métadonnée comme une autre > * On n'a jamais pu faire un multi-catégories propre sans tout casser, > puisque cela impliquait un changement en base > * Le modèle en base des métadonnées est trop restreint : impossible de > définir l'url d'un tag donné, ou de mettre une déscription à un tag, > impossibilité de hiérarchiser les tags, ... > > D'où le ticket #1012, ayant pour but d'harmoniser les 2 dans un plugin > taxonomy. J'avais regardé à l'époque les modèles de drupal et de WP, sans > pour autant être 100% convaincu par l'un des 2. notamment pour la partie > hiérarchie, où il serait dommage d'abandonner le principe de "nested sets" > que dotclear utilise. > > J'avais donc opté pour le modèle de données suivants en 3 tables (sauce > _instal.php) : > $_s = new dbStruct($core->con,$core->prefix); > > $_s->taxvoc > ->blog_id ('varchar', 32, false) > ->voc_id ('bigint', 0, false) > ->voc_name ('varchar', 40, true) > ->voc_url ('varchar', 255, true) > ->voc_lurl ('varchar', 255, true) > ->voc_desc ('text', 0, true) > ->voc_options ('bigint', 0, false) > ->voc_weight ('bigint', 0, false) > ->post_type ('varchar', 32, false, "'post'") > ->primary('pk_voc','voc_id') > ; > $_s->taxterm > ->term_id ('bigint', 0, false) > ->voc_id ('bigint', 0, false) > ->term_url ('varchar', 255, true) > ->term_name ('varchar', 255, false) > ->term_desc ('text', 0, true) > ->term_weight ('bigint', 0, false) > ->term_lft ('integer', 0, true) > ->term_rgt ('integer', 0, true) > ->primary('pk_term','term_id') > ; > $_s->taxpost > ->post_id ('bigint', 0, false) > ->term_id ('bigint', 0, false) > ->primary('pk_tp','post_id','term_id') > ; > > Décryptons : > * Dès qu'on veut définir une manière de classer les billets (catégorie, tag, > autre), on définit un vocabulaire (table taxvoc): on définit alors : > * Son nom (exemple : "tag", ou "catégorie") > * l'url de base ("slug" pour nos amis de chez WP) des pages publiques pour > chacun de ses termes. ex : "tag/" > * l'url de base de la page qui liste les termes. ex : "tags/" > * ses options, où on indique : si on autorise les valeurs multiples, si on > autorise les hiérarchies de termes > * le post_type associé s'il y en a un > > le terme est lui le nom de la métadonnée/tag ou de la catégorie, appartenant > à un vocabulaire. On y retrouve les nested sets chers à dotclear pour les > hiérarchies, le slug pour définir l'url du terme > > et on retrouve une table d'association post <-> term. > > C'était un début d'ébauche, à discuter, et si certains s'en sentent l'envie, > yapluka :) >
Sur le principe, c'est génial puisqu'en gros ça fait à peu près tout ce qu'on peut imaginer pour classer/trier/hiérarchiser les billets (ou pages, ou …) Est-ce que limiter ça à post (et ses avatars) est suffisant ? Je pense aux … médias ;-) _______________________________________________ Dev mailing list - [email protected] - http://ml.dotclear.org/listinfo/dev
