Comment créer un arbre imbriqué avec des termes et des nœuds avec Views 3?

22

J'ai besoin de créer quelque chose de similaire comme ceci:

Couleurs (Vocabulaire)

  • Rouge (terme)
    • Sombre (terme)
      • Noeud 1
      • Noeud 2
    • Léger (terme)
      • Noeud 3
      • Noeud 4
  • Bleu (terme)
    • Noeud 5
    • Noeud 6
  • Vert (terme)
    • Noeud 7
    • Noeud 8

(Les puces sont des retraits.)
Existe-t-il un moyen de le faire avec Drupal 7 et vues 3? Sinon, existe-t-il une autre façon de procéder?

iStryker
la source
Pour clarifier - comme j'ai peut-être mal compris votre question - vous voulez afficher une structure comme celle-ci sur une seule page?
Maciej Zgadzaj
Oui sur une seule page
iStryker

Réponses:

15

Grâce à refino, j'ai trouvé une belle solution en utilisant les modules suivants:

Vous trouverez ci-dessous l'explication:

  1. Créez d'abord une nouvelle taxonomie (appelons-la "Dossier")
  2. Ensuite, créez un nouveau type de contenu (appelons-le "Element") avec un champ de référence de terme à la taxonomie "Folder"
  3. Créer une nouvelle vue "Contenu" (appelons-la "Vue Élément")
  4. Choisissez l'affichage du champ
  5. Ajoutez un filtre contextuel à votre champ de référence de terme
  6. Créer une nouvelle vue "Taxonomy" (appelons-la "Folder Tree")
  7. Ajoutez 2 champs (nom du terme et identifiant du terme). Le deuxième champ peut être exclu de l'affichage
  8. En relation: ajoutez un "terme parent"
  9. Ajoutez un troisième champ (identifiant de terme) et affectez-le à votre relation parent. Ce champ peut être exclu de l'affichage
  10. Choisissez Format "Arborescence (modèle d'adjacence)" et sélectionnez dans les paramètres: Liste ordonnée + Champ principal (votre premier tid), Champ parent (votre tid affecté à la relation parent). Vous devriez maintenant avoir un bel arbre avec tous vos termes imbriqués
  11. Ajoutez un 4ème champ "Global: View" (qui vient avec Vues Field View) et choisissez votre "Element view", affichez Master add [tid] dans le champ de texte Arguments

J'espère que cette aide

À votre santé

Edit by iStryker : C'est ce que j'ai obtenu. La seule chose que j'ai modifiée a été de faire de la vue élémentaire une vue de table et de supprimer les classes par défaut (ligne et bande).

Image du produit final par iStryker

Fred
la source
Une grande aide de ce commentaire. Juste une remarque mineure: vous voudrez peut-être renommer les champs (titres administratifs) car dans les listes déroulantes des paramètres VT, les deux champs "ID de terme" seront indiscernables.
Artur
Cette réponse m'a conduit à 90%. J'avais besoin de supprimer les classes par défaut sur chaque champ; Supprimez les classes de table dans la vue 'Vue des éléments'; Thème un peu
iStryker
J'ai ajouté une étape pour réduire les doublons dans la vue Contenu. De plus, le champ "Arguments" dans Global: View est désormais intitulé "Filtres contextuels" et le jeton à utiliser est "[! Tid]".
othermachines
Est-il possible de le faire mais avec des groupes organiques au lieu de la taxonomie?
IamOnStage
14

J'ai créé trois vues dans Drupal 7.8 et Vues 3 + Champ de vues, imbriquant une vue dans une autre en utilisant Inclure la vue, et j'ai obtenu un tel résultat (joint). entrez la description de l'image ici

Étape par étape, comment procéder:

  1. Créez le vocabulaire "Couleurs" et remplissez-le avec des balises.

  2. Créer une nouvelle vue des nœuds de taxonomie Couleurs - je l'appelle "Nœuds de couleurs"

2.1 Format du tableau, paramètres: champ de regroupement: terme de taxonomie: nom

2.2 Filtres contextuels avancés: terme de taxonomie: terme parent

2.3 Relations avancées: terme de taxonomie: contenu utilisant la couleur

2.4 Définir les champs: Terme de taxonomie: ID de terme, Terme de taxonomie: Nom, (field_color) Contenu: Titre

2.5 Critères de filtrage: Terme de taxonomie: Vocabulaire (= Couleurs)

2.6 Si vous le souhaitez, vous pouvez également définir "Exclure de l'affichage" pour ID de terme, terme de taxonomie: nom

2.7 Définir le chemin: / nœuds-de-couleurs /%

2.8 Définir un comportement sans résultat: Global: zone d'affichage (nous y reviendrons plus tard) 2.9 enregistrer

3.Créez une nouvelle vue des nœuds de taxonomie Couleurs - je l'appelle "Nodes of Colors 2"

3.1 Format du tableau, paramètres: champ de regroupement: aucun

3.2 Filtres contextuels avancés: Terme de taxonomie: ID de terme

3.3 Relations avancées: terme de taxonomie: contenu utilisant la couleur

3.4 Définir les champs: Terme de taxonomie: ID de terme, Terme de taxonomie: Nom, (field_color) Contenu: Titre

3.5 Critères de filtrage: Terme de taxonomie: Vocabulaire (= Couleurs)

3.6 Si vous le souhaitez, vous pouvez également définir "Exclure de l'affichage" pour ID de terme, terme de taxonomie: nom

3.7 Définir le chemin: / nœuds-de-couleurs-2 /%

3.8 Définir un comportement sans résultat: Global: aucun

3.9 Enregistrer

Revenez en arrière et modifiez à nouveau "Nodes of Colors"

4.1 allez à Définir un comportement sans résultat: Global: Afficher la zone

4.2 Définir la vue pour insérer: Vue: nœuds_des_coleurs2 Affichage: page

4.3 Définir les filtres contextuels hérités

4.4 sauvegarder

5 Revenez à nouveau aux vues (type de terme)

5.1 Créer une nouvelle vue des nœuds de taxonomie Couleurs - je l'appelle "Arbre des couleurs"

5.1 Format du tableau, paramètres: champ de regroupement: aucun

5.2 Filtres contextuels avancés: aucun

5.3 Relations avancées: terme de taxonomie: terme parent

5.4 Définir les champs: Terme de taxonomie: ID de terme, Terme de taxonomie: ID de terme, Terme de taxonomie: Nom, Vue: Inclure la vue (Inclure la vue)

5.5 Critères de filtrage (1): Terme taxonomique: Vocabulaire (= Couleurs)

5.6 Critères de filtrage (2): (Parent) Terme de taxonomie: Terme

5.7 Si vous le souhaitez, vous pouvez également définir "Exclure de l'affichage" pour l'ID de terme et une étiquette de vue Inclure

5.8 Définir le chemin: / colors-tree

5.9 Définir un comportement sans résultat: aucun

5.10 sauvegarder

... et ça devrait être ça, enfin.

Raffiner
la source
pouvez-vous clarifier un peu plus "5.4 définir les champs ... voir: inclure la vue". Je ne vois aucune option pour cela nulle part. Merci
uwe
Je suis désolé de ne pas avoir écrit J'ai utilisé les vues 7.x-3.0-rc1 + Vues Field 7.x-1.0-rc1
Refino
D'accord, merci. J'ai également suivi quelques instructions sur leur file d'attente de problèmes drupal.org/node/1171604
uwe
Wow, cette réponse a obtenu un énorme vote positif dans le passage 7 jours. Quelqu'un a-t-il testé cela, ou vous / ils venez-vous de voter parce que @Refineo a donné la réponse la plus détaillée?
iStryker
J'ai réessayé cette procédure pas à pas et je n'ai pas réussi. Je vous détestais tous ceux qui ont voté pour cette question la dernière semaine sans test
iStryker
3

Si vous souhaitez obtenir la vidéo à partir de l'URL, utilisez le code suivant.

$vid = $_GET['vid'];
$tid = 0;
$level = 0;
print taxonomy_tree($vid, $tid, $level);
function taxonomy_tree($vid, $tid = 0, $level) {
  $children = taxonomy_get_children($tid, $vid);
  $output = '';
  if ($children) {
    $output .= '<ul>'; 
    foreach ($children as $child) {
      $level++;
      $output .= '<li class="taxonomy-tree-lvl' . $level . ' ">'; 
print $level;
      $output .= l($child->name, 'taxonomy/term/'. $child->tid) . '(' . taxonomy_term_count_nodes($child->tid) . ')'; 
      $output .= taxonomy_tree($vid, $child->tid, $level);
      $output .= '</li>';

      $level--; 
    }
    $output .= '</ul>'; 
  }

  return $output;

}

Ou utilisez le code suivant.

$vocabulary = taxonomy_vocabulary_load(2);//Here pass the vid
print $vocabulary->name;
$vid1 = $_GET['vid'];
if(!$vid1) {
$vid1 = 2;
print 'empty';
}
$vid = 2;
$parent = 0;
print get_child_terms($parent, $vid1);
 function get_child_terms($parent, $vid) {
      $sql = "SELECT td.tid, td.vid, td.name"
         . "  FROM {term_data} td"
         . "  JOIN {term_hierarchy} th on th.tid = td.tid"
         . " WHERE th.parent = %d"
         . "   AND td.vid = %d"
         . " ORDER BY td.weight, td.name";
    $terms = db_query($sql, $parent, $vid);
    $output = "";
    while ($aterm = db_fetch_object($terms)) {
        $output .= "<li>";
        $output .= l("$aterm->name", "taxonomy/term/$aterm->tid/all") . " ("
                .  taxonomy_term_count_nodes($aterm->tid) . ")</li>\n"
                .  get_child_terms($aterm->tid, $vid);
    }
    return ($output != "") ? "<ul style='list-style-type: none;
  margin: 0px 0px 0px 20px;
  padding: 0px;'>\n". $output ."</ul>\n" : "";
  }
Ahmad
la source
2

Bien sûr, il y a:

  1. Configurez votre vocabulaire hiérarchique,
  2. Ajoutez-le à n'importe quel type de contenu sélectionné,
  3. Créez une vue répertoriant les nœuds à partir de ce type de contenu, avec un filtre contextuel :

    • soit "Contenu: possède un ID de terme de taxonomie" - si vous souhaitez répertorier uniquement les nœuds affectés à un terme spécifique,
    • ou "Contenu: a un ID de terme de taxonomie (avec profondeur)" - si vous souhaitez répertorier les nœuds affectés à un terme spécifique ainsi qu'à ses termes enfants.

      Dans ce cas, dans la configuration du filtre, vous devez définir la profondeur - combien de niveaux en dessous (ou au-dessus) vous voulez que ce filtre fonctionne.

Ensuite, en supposant que l'URL de votre vue est http://mysite.com/myview et 'Red' tid = 1, si vous allez sur http://mysite.com/myview/1, il vous répertoriera tous les nœuds affectés à l'un des termes «rouge», «foncé» et / ou «clair».

Maciej Zgadzaj
la source
Je ne cherche pas de réponse pour un terme spécifique. Je cherche une vue pour le vocabulaire entier
iStryker
Et c'est exactement ce que j'ai décrit.
Maciej Zgadzaj
2

Vous pouvez utiliser le module de menu Taxonomie . Voici une citation à ce sujet (à partir de la page du projet du module):

Transforme facilement vos vocabulaires taxonomiques en menus!

Fonctionnalités:

  • Menu personnalisé par vocabulaire
  • Utilise le chemin du terme de taxonomie par défaut ou des chemins personnalisés
  • Intégration avec les vues
  • Intégration avec Pathauto: utilisez des alias d'URL / chemin
  • N'interfère pas avec les autres modules de menu
dilari
la source
Bienvenue dans Drupal SE! taxonomy_menu est un projet sympa et il peut très bien le faire. OP veut cependant le faire dans Views.
AyeshK
0

J'essaie d'accomplir la même chose, mais je n'ai pas trouvé beaucoup de choses disponibles dans D7. Le module Taxonomy Blocks le fait dans un bloc - pas dans des vues.

uwe
la source
0

Je pense avoir trouvé une autre façon de résoudre ce problème, et je pense que c'est plus simple que le reste de ces solutions. Il n'implique aucun module supplémentaire et vous n'avez besoin que d'une seule vue.

En supposant que vous avez créé un vocabulaire hiérarchique à deux niveaux (couleurs) et un type de contenu avec une référence terminologique à ce vocabulaire, procédez comme suit:

  1. Créer une nouvelle vue et filtrer par "Vocabulaire taxonomique: nom de la machine (= couleurs)"
  2. Ajouter des relations: (1) Taxonomy term: Content using Coloret (2)Taxonomy term: Parent term
  3. Ajoutez les champs à la vue: (1) Title(choisissez field_colordans "Relation" et exigez cette relation ), (2) Taxonomy term name(n'utilisez pas la relation et excluez de l'affichage) (3) Taxonomy term name(oui, encore une fois, choisissez cette fois la Parentrelation et excluez de l'affichage).
  4. Maintenant, groupez-le en cliquant sur Paramètres de format: (1) regroupement 1:, (Parent) Taxonomy term: Name(2)Taxonomy term: Name

Terminé. Si vous avez plus de deux niveaux, ajoutez simplement une autre relation de parent en utilisant Parent comme relation de la relation.

EDIT: si vous n'avez pas besoin de la relation, vous vous retrouverez avec des dupes. Les parents seront répertoriés deux fois s'ils ont des termes enfants référencés par des nœuds. Donc, cela limite un peu la réponse en termes de niveau supérieur sans nœuds qui la référencent ne s'afficheront pas. De plus, comme le tri est probablement important, le fait de référencer un contenu faisant référence à un terme de niveau supérieur pourrait vous poser des problèmes en fonction des besoins d'affichage.

cdmo
la source
Il n'y a pas de filtre "Vocabulaire taxonomique: nom de la machine (= couleurs)" jusqu'à ce que la relation soit ajoutée. Je soupçonne que la première étape consiste à être deuxième. De plus, je ne pouvais pas comprendre comment ajouter le champ Title lors du choix de field_color dans "Relation".
Dimetry