[Résolu] Drupal 7 et Views 3 : Comment récupérer le content:nid depuis une URL

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,
voici plusieurs jours que je penche sur mon problème et je ne trouve pas de solutions convenables.

Voila ma situation :

j'ai créé un type de contenu 'personnage' comprenant comme champs:
- Title (son nom)
- Body (sa description)
- Photos (permet d'ajouter autant de photos que l'on souhaite)

Avec Pathauto, j'ai créé un modèle pour que chaque noeud de type 'Personnage' soit situé sous l'url : http://monsite.fr/personnages/[node:title] (node:title correspond donc au nom de mon perso)

J'ai ensuite créé une vue qui génère le listing de tous les personnages à l'adresse : http://monsite.fr/personnages/
Et enfin, j'ai créé un template "node--personnage.tpl.php" pour l'affichage d'un personnage.
Ca, ca fonctionne impec.

Maintenant, dans mon template "node--personnage.tpl.php," j'ai ajouté des liens pour pouvoir consulter les photos de chaque personnage (j'aimerai faire une galerie à terme) :
http://monsite.fr/personnages/nom_du_perso/photos.

J'ai alors créé une vue qui se charge lorsque l'on se rend à l'URL http://monsite.fr/personnages/%/photos se charge, mais le soucis est qu'elle affiche toutes les photos de tous les personnages.

J'aimerai donc restreindre l'affichage aux photos du personnage "nom_du_personnage" présent dans l'url, mais je ne trouve pas comment faire.

J'ai lu plusieurs posts français/anglais qui mentionnent l'utilisation des filtres contextuels mais je ne saisis pas comment récupérer le nid à partir de l'alias.

Est-ce que quelqu'un saurait m'aider ?
En vous remerciant d'avance.

Version de Drupal : 

Bon j'ai finalement réussi à faire ce que je voulais faire, grâce au site suivant : http://peterpetrik.com/blog/node-id-view-argument-from-seo-friendly-url-...
Comme je suis sympa je partage pour éviter à d'autres de s'arracher les cheveux sur le problème.

Dans mon cas, je souhaitais récupérer le content:nid en fonction du node:title passé dans l'URL par l'intermédiaire de pathauto.

Donc dans les paramètres de ma vue :
- j'ai ajouté un CONTEXTUAL FILTER de type Content: Nid
- pour la section WHEN THE FILTER VALUES IS NOT IN THE URL, j'ai coché Show "Page not found"
- pour la section WHEN THE FILTER VALUES IS IN THE URL OR A DEFAULT IS PROVIDED, j'ai coché Specify validation criteria
- comme Validator, j'ai sélectionné PHP Code
- et j'y ai ajouté le code suivant (sans les balises <? php ?>):

<?php
// si le nid est déjà fourni ou bien l'argument est all
if (is_numeric($argument)) {
  return
TRUE;
}
elseif (
$argument == 'all') {
  return
TRUE;
} else {
 
// on récupère l'url sous la forme /node/xx
$path = drupal_get_normal_path(arg(0) . '/' . arg(1));
 
$path = explode('/', $path);
 
// On vérifie que l'url est bien de la forme /node/xx
// et on remplace argument par le nid (xx)
if ($path[0] == 'node' && is_numeric($path[1])) {
 
$handler->argument = $path[1];
  return
TRUE;
}
 
}
// Si le code n'a pas trouvé le nid, on retourne false
return FALSE;
?>

Après application du filtre et l'enregistrement de la vue, la page ne m'affiche bien plus que les photos correspondant au personnage visionné.