web-dev-qa-db-fra.com

Façon propre de créer un navigateur de taxonomie simple d'une profondeur arbitraire

J'ai passé des jours à essayer de déterminer une façon propre de procéder comme suit:

  1. Afficher une liste de tous les termes de niveau supérieur dans un vocabulaire avec des liens vers leurs termes enfants
  2. En cliquant sur un lien, vous serez redirigé vers une liste des enfants de ces termes.
  3. Ad infinitum jusqu'au terme de niveau le plus bas, pour lequel une liste de nœuds marqués avec ce terme sera affichée.

Cela semble être une fonctionnalité assez courante, mais je ne trouve aucune solution capable de gérer une profondeur arbitraire, en particulier si tous les arbres de termes ne descendent pas à la même profondeur.

Une solution idéale serait celle qui utilise Views 3, Contexts, EntityFieldQueries ou tout autre élément bien pris en charge dans Drupal 7.

Je suis capable de faire presque exactement ce que je veux en créant une vue simple avec trois nœuds: relations de terme (terme, parent du terme et parent du parent de terme) et utiliser celles-ci pour des filtres contextuels séquentiels. Le seul problème avec cela est que s'il y a un nœud avec un chemin de terme trop peu profond, il est répertorié comme "non catégorisé" et génère un lien mort. Au lieu de faire cela, j'aimerais qu'il soit lié au prochain terme enfant disponible.

23
beth

J'ai trouvé un moyen de le faire avec uniquement le module Views. Ce n'est pas parfait - cela ne génère pas une URL Nice et un fil d'Ariane avec la lignée taxonomique comme le ferait ma solution pour une taxonomie d'une seule profondeur.

Navigateur de profondeur statique

Pour une taxonomie de profondeur statique (où tous les termes ont la même profondeur de termes enfants), vous feriez ce qui suit:

  1. Créer une vue de nœuds
  2. Ajouter une relation au terme de taxonomie (Terme)
  3. Ajouter une relation au terme de taxonomie parent, accessible via Term (Parent)
  4. Ajouter une relation au terme de taxonomie parent, accessible via Parent (Parent Parent)
  5. Répétez l'étape 4 autant de fois que nécessaire pour la profondeur de votre taxonomie.
  6. Ajoutez des filtres contextuels pour chacun et assurez-vous qu'ils sont dans le bon ordre. Définissez pour afficher un résumé lorsque le filtre n'est pas dans l'URL.
  7. Vous voudrez probablement remplacer le fil d'Ariane et le titre de chaque filtre.
  8. ???
  9. PROFIT

Navigateur à profondeur variable

Pour une taxonomie de profondeur variable (où certains arbres à terme ont des niveaux d'imbrication plus profonds que d'autres), c'est un peu plus complexe:

  1. Ajoutez un nouveau terme de niveau supérieur (Foo) à votre vocabulaire et mettez tous les autres termes en dessous.
  2. Créez une vue de termes avec une page qui affiche les noms des termes
  3. Ajouter un filtre contextuel: Terme de taxonomie: Terme parent
  4. Lorsque la valeur par défaut n'est pas dans l'URL, indiquez la valeur par défaut
  5. Définissez la valeur par défaut sur votre nom de terme de niveau supérieur (Foo)
  6. Spécifiez les critères de validation
    • Validateur: terme de taxonomie
    • Critères: votre nom de vocabulaire
    • Type de valeur de filtre: nom du terme converti en ID de terme
  7. Cliquez sur le bouton "+ Ajouter" en haut du panneau Vues pour ajouter une pièce jointe à la vue.
  8. Ajouter à cette pièce jointe uniquement (remplacer) Relation: Terme de taxonomie: Contenu avec le terme
  9. Ajouter à cette pièce jointe uniquement (remplacer) affichage: champs: titres des nœuds liés aux nœuds, et supprimer (de cette pièce jointe uniquement!) Affichage: champs: nom du terme
  10. Ajouter à cette pièce jointe uniquement (remplacer) filtre contextuel: Terme de taxonomie: Nom
  11. Lorsque la valeur de filtre n'est pas disponible, indiquez la valeur par défaut: Valeur brute de l'URL: Composant de chemin: 2 (ou plus si votre chemin de page a> 1 composant)
  12. Paramètres des pièces jointes: Joindre à: [nom de la page que vous venez de créer]
  13. ???
  14. PROFIT

Captures d'écran de l'interface utilisateur de Views pour référence: enter image description here

23
beth
  1. Créer une vue du type Taxonomie
  2. Ajoutez un filtre contextuel du type terme de taxonomie: terme parent
  3. Définissez Fournissez la valeur par défaut et conservez-la comme fixe. donne l'ID de terme du terme parent supérieur
  4. Ajouter ID de terme de taxonomie en tant que champ et l'exclure de l'affichage
  5. Ajoutez un Taxonomy Term Name cliquez sur ce champ pour le mettre en lien; donnez le lien comme "chemin-vous-définissez-en-vue/[tid]"
    Remarque: Vous devez décocher "Lier ce champ à sa page de termes de taxonomie"

Lorsque vous visitez la page de visualisation, vous voyez les enfants du parent supérieur; selon l'exemple que vous obtiendriez:

  • term1
  • term2

Lorsque vous cliquez sur term1, vous obtenez les enfants. Jusqu'à ce que vous atteigniez le terme 1.1.1. Vous n'obtiendrez aucun résultat si vous cliquez sur term1.1.1 pour le moment. Pour y parvenir, nous devons créer un bloc de vue supplémentaire dans la vue ci-dessus.

  1. Ajouter un bloc
  2. Supprimer le filtre et le champ contextuels existants
    Remarque: Lorsque vous les supprimez, assurez-vous de sélectionner Cette page (Over Ride) dans la liste déroulante en haut à côté de Pour autrement, les champs et les filtres contextuels que vous avez créés dans la page auraient également disparu.
  3. Ajouter un nouveau filtre contextuel terme de taxonomie: ID de terme
  4. Ajouter une relation terme de taxonomie: contenu avec terme
  5. Ajoutez le Titre du conten et vous utilisez la relation à partir du menu déroulant en haut.
  6. Enregistrez la vue et revenez à la page que nous créons (c'est important, sinon vous ne pourriez pas terminer l'étape suivante
  7. Ajoutez un champ dans le PIED DE PAGE OR EN-TÊTE =
  8. Sélectionnez "Global: Afficher la zone" dans la liste et sélectionnez le bloc que nous avons créé dans la liste déroulante Afficher pour insérer pendant que vous y êtes, vérifiez Hériter des filtres contextuels afin que nous puissions passer la valeur de cette vue au bloc aussi
  9. Vérifier afficher même si la vue n'a pas de résultat pour que lorsque cette vue n'affiche pas le résultat, le bloc soit toujours affiché

Enregistrez la vue et vous avez terminé.

8
Mohammed Shameem

Je pense que ce que vous voulez est Views Tree , un module contrib qui utilise Views pour construire un arbre de termes de taxonomie.

(Donnez-moi une seconde et je vous écrirai un rapide guide d'utilisation des champs fiscaux)

Apparemment, ce module a un problème l'empêchant de travailler avec des termes de taxonomie. Huer.

Cela dit, j'ai trouvé le code suivant qui semble faire ce que vous voulez (vous pouvez le faire afficher/masquer des éléments via un code jQuery assez rudimentaire):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Via " Listes de catégories imbriquées avec liens vers des pages ".

3
aendrew

Si vous voulez juste avoir un ensemble de pages dynamiques de navigation dans la taxonomie, alors je procéderais comme suit, nécessitant 3 vues + Taxonomy Display module qui vous permet d'utiliser des vues pour afficher le contenu de taxonomy/term/% pages:

  1. Termes de niveau supérieur - liste des termes dont le parent est nul
  2. Termes de niveau intermédiaire - liste les termes dont le parent n'est PAS nul. Aucun résultat: afficher la vue n ° 3
  3. Nœuds avec termes - liste des nœuds balisés avec des termes.

Comme les vues 1 et 2 auront probablement un thème similaire, vous pouvez envisager de les fusionner en tant qu'écrans en une seule vue - ce serait plus facile à gérer.

J'ai utilisé cette approche avec succès pour ma taxonomie. Heureusement, elle était homogène à chaque niveau - une branche donnée se terminait par des feuilles (nœuds) ou des branches (termes), mais pas les deux. S'il s'agit d'une limitation, veuillez d'abord la tester.

Il s'agit bien sûr d'un "pseudo-code". Vous voudriez mettre en place des validations et des filtres, ainsi qu'un joli motif pathauto d'aspect logique pour refléter la structure.

0
Artur