web-dev-qa-db-fra.com

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

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 tirets.)
Existe-t-il un moyen de le faire avec Drupal 7 et vues 3? Sinon, existe-t-il un autre moyen de le faire?

22
iStryker

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 "Taxonomie" (appelons-la "Arborescence des dossiers")
  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" (cela 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é

Modifier par iStryker : C'est ce que j'ai obtenu. La seule chose que j'ai changé était de créer Element View une vue de table et de supprimer les classes par défaut (ligne et bande).

Image of the final product by iStryker

15
Fred

J'ai créé trois vues dans Drupal 7.8 et Views 3 + Views Field, imbriquant une vue dans une autre en utilisant Include View, et j'ai obtenu un tel résultat (ci-joint). enter image description here

Étape par étape:

  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 enregistrer

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.

14
Refineo

Je n'ai pas essayé la version D6 ou D7 de moi-même mais j'ai pensé que je le mentionnerais au cas où ce serait ce que vous recherchez: Module d'arborescence de vues - Progression D7

Edit : Il existe maintenant une version D7, consultez la page d'accueil du module Vues Tree

4
nmc

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" : "";
  }
3
Ahmad

Vous pouvez utiliser le module menu Taxonomy . 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
2
dilari

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 listant les nœuds à partir de ce type de contenu, avec 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 listera tous les nœuds affectés à l'un des termes "rouge", "foncé" et/ou "clair".

2
Maciej Zgadzaj

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 de terme à 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 Color et (2) Taxonomy term: Parent term
  3. Ajoutez les champs à la vue: (1) Title (choisissez field_color dans "Relation" et nécessite cette relation), (2) Taxonomy term name (ne pas utiliser de relation et exclure de l'affichage) (3) Taxonomy term name (oui, encore une fois, choisissez cette fois Parent pour la relation 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, avoir du contenu référençant un terme de niveau supérieur pourrait vous poser des problèmes en fonction des besoins d'affichage.

0
cdmo

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

0
uwe