Hiérarchie unique ou multiple ? les deux !
Une unique rubrique, sinon c’est le bazar !
Par défaut, SPIP ne permet qu’une hiérarchie simple, qui consiste à associer chaque élément éditorial à un unique parent. Ceci résulte d’une volonté de contraindre le webmestre à structurer son site sainement.
En effet, le besoin de faire apparaître un contenu à deux endroits du site relève souvent d’une classification pas aboutie et d’une navigation mal pensée. Contraindre le webmestre à choisir une unique rubrique l’oblige donc à un minimum de réflexion sur l’arborescence du site, et évite la tentation des liens transverses multiples qui conduisent rapidement au capharnaüm.
Ainsi par défaut, SPIP ne permet de fabriquer que des sites bien rangés, avec une arborescence dont la hiérarchie stricte permet de ne pas se perdre.
Mais la polyhierarchie, c’est bien utile...
On parle de polyhierarchie [1] dès lors qu’un contenu est rattaché à plusieurs parents.
Il est parfois impossible de classer certaines données en arborescence, tel que le propose SPIP, sans perdre beaucoup en terme de compréhension ou de navigation. Pour illustrer un tel besoin, on peut lire les discussions sur la catégorisation hiérarchique dans Wikipedia qui en arrive à la conclusion que les liens hiérarchiques n’ont pas leur place dans une encyclopédie digne de ce nom
, ou apprécier le cas, plus trivial, du classement de recettes de cuisine qui sont liées chacune à plusieurs ingrédients, à plusieurs type de plat, etc.
Dans ces cas-là, l’arborescence stricte imposée par SPIP est une limite gênante et les contournements habituellement utilisés (article virtuel, alias d’article, recopie de l’article) sont plus ou moins adaptés, plus ou moins pratiques et souvent lourds à l’usage.
Principe du plugin polyhierarchie
Le plugin permet de créer des liens hiérarchiques transversaux en rattachant articles et rubriques à plusieurs rubriques.
Dans la base de données, chaque article et rubrique conserve son unique parent principal, ce qui permet de désinstaller le plugin sans dommages pour le site.
Les liens secondaires vers les autres rubriques sont stockés dans une table annexe. Ils sont utilisables via des critères de boucle spécifiques.
On peut donc parler, pour chaque objet
- d’une arborescence principale, qui permet d’accéder le plus directement au contenu. On appellera "liens directs" les liens qui constituent cette arborescence principale. Ce sont les liens en trait continus sur l’exemple ci-dessus.
- d’une ou plusieurs arborescences complémentaires ou secondaires qui permettent d’accéder au contenu de façon indirecte. On parlera de liens indirects. Ce sont les liens en traits pointillés sur l’exemple ci-dessus.
Les termes « direct » et « indirect » seront utilisés dans les critères pour distinguer les deux types de liens pour les parents et les enfants.
En résumé, on peut retenir que les liens directs constituent l’arborescence principale de SPIP, qui est maintenue, même en l’absence du plugin. Les chemins secondaires constitués des liens indirects sont des navigations complémentaires ou transversales, qui ne seront utilisables que si le plugin est actif.
Utilisation dans l’espace privé
Dans l’espace privé, l’arborescence principale reste la référence. Mais les liens indirects permettent des navigations transversales utiles pour l’organisation du site.
Édition d’un article ou une rubrique
Lors de l’édition d’un article ou d’une rubrique, le sélecteur de rubrique par défaut est remplacé par un système de sélection multiples.
La première rubrique de la liste est celle de l’arborescence principale. Les suivantes constituent l’arborescence secondaire. Il est possible de changer l’ordre des rubriques par simple glisser-déplacer pour modifier la rubrique parente directe.
Le lien « ajouter » permet de faire apparaitre le navigateur de rubrique pour sélectionner une rubrique supplémentaire.
Il suffit de cliquer sur le « + » en regard d’une rubrique pour l’ajouter aux parents sélectionnés.
Le champ « Ajout rapide » permet d’indiquer un id_rubrique pour l’ajouter sans chercher dans l’arborescence. Il suffit d’entrer rubX (où X est l’id_rubrique) dans le champ et de cliquer sur Ajouter.
Chemins secondaires
Lorsqu’un article a plusieurs parents, le chemin affiché en haut est celui qui constitue l’arborescence principale. Les parents indirects sont également listés après la mention « Egalement dans les rubriques ».
Les liens permettent d’aller vers ces rubriques parents secondaires.
Contenus secondaires d’une rubrique
Dans une rubrique qui contient des enfants indirects, ceux-ci sont listés dans la marge latérale.
Comme précédemment, les liens permettent de naviguer vers ces contenus secondaires pour les modifier.
Utilisation dans les squelettes
L’utilisation de la polyhierarchie suppose que les squelettes soient conçus pour gérer les possibilités de navigation transversales. Pour cela, le plugin mets à disposition du webmestre plusieurs critères permettant de naviguer dans les arborescences multiples.
La boucle HIERARCHIE
La boucle HIERARCHIE
n’est pas modifiée. Elle permet donc de dérouler le chemin principal d’une rubrique.
Le critère {branche}
Le critère {branche}
est étendu. Il englobe par défaut les éléments liés indirectement aux rubriques de la branche, mais sans parcourir les rubriques enfants indirectes.
Dans une boucle RUBRIQUES
, les rubriques rattachées indirectement à la branche directe seront donc inclues, mais pas parcourues (leurs enfants ne seront donc pas inclus)
<ul>
<BOUCLE_branche2(RUBRIQUES){branche #ID_RUBRIQUE}>
<li>#ID_RUBRIQUE-#TITRE</li>
</BOUCLE_branche2>
</ul>
Appliqué à la rubrique d'
du schéma ci-dessus, le critère {branche}
donnerait donc la liste b, g', f', h, e
Dans une boucle ARTICLES
, les articles rattachés indirectement sont inclus, mais pas les articles enfants d’une rubrique rattachée indirectement.
Par ailleurs, l’écriture {branche #ID_RUBRIQUE}
est acceptée.
Le critère {branche_complete}
Le critère {branche}
est donc complété par un critère {branche_complete}
qui inclut cette fois tous les contenus trouvés en parcourant toutes les branches principales et secondaires.
<ul>
<BOUCLE_branche_complete3(ARTICLES){branche_complete #ID_RUBRIQUE}>
<li>#ID_ARTICLE-#TITRE</li>
</BOUCLE_branche_complete3>
</ul>
Appliqué à la rubrique d'
du schema ci-dessus, le critère {branche_complete}
donnerait donc la liste b, g',a, c, f', h, e
L’écriture {branche_complete #ID_RUBRIQUE}
est acceptée.
Le critère {branche_principale}
Symétriquement, le critère {branche_principale}
permet de réduire la sélection aux éléments de l’arborescence principale uniquement. Ce critère permet donc de retrouver les enfants de la branche principale classique de SPIP.
Appliqué à la rubrique d'
du schéma ci-dessus, le critère {branche_principale}
donnerait donc la liste g', f', h, e
Le critère {enfants}
Il permet de sélectionner les enfants d’une rubrique. Il peut s’utiliser sur une boucle RUBRIQUES
, ARTICLES
, ou tout autre boucle contenant un champ id_rubrique, même si la polyhierarchie ne s’y applique pas.
Il peut s’écrire {enfants}
et prendra alors l’#ID_RUBRIQUE
dans le contexte ou dans la boucle englobante, ou explicitement {enfants #ID_RUBRIQUE}
ou encore {enfants #LISTE{12,23,36}}
pour cibler plusieurs rubriques.
Appliqué à la rubrique d'
du schéma ci-dessus, le critère {enfants}
donnerait donc la liste b, g'
Le critère {enfants_directs}
Il fonctionne comme le critère {enfants}
, mais permet de restreindre la sélection aux enfants directs.
Appliqué à la rubrique d'
du schéma ci-dessus, le critère {enfants_directs}
donnerait un seul résultat g'
Le critère {enfants_indirects}
Il fonctionne comme le critère {enfants}
, mais permet de restreindre la sélection aux enfants indirects.
Appliqué à la rubrique d'
du schéma ci-dessus, le critère {enfants_indirects}
donnerait un seul résultat b
Le critère {parents}
Il permet de sélectionner les parents d’une rubrique, d’un article, ou de tout autre contenu. Il ne peut s’utiliser que sur une boucle RUBRIQUES
.
Il peut s’écrire {parents}
et fait référence à l’élément de la boucle englobante, ou {parents #GET{id_rubrique}}
et fait référence à la valeur passée, ou {parents #LISTE{12,23,36}}
.
Appliqué à la rubrique b
du schéma ci-dessus, le critère {parents}
donnerait donc la liste d, d'
Le critère {parents_directs}
Il fonctionne comme le critère {parents}
, mais permet de restreindre la sélection aux parents directs (un seul dans la pratique !)
Appliqué à la rubrique b
du schéma ci-dessus, le critère {parents_directs}
donnerait donc la liste d
Le critère {parents_indirects}
Il fonctionne comme le critère {parents}
, mais permet de restreindre la sélection aux parents indirects.
Appliqué à la rubrique b
du schéma ci-dessus, le critère {parents_indirects}
donnerait donc la liste d'
Publication des rubriques
Par défaut, dans SPIP, une rubrique n’est visible dans l’espace public et dans les boucles que si elle contient des objets publiés.
Avec polyhiérarchie, à partir de la version 0.3.0 du plugin, si une rubrique ne contient aucun contenu direct, mais des articles ou rubriques indirects publiés, la rubrique sera alors publiée et visible dans l’espace public.
Pour résumer
Le plugin met a disposition tous les outils pour concevoir et développer avec SPIP des sites faisant appel à la polyhiérarchie.
Cela peut aller de simples cas où les articles sont ponctuellement présent dans une seconde rubrique, à des cas complexes faisant un usage avancé de la polyhierarchie.
Dans tous les cas, il convient de bien réfléchir préalablement à la classification des données du site, et de ne pas se précipiter dans une organisation approximative au prétexte que le plugin permet ensuite de faire des liens transversaux.
Le plugin met a disposition des outils et des possibilités, mais c’est au webmestre de veiller ensuite à l’usage qui en sera fait !
Et après ?
Cette première version du plugin a pour but d’évaluer le concept et les limites qu’il faudra lui poser éventuellement.
En fonction des usages il pourra être utile d’enrichir le plugin avec des possibilités de configuration (par exemple pour ne permettre la polyhierarchie que sur les articles), ou des contrôles de sécurité (par exemple ne pas mettre un contenu dans une rubrique et dans sa parente, ne pas créer de navigation circulaire ...).
Discussions par date d’activité
97 discussions
Bonjour,
demande particulière...
Comment serait possible « simplement » de ne pas utiliser le picker de polyhierarchie en partie publique grâce au formulaire éditer_article que j’ai surchargé dans squelettes/formulaires.
Tout en continuant de l’utiliser en partie privée ceci sans dommage collatéral.
Faut-il obligatoirement faire un CVT ?...
Merci pour vos pistes.
Cordialement.
Répondre à ce message
Bonjour à tous,
je fait une médiathèque dont certains articles doivent aller dans plusieurs catégories.
Or, le plugin polyhierarchie qui me conviendrait parfairement n’ouvre pas les sous-rubrique. Quelqu’un sait-il pourquoi ?
Si un article est placé à sa place,
Je peux mettre le polyhierarchisé :
1) Dans les rubriques racines
2) A l’aide du module de rapidité (rubXX) mais il faut connaitre le numéro de la rubrique.
N’étant pas le seul à gérer la médiathèque, il faurait que je puisse ouvir les sous-rubriques donc merci à la personne ou les personnes qui pourraient m’aider.
Désolé de re-commenter par dessus mais apparemment j’ai bien les sous-rubriques dans la poly-hierarchie des rubriques.
cela ne fonctionne donc pas pour les articles mais non les rubriques
Répondre à ce message
Bonjour,
il semble qu’il y ait un bug qui soit apparu avec l’introduction du Plugin « traduction rubriques autrement ».
En pièce jointe l’impression d’écran.
Bravo en passant pour cet excellent plugin qui rend de bien bons services !
Je précise que ça ne semble pas impacter sur les fonctionnalités...
Ce devait être un problème de cache (sur le serveur tmp/cache que j’ai tout à fait vidé) car je ne constate plus le problème...
Répondre à ce message
J’ai installé le plugin. RAS
J’arrive à attribuer deux rubriques pour un seul article.
Sauf que l’article n’apparaît que dans sa rubrique d’origine.
Une idée ?
Pas de message d’erreur, tout semble bien se dérouler. SPIP 3.0.16 et plugin en version 2.0.8
Répondre à ce message
Bonjour,
Je suis sur une SPIP 2.1 et polyhierarchie 1.0.0. (Je ne peux pas faire d’update en SPIP 3 pour le moment mais là n’est pas le sujet)
J’ai cette arborescence :
Un des adminsitrateurs/rédacteurs a modifié le parent de rub1530 pour être rub362. L’édition et l’enregistrement se font sans soucis (justement). La problème vient après quand on veut consulter la rub1530 ou la rub362 car on a une boucle sans fin entre ces 2 rubriques.
Il semble que polyhierarchie ne fait pas de vérification de id_rubrique et id_parent entre les rubriques. En tout cas dans la version 1.0 du plugin. Il semble que même la v2 du plugin ne le fait pas.
cf. http://zone.spip.org/trac/spip-zone/browser/_plugins_/polyhierarchie/branches/v1.0/formulaires/editer_polyhierarchie.php et http://zone.spip.org/trac/spip-zone/browser/_plugins_/polyhierarchie/trunk/formulaires/editer_polyhierarchie.php
Est-ce que vous avez rencontré aussi ce bug/comportement ?
Répondre à ce message
Bonjour,
Merci pour le plugin, solution qui parait simple
pour la mise en place de « multirubricage ».
J’ai fait un premier essai dans une boucle nav latérale.
Y a un détail qui me pose probleme : lorsque je clique sur un article indirect,
je me retrouve dans la rubrique d’origine.
Pour rendre plus clair mon propos :
j’ai 2 rubs avec
Eté : Parapente, Canoé et Rando
Hiver : Ski, Raquettes et Rando
Rando étant dans Hiver un article indirect,
ainsi si je me trouve dans Hiver,
lorsque je clique sur Rando,
je me retrouve dans la rubrique Eté !
C’est, je trouve, un problème !
Y a-t-il une solution simple ?
Merci pour votre aide.
Bonjour,
je m’inscris dans le fil de cette question. Mon site tourne avec SPIP 3.0.13 et Polyhierarchie 2.0.7.
J’ai une rubrique qui n’accueille que des articles indirects. Lorsque je clique sur le lien d’un de ces articles, il m’envoie vers l’article dans son parent direct alors que je voudrais rester dans son parent indirect.
Par ailleurs, question 2, comment peut-on EXPOSER dans un menu tous les parents (direct et indirects) d’un articles ?
Merci pour votre aide.
Répondre à ce message
Bonjour,
Je rencontre une erreur SQL 1054 lorsque le plugin polyhierarchie est activé. Je n’avais pas cette erreur dans spip 2.12.
Cette erreur apparait sous tous les navigateurs lorsque je suis logué !
Le message d’erreur parle du fichier squelette : plugins/auto/sarkaspip_32/noisettes/rubrique/inc_rubrique_navigation.html, au niveau de la boucle _mots_branche.
<BOUCLE_mots_branche(MOTS){branche}{type!=squelette_habillage}{doublons}>
Voici mes paramètres :
- version de SPIP : 3.0.10
- version du plugin testé et des éventuels plugins nécessités : PolyHiérarchie
2.0.4, SPIP Bonux 3.0.5
- version de PHP : 5.2.5
- version de MySQL / SQLite / PostgreSQL : MySQL 5.0.45
J’ai réessayé de changer le code type ! en mots.type, enlever doublons, changer branche en id_rubriques. Rien ne lève l’erreur. Merci par avance pour l’aide.
Bonjour,
Je reviens vers vous car je n’ai toujours pas de solution pour ce bug.
le message d’erreur apparait :
- quand je me logue et que je clique sur une rubrique qui a au moins une sous-rubrique (si aucune sous-rubrique, pas de bug)
- sous tous les navigateurs
le message d’erreur disparait :
- quand je fais F5 ou une actualisation de la page
- quand je désactive polyhierarchie (j’ai testé un à un tous mes plugins pour le trouver !)
Je veux bien un conseil pour m’aider à sortir de cette impasse. Merci
Bonne nouvelle, ce bug vient tout juste d’être corrigé par la version 2.0.7
Merci. Merci beaucoup.
Répondre à ce message
Il y a un bug assez gênant (version du plugin : 2.0.4).
J’ai une rubrique qui est à la racine du site d’une part et en sous-rubrique d’une autre, d’autre part, par le miracle de la polyhiérarchie.
Cette rubrique étant à la racine, contient des brèves.
Si je modifie la rubrique dans l’espace privé à l’aide du classique formulaire « Modifier cette rubrique », le champ « dans les rubriques » ne propose plus que la sous-rubrique et oublie la racine du site.
Si par malheur je valide à ce stade, pouf, je me retrouve avec ma rubrique qui reste en sous-rubrique, mais qui a perdu son statut de secteur à la racine. Je peux rectifier ensuite, sauf qu’entretemps il y a eu un effet collatéral très gênant : toutes mes brèves changent de secteur... et je n’ai plus qu’à les rapatrier une par une.
Je pense qu’il ne s’agit que d’un bug dans le formulaire de l’espace privé « modifier cette rubrique ». Je serais infiniment reconnaissant si un correctif pouvait être amené ;-)
Le bug est identifié. Malheureusement la correction n’est pas du ressort du plugin mais du core : http://core.spip.org/projects/spip/repository/revisions/20891 sera donc dans la prochaine release mineure de SPIP.
Répondre à ce message
Sous Spip 3.0.11, j’utilise le plugin polyhierarchie pour que des articles apparaissent dans plusieurs rubriques.
J’aimerais que :
- les pages rubriques qui ne contiennent aucun article affichent à leur place toutes les sous-rubriques de la rubrique mère.
- les pas sous-rubriques affichent les articles qu’elles contiennent y compris ceux qui appartiennent à plusieurs rubriques.
Mon problème est que je n’arrive pas configuer une boucle que les critères ci-dessus soient pris en compte.
En effet, si je modifie ainsi la boucle article du squelette rubrique :
les articles appartenant à plusieurs rubriques s’affichent bien dans toutes les rubriques, mais mes rubriques qui n’ont pas d’articles n’affichent plus les sous-rubriques.
A la place de l’affichage des sous-rubriques, elles affichent tous les articles.
Que faut-il que j’écrive dans ma boucle pour que :
- les rubriques qui n’ont pas d’articles affichent à la place les sous-rubriques ;
et que dans le même temps :
- les sous-rubriques affichent les articles qu’elles contiennent y compris ceux qui appartiennent à plusieurs rubriques.
Merci par avance pour vous aide,
Bien cordialement,
Thierry
Répondre à ce message
Bonjour,
Sous Spip 3.0.11, après avoir mis à jour le plugin, je rencontre ce message sur toutes les pages des articles dans l’espace privé (rien sur l’espace public) :
Warning : array_key_exists() [function.array-key-exists] : The second argument should be either an array or an object in /home/www/client/toto/www/plugins/auto/polyhierarchie_v2/polyhier_pipeline.php on line 61
Quelle est la cause et comment y rémedier ?
Merci pour votre aide,
Bien cordialement,
Thierry
En effet, il y a eu une correction maladroite qui a provoqué cela. Je viens de corriger, il suffit de mettre à jour le plugin pour que cela soit résolu !
Bonsoir,
Merci beaucoup pour le correctif, c’est parfait, plus aucun souci.
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 : |