web-dev-qa-db-fra.com

Nom du terme de taxonomie comme filtre contextuel pour la vue

En D7, j'ai pu filtrer une vue selon un terme de taxonomie nom tiré de l'URL. Un exemple serait cette URL

http://www.gbyte.co/tags/drupal-planet/rss.xml

"drupal-planet" serait converti en ID de terme de taxonomie qui filtrerait alors les résultats de la vue en conséquence.

Maintenant, j'ai configuré une vue D8 correspondante avec un filtre contextuel "Contenu: Tags (field_tags)", field_tags étant le champ de taxonomie. Cependant, la vue D8 n'affichera les résultats que lorsque je transmettrai l'ID de terme réel à l'URL comme ceci:

http://www.gbyte.co/tags/9/rss.xml

J'aimerais qu'il fonctionne également avec le terme nom comme l'a fait D7. La fonctionnalité est-elle manquante ou dois-je configurer la vue différemment?

19
gbyte.co

Le Nom du terme converti en ID de terme filtre semble être manquant pour les vues D8.

Une solution de contournement du constructeur de site consiste à ajouter une relation , Termes de taxonomie sur le nœud puis à ajouter un Taxonomy Term: Name filtre à Filtres contextuels en utilisant la relation susmentionnée. En cochant la case Spécifiez les critères de validation, définissez votre Validateur sur Nom du terme de taxonomie & vérifiez la taxonomie appropriée sur laquelle filtrer.

20
Shawn Conn

Pour terminer, au moment d'écrire la question, j'ai réussi à contourner ce problème en convertissant le nom du terme de taxonomie de l'URL en un ID de terme dans views_hook_pre_view (), puis en l'utilisant comme entrée pour le filtre contextuel. qui accepte les identifiants de taxonomie.

Voici le code du crochet des vues:

/**
 * Implements hook_views_pre_view().
 */
function my_module_views_pre_view(\Drupal\views\ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'blog' && $display_id == 'feed') {
    if (isset($args[0])) {
      $term = taxonomy_term_load_multiple_by_name($args[0], 'tags');
      if (empty($term)) {
        $term = taxonomy_term_load_multiple_by_name(str_replace("-", " ", $args[0]), 'tags');
      }
      if (!empty($term)) {
        $tid = key($term);
        $args[0] = $tid;
      }
    }
  }
}
3
gbyte.co

in Drupal 8 Check this module Views Taxonomy Term Name Depth

Ce module fournissant un plugin pour le filtre contextuel comme l'image suivante ... enter image description here

3
user21513

Pour développer la réponse de Shawn Conn:

  • Dans la configuration de la vue, sous Avancé -> Relations, cliquez sur 'Ajouter'
  • Sélectionnez maintenant "Termes de taxonomie sur le nœud"
  • Sur l'écran suivant, choisissez le vocabulaire "tags" et exigez la relation.
  • Maintenant, sous Avancé -> Filtres contextuels, cliquez sur 'Ajouter'
  • Sous "Lorsque le filtre n'est PAS disponible", choisissez "Fournir la valeur par défaut", "Valeur brute de l'URL". Sélectionnez toutes les autres options adaptées à vos besoins.
  • Sous "Lorsque le filtre IS disponible ou une valeur par défaut est fournie", choisissez "Spécifier les critères de validation" et sélectionnez "Nom du terme de taxonomie" pour le validateur. Choisissez le vocabulaire "tags", puis cliquez sur appliquer.

J'espère que cela pourra aider!

2
axlroach

Je ne sais pas si vous avez toujours ce problème, mais j'ai pu créer une relation pour "Termes taxonomiques sur le nœud" en utilisant le vocabulaire taxonomique souhaité, puis créer un filtre contextuel en utilisant cette relation pour "Terme taxonomique: Nom" qui vous permet à valider en fonction du nom plutôt que du TID.

1
Todd Bloom

J'ai écrit un petit module pour restaurer les fonctionnalités manquantes et faire fonctionner à nouveau correctement:

https://www.drupal.org/project/views_taxonomy_term_name_into_id

Il ajoute à nouveau le validateur d'argument "Convertir le nom du terme en ID" pour les termes de taxonomie utilisés dans les "filtres contextuels" dans les vues. Voir la page du projet pour plus d'informations et d'instructions.

Profitez, -Derek (dww)

1
Derek

Hé, je cherchais cette réponse depuis un moment. Pour quelqu'un d'autre comme moi qui cherche comment le faire fonctionner, je me suis frayé un chemin vers mon succès en partie à partir d'ici et des résultats de drupal.org, puis également des suivants: http://redcrackle.com/blog/adding -contextual-filter-view-drupal-8

J'utilise Drupal 8 et Zircon. Je suis tout nouveau, donc je peux utiliser les mauvais termes. Je voulais faire des liens d'images contextuelles dans "Panel first col 1" basé sur la catégorie de la page sur laquelle quelqu'un se trouve. Ce que j'ai fait, c'est aller dans Structure> Vues> Carrousel (la vue qui contient les images dans cette région de bloc)> Avancé> Ajouter par filtres contextuels> A un ID de terme de taxonomie> sélectionnez dans Fournir une valeur par défaut: Taxonomie l'ID du terme à partir de l'URL (qui n'a aucun sens pour moi, mais peu importe)> j'ai ensuite coché les trois cases: Charger le filtre par défaut à partir de la page des termes, Charger le filtre par défaut à partir de la page du nœud, c'est bon pour les blocs de taxonomie associés, Limiter les termes par vocabulaire. Ensuite pour Vocabulaires J'ai vérifié les catégories.

PHEW! Finalement! Merci à vous tous ici de m'avoir pointé dans la bonne direction! Je ne pourrais pas expliquer pourquoi cela fonctionne, totalement, mais quoi qu'il en soit, je continuerai d'être employé.

1
seizethecarp

@kiethm a fourni la bonne façon d'aborder cela - Sous les filtres contextuels, vous devez sélectionner 'Nom' et pas 'ID de terme de taxonomie' puis définissez vos critères de validation à utiliser "Nom du terme de taxonomie".

1
flamesquirrel

Vous pouvez le faire en ajoutant du contenu: a un ID de terme de taxonomie dans le filtre contextuel, puis vous pouvez utiliser la taxonomie dans le contexte en ajustant les critères de filtre

enter image description here

0
Adi

J'ai réalisé cela dans Drupal-8 en prenant un filtre contextuel: de "Terme de taxonomie: Nom"

Fournissez ensuite la valeur par défaut Type ID de terme de taxonomie à partir de l'URL

Spécifiez ensuite les critères de validation suivants:

enter image description here

0
Rimi B