Comment utiliser le titre du nœud ou l'alias de chemin au lieu de l'identifiant du nœud dans le filtre contextuel de référence de nœud dans les vues?


8

J'ai le nœud A avec une référence de nœud au nœud B.

Dans une vue, je montre tous les nœuds A qui ont référencé un nœud particulier B (nid: 123, titre: nœud-B-titre).

Au lieu d'utiliser le nid dans le filtre contextuel, je voudrais utiliser le titre du nœud. Par exemple, au lieu de:

view-name/123

Je voudrais utiliser

view-name/node-B-title

Comment pourrais-je faire ça?

Réponses:


11

J'ai eu un problème très similaire et je n'ai pas seulement trouvé la solution, mais j'ai également appris de nouvelles choses sur le fonctionnement de la vue. Permettez-moi de partager ce que j'ai appris et la solution à votre problème aussi.

Lorsque vous créez une vue avec un ou plusieurs filtres contextuels, la vue doit recevoir les valeurs de ces filtres quelque part. Cela peut être fait par -

  1. Choisir la ou les valeurs de filtre de contexte dans l'URL
    • Généralement, vous auriez une vue de page à de telles fins qui a l'URL du formulaire foo/%/barou foo/bar/%pour un filtre contextuel unique OU du formulaire foo/%/bar/%ou foo/bar/%/%pour plusieurs filtres
    • Si vous avez plusieurs filtres, la valeur d'URL qui apparaît en premier est mappée sur le premier filtre, à côté du deuxième filtre, etc.
  2. Les vues vous permettent de savoir quoi faire si les valeurs de filtre ne sont pas disponibles dans l'URL . Ceci est généralement utilisé pour les vues de bloc .
    • Vous pouvez choisir parmi différentes actions, puis configurer également le choix. Vous pouvez choisir parmi différentes actions, puis configurer également le choix. asdfj kajsdf
  3. Une autre chose que les vues vous permettent est de dire quoi faire avec les valeurs de filtre si elles se trouvent dans l'URL comme décrit au # 1 ci-dessus. Les cas d'utilisation typiques sont les suivants: création de titres dynamiques en fonction des valeurs de filtre, validation des valeurs de filtre, etc.
    • Lors de la validation des valeurs de filtre, vous pouvez également modifier les valeurs! (C'est là que se situe notre solution). Cela ressemble beaucoup à la façon dont nous pouvons changer les valeurs de $ form dans les rappels de validation de formulaire drupal. entrez la description de l'image ici

La solution à votre problème spécifique consiste à utiliser un code très similaire dans les sections pointées par les flèches dans l'image ci-dessus.

Ce lien s'est avéré d'une grande aide pour moi. En voici un extrait:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

Cela n'a pas fonctionné pour moi, mais a plutôt provoqué une erreur ajax dans la vue lors de l'enregistrement.
DrCord

1

Cela ne fonctionnera pas dans toutes les circonstances, mais une approche du problème dans la question consiste à utiliser l'affichage du nœud réel du nœud B (ou du type de nœud B) et de définir son chemin comme vous le souhaitez avec le chemin ou le module pathauto. Utilisez ensuite le bloc de vues pour ajouter la relation de contenu et la vue que vous souhaitez.

Utilisez un filtre contextuel sur NID, puis définissez Provide default value > Content ID from URL. Ajoutez ensuite le bloc de vues à votre page ou ensemble de pages.

Si votre contexte vous permet d'utiliser un bloc de vues sur le nœud lui-même et non une page de vues, cela facilitera considérablement l'obtention du chemin et des vues que vous souhaitez.


1

J'ai modifié la réponse acceptée, mais je voulais ajouter le code réel ici:

Utilisez l'option validée PHP sous les options de validation dans le filtre contextuel.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

L'argument de vue doit être la référence de champ du type de contenu, puis sélectionnez l'option "Fournir un argument par défaut" et cochez l'option Noeud Id (quelque chose comme ça).

1) Ajouter l'argument "Référence de champ X" 2) Vérifier l'ID du nœud à partir de l'URL (ajouter l'argument par défaut) 3) Dans la section de validation, vérifier le type de contenu du nœud, et lors de la configuration "Type de nœud" sélectionner "ID de nœud

Et c'est fait. :)


"ID de contenu de l'URL" donne uniquement le nid. Si j'utilisais une référence de terme, je pourrais utiliser des "critères de validation" avec "le nom du terme converti en ID de terme". Pour la référence de nœud, il n'y a pas d'option similaire pour traduire le titre en nid. Probablement parce que les titres ne sont pas nécessairement uniques.
uwe

Oui est correct, mais est nécessaire l'argument doit être la référence du champ (nid), essayez cela.
Eleo

1) Ajouter l'argument "Référence de champ X" 2) Vérifier l'ID du nœud à partir de l'URL (ajouter l'argument par défaut) 3) Dans la section de validation, vérifier le type de contenu du nœud, et sur la configuration "Type de nœud" sélectionner "ID de nœud"
Eleo

L'URL réelle peut avoir le nid, et l'alias de chemin peut être le titre du nœud. Cela fonctionne, n'est-ce pas?
SGhosh

0

Vieille question, mais trouvée via Google et pensé que je partagerais ma solution pour toute autre personne qui la trouverait à l'avenir:

Il y a maintenant un module nommé safeword qui fait exactement ce que Sumeet Pareek a suggéré: (automatiquement) crée un champ convivial pour les URL.


0

Je recommanderais le module Extended Path Aliases (path_alias_xt) . Il résout ce problème uniquement en étant installé sans configuration, c'est essentiellement magique, apparemment. : D Pas vraiment, mais l'extrait de la page du module vante la façon dont vous venez de l'installer et il résout ce problème et d'autres, mais n'entre pas dans la façon dont le module le fait dans les coulisses ... O, eh bien, nous pourrions toujours lire le code: D Il ne mentionne pas spécifiquement la fixation des chemins des vues, mais je l'ai utilisé pour le faire et cela fonctionne parfaitement.

Liste des problèmes qu'il résout, à partir de la page du module:

  • Vous êtes-vous déjà demandé pourquoi, après avoir défini un alias comme about-us pour, disons, node / 123, vos pages sont toujours criblées de ces horribles onglets et liens générés par la machine comme / node / 123 / edit, node / 123 / revisions, etc. .?
  • De même pour les liens / taxonomy / term /% et / user /%: vous attendiez-vous à voir / dries / track mais vous avez / user / 5 / track?
  • Trouvez-vous que la barre d'adresse de votre navigateur affiche également ces chiffres laids au lieu de vos alias?
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.