Nom du terme de taxonomie comme filtre contextuel pour la vue


18

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

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

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

J'ai maintenant mis en place 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 nom de terme comme D7. La fonctionnalité est-elle manquante ou dois-je configurer la vue différemment?


des nouvelles à ce sujet? J'ai le même problème
jeroen

Réponses:


20

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

Une solution de contournement du constructeur de site consiste à ajouter une relation , des termes de taxonomie sur le nœud, puis à ajouter un filtre de terme de taxonomie: nom aux filtres contextuels à l'aide de la relation susmentionnée. Vérification de la Spécifier les critères de validation case, définissez votre Validator à terme nom de taxonomie et cocher la case appropriée taxonomie de filtre.


12
Piège du constructeur de site dans l'interface utilisateur du filtre contextuel D8 add: le titre du filtre contextuel est «Nom» et la catégorie est «Terme de taxonomie». La recherche de «taxonomie» ne répertoriera pas ce filtre, car seuls le titre et la description sont recherchés, pas la catégorie.
keithm

1
De plus, vous pouvez remplacer le titre avec {{ arguments.name }}dans les paramètres du filtre contextuel.
cptstarling


3

Juste 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;
      }
    }
  }
}

2

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 une valeur par défaut», «Valeur brute de l'URL». Sélectionnez toutes les autres options adaptées à vos besoins.
  • Sous «Lorsque le filtre est disponible ou qu'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!


1

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


2
J'ai le même problème décrit dans cette question, pouvez-vous être plus clair. J'ai déjà défini une relation, mais le filtre contextuel ne fonctionne qu'avec tid au lieu du nom du terme. Bien sûr, nous parlons de D8. Merci d'avance.
Vagner

1

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


1

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 créer des liens d'images contextuelles dans "Panel first col 1" en fonction de la catégorie de la page sur laquelle quelqu'un se trouve. Ce que j'ai fait était d'aller dans Structure> Vues> Carrousel (la vue qui a les images dans cette région de bloc)> Avancé> Ajouter par des filtres contextuels> A un ID de terme de taxonomie> sélectionnez dans Fournir une valeur par défaut: ID de terme de taxonomie à partir de l'URL (qui a fait pas de 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 les vocabulaires, j'ai vérifié les catégories.

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


1

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)


0

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

entrez la description de l'image ici


Vous avez pris une capture d'écran d'une installation D7. En D8, il n'y a pas de validateur "Terme de taxonomie". Au lieu de cela, il y a "ID de terme de taxonomie" ou "Nom de terme de taxonomie" qui n'acceptent pas tous les deux le nom de taxonomie de l'URL. Ils n'acceptent que l'ID.
gbyte.co

0

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:

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.