Comment filtrer uniquement les termes racine d'un vocabulaire dans une vue?

15

J'ai un vocabulaire structuré comme suit:

  • Root Alpha
    • Terme Alpha 1
    • Terme Alpha 2
      • Subterm Alpha 1
  • Root Beta
  • Root Gamma
    • Terme Gamma 1
    • Term Gamma 2

Comment filtrer la vue pour n'afficher que les termes racine du vocabulaire? Actuellement, ma vue affiche les termes racine ainsi que les enfants (Terme * *)

À partir de là, je voudrais passer l'argument «Root Alpha» (ou son contenu, ou quoi que ce soit à partir d'un contexte), puis le filtrer uniquement sur les «enfants directs de Root Alpha». (Terme Alpha *). Un filtrage plus approfondi que cela serait un bonus.

Je peux le faire fonctionner si je mets tous mes termes en un seul terme racine pour que le vocabulaire devienne:

  • True Root
    • Root Alpha
      • Terme Alpha 1
      • Terme Alpha 2
        • Subterm Alpha 1
    • Root Beta
    • Root Gamma
      • Terme Gamma 1
      • Term Gamma 2

Je ne sais pas quelle structure de vocabulaire est la plus correcte, l'écrire m'a fait réaliser que j'avais une lecture à faire en plus de comprendre cela avec des vues.

Phizes
la source

Réponses:

13

Pour afficher uniquement les termes racine, j'ai une solution qui fera sûrement quelqu'un facepalm (au moins je l'ai fait):

  1. Ajoutez un filtre contextuel à votre vue de taxonomie
  2. Sélectionnez le terme de taxonomie: terme parent .

    Configurez-le comme ceci: Lorsqu'une valeur de filtre n'est pas disponible : Fournissez la valeur par défaut - Valeur fixe . Définissez la valeur sur 0 .

Ouais, c'est tout. Les termes sans parent ont 0 ici. Voir la description du champ parent de la table taxonomy_term_hierarchy:

Clé primaire: {taxonomy_term_data} .tid du parent du terme. 0 indique aucun parent.

Scorchio
la source
Merci beaucoup, je me suis définitivement fait face pour celui-ci. Tout comme une note si quelqu'un devait rester bloqué avec cela, vous ne pouvez pas spécifier 'Terme de taxonomie' comme validateur lorsque vous faites cela, car il n'y a pas de terme avec tid 0.
Phizes
2

si vous avez une structure de taxonomie statique, vous pouvez filtrer en utilisant filter criterion: Content: Has taxonomy terms (with depth)à cet endroit, vous pouvez sélectionner uniquement les termes racine à filtrer:

critère de filtre: Contenu: A des termes de taxonomie (avec profondeur)

J'espère que les informations seront utiles.

cigotete
la source
La structure de la taxonomie ne sera pas statique, et cela ne me permettrait pas de passer un argument et de filtrer ensuite les enfants d'un terme racine.
Phizes du
@ moon.watcher: Comment utiliser le terme de taxonomie (avec profondeur)? Je sélectionne uniquement les parents mais les enfants apparaissent également.
sokratis
1

Vous pouvez également le faire avec un simple filtre et une structure de taxonomie non statique:

  1. Ajouter un critère de filtre: Terme de taxonomie: id parent
  2. Sélectionnez l'opérateur "Est égal à" et remplissez la valeur avec "NULL"

entrez la description de l'image ici

Il n'affichera que les termes racine de votre taxonomie et fonctionnera toujours si vous modifiez la structure de la taxonomie plus tard ...

scandel
la source
Oui, @scandel, il gérerait une structure de taxonomie non statique, mais il ne gérerait pas d'aller plus loin dans l'arbre comme indiqué dans la question, comme le fait la réponse acceptée.
Phizes
0

Vous pouvez le sélectionner en WHERE parent = 0utilisant db_query()dans votre page.

Ahmed
la source
Je ne sais pas ce que vous entendez par "dans votre page", veuillez expliquer? De plus, je n'exécute pas la requête moi-même, les vues le sont, alors ne devrais-je pas plutôt modifier la requête?
Phizes