web-dev-qa-db-fra.com

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

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 un nœud B particulier référencé (nid: 123, titre: node-B-title).

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?

8
uwe

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. Sélection des valeurs du filtre de contexte à partir de l'URL
    • En règle générale, vous auriez un page vue à ces fins, celui qui a l'URL du formulaire foo/%/bar ou foo/bar/% pour un filtre contextuel unique OR de la forme 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 dire que faire si les valeurs de filtre ne sont pas non disponibles dans l'URL . Ceci est généralement utilisé pour vues de bloc.
    • Vous pouvez choisir parmi différentes actions, puis configurer également le choix. You can choose from different actions and then configure the choice too. asdfj kajsdf
  3. Une autre chose que les vues vous permettent est de dire que 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 basés sur des valeurs de filtre, validation de 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 modifier les valeurs de $ form dans les rappels de validation de formulaire drupal. enter image description here

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;
}
11
Sumeet Pareek

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

Utilisez PHP option validée 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
Eric Steinborn

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 type de nœud B) et à 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
squarecandy

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 Id Node (quelque chose comme ça).

1) Ajouter l'argument "Référence du 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 du nœud

Et c'est fait. :)

1
Eleo

Vieille question, mais trouvée via Google et j'ai pensé partager 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
Gerto

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?
0
DrCord