view : créer une requete avec des liens croisés

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,
Mon problème : récupérer une requête avec des liens croisés

j'ai une page "emission" créée par view.
j'affiche la page (composée de différentes variables) en fonction d'un argument qui est le titre de l'émission. jusque là tout va bien.

Je dois créer un fichier attaché qui doit me lister tout les évènements (contenu agenda) créés par l'animateur de l'émission.

qu'est ce qui lie l'émission (l'argument node title) et l'animateur ?:

Dans la construction du contenu "emission" il y a un "user reference" qui fait référence à l'animateur.

Mais comment, à partir de l'argument, je descends au niveau de l'animateur ?
merci pour votre aide.

Version de Drupal : 
Tags : 

Salut zorax,

Si j'étais toi, je m'y prendrais autrement :

  • Tu dis que tu as une page émission créée par Views. J'imagine que tu as un type de contenu "émission". Autrement dit, tu as une vue qui n'affiche qu'un seul noeud (une émission).
    Si c'est le cas, quel est l'intérêt de faire une vue ? Une vue est censée être une liste de noeuds. Si tu veux n'afficher qu'un seul noeud, utilise plutôt la page de noeud standard (à l'adresse du style node/34).

  • Une fois que tu utilises la page standard, dans le template des noeuds "émission" (node-emission.tpl.php), tu incrustes une vue qui liste les évènements créés par l'utilisateur X. L'identifiant de l'utilisateur X sera l'id de l'animateur qui est disponible sous forme de variable dans ton template :

    <?php
     
    print views_embed_view('nom-de-ta-vue', 'default', $node->animateur[0]['uid']);
    ?>

C'est vrai c est une bonne idée et la vue que tu a tu ajoute au valeur par defaut un block avec tes donneés pour le gerer comme un block.Javai pas compris je pensais ke selon le titre de l emission tu aller chercher plein de node.

Sinon Vincent j'avais une question pour toi si tu a une réponse car j ai remarqué ke tu était tres actif j aurai besoin de ton aide sur un sujet.

Merci pour vos réponses,
alors oui j'ai un type de contenu "émission".

oui j'ai une vue qui affiche qu'un seul noeud (une émission).
par contre pour compléter cette vue il me faut rajouter des variables connexes :

Podcast : emission déjà diffusée (fichier attaché)

descriptif de l'animateur : sa photo, texte (fichier attaché)

ce qui coince c'est donc l'agenda de l'animateur, et les derniers billets de l'animateur qui fonctionne si l'argument est le nom de l'animateur, mais pas avec le nom de l'émission. C'est le lien entre les deux que je pensais pouvoir récupérer dans la requête.

Non justement toi dans ta vue tu doit construire l agenda de l animateur selon a argument.Puis tu va dans ton template node.tpl.php et tu apelle ta vue apres avoir recupere l argument ke tu va lui passé ki est dans ton fameux noeud.

Tu peu pas avoir deux argument dans ta vue et lui dire bon bah avec le premier tu me construi ma page emission et avec le 2 ieme tu va me chercher l agenda de l animateur.surtout ke le 2 ime argument dans ton cas tu le recupere dans ta page.A ma connaissance tu peu pas.

Il faut ke t apelle ton node normalement pas de vue
et ta vus construit l agenda en se servant de l argument animateur.Et dans ton template node-emission.tpl.php.tu apelle la vue ki te construit le truc de l animateur.

Tu comprend??

j'ai donc opté pour ton approche.
j'ai fait une vue "emission_anim" sous forme de bloc avec comme argument "Utilisateur :uid", dans paramètre de bloc je l'ai nommé "emission_anim".

J'ai attaché à ce bloc un fichier attaché "agenda" : pareil l'argument etant "Utilisateur :uid".
en prévisualisation, si je tape 3 (uid utilisateur) : j'ai bien l'ensemble des infos (des deux fichiers attachés) , jusque là tout va bien.

ensuite j'ai créé le fichier node-emission.tpl.php :
j'ai enlevé

<?php
 
print $content 
?>

, ok j'ai plus rien lorsque je demande d'afficher une page emission, et je rajoute :

<?php
 
print views_embed_view('emission_anim', 'default', $node->animateur[0]['uid']);
?>

mais ça ne fonctionne pas , rien apparait....
je pense que c'est le nom de l'argument qui va pas "animateur". Car j'ai pas de type de contenu "animateur". Un animateur c'est juste un utilisateur (user)avec un role..j'ai mis user à la place mais ça fonctionne pas plus.

j'ai essayé de faire la même chose avec le reste des donnée qui m'interesse : podcasts, photos..sur le même principe de fichier attaché à un bloc (emission) dans view. Seulement comme argument j'ai mis "Node : Titre".
Puis j'ai rajouté dans le template de noeuds :

<?php
 
print views_embed_view('emission', 'default', $node->emission[0]['title']);
?>

rien n'apparît non plus, j'ai du rater quelquechose....pourtant là j'ai bien un type de contenu "emission"

Pour tester, commence par mettre en dur l'identifiant d'un animateur :

<?php
print views_embed_view('emission_anim', 'default', 45);
?>

Si ce code marche, c'est la variable dans laquelle tu vas chercher l'animateur qui n'est pas bonne. Dans ce cas, installe le module "Themer Info" pour découvrir le nom de toutes les variables à ta disposition dans le template node-emission.tpl.php.

Si ça ne marche pas, c'est ta vue qui n'est pas bonne.
T'as bien identifié que 'emission_anim', c'est le nom de la vue ? (pas son chemin). Par ailleurs, 'default' c'est l'affichage que tu veux utiliser. Puisque tu as une vue en bloc, faudrait ptêtre mettre 'block_1' à la place de 'default'.

Sinon va dans ton template de node tu met var_dump(node_load($node->nid).
Avec ça tu aura toute tes infos dans un objet. Regarde lakel tu veut.il te remontera MM. Tes champs CCk avec cette méthode. Si ton uid n y est pas tu doit le récupérer autrement.

Si c est un user id c est normal kil soit pas ds ton node il est en session . Ou bien c est l auteur du node ke tu veut.La clé est la.

Qu est ce ki lie ton animateur a ton node.???
Tu parle du user_id genre le mec ki est loguer.
Je vois plus trop la

Alors j'ai mis effectivement la variable en dur :

<?php
 
print views_embed_view('emission_anim', 'block_1', 3);
?>

mais ça change rien...
ensuite ce qui li l'émission à l'animateur c'est un node reference.
voilà ce qu'il me sort avec node_load :

["title"]=> string(6) "Gospel"

["field_emission_anim"]=> array(1) { [0]=> array(1) { ["uid"]=> string(1) "3" } }

l'argument "title" pour mon bloc "emission"

l'argument "field_emission_anim" pour mon bloc "emission_anim"

comment formuler tout ça ?

Donc : c'est ta vue qui n'est pas bonne. Retravaille ta vue avant de l'embedder. Teste-la dans l'admin en saisissant des arguments dans le champs "Arguments" et vérifie que tu obtiens bien les bons résultats...

Ta vue n'est pas prêt à être embeddée.

oui alors la on voi bien ke avec le node load tu recupere ton uid.Mais comme te dit vincent si en la passant en dure tu n a rien alors ta vu n est pas bonne.Kan tu creer ta vu tu peu la tester dans l admin et voir un appercu si tu n a pas de resultat en swchant d argument c est que t a un pb dans ta vue

une fois que ta vue est regler tu met pour ton bloc emmision anim kan tu embed ta vue l argument comme ci dessous

<?php
$noeud
= nodeload($node-nid);
$anim = $noeud->field_emission_anim[0]["uid"];
print
views_embed_view('emission_anim', "block_1", $anim);
?>

merci encore, malheureusement je n'y suis pas encore....

je pense qu'on fait fausse route sur les vues :

Dans les vues des 2 blocs, quand je change d'argument dans la prévisualisation ça fonctionne pour les deux vues!

bloc "emission" je rentre "gospel", j'ai bien les photos, les podcasts..

bloc "emission_anim", je rentre "3", j'ai bien l'agenda de l'animateur et ces billets.
j'ai une hésitation sur le nom du bloc. Je dois bien reprendre dans mon code celui paramétré dans ma vue dans "paramètres du bloc", Admin ?

je penses que c'est plutôt dans la formulation du php le hic.

Momo, ton code ne fonctionne pas il me renvoie une erreur sur la définition de variable $noeud.
Sinon tu mets des guillemets pour uid alors que met des apostrophes.

Si ta vue marche c est ke dans ton template tu n appel pas correctement ta vue

Kan tu apelle une vue avec cette methode tu appel toute la vue bas le block k il y a dedans, tu apelle la vue par defaut.Donc ce que tu a mis c est normal que ca marche pas
je l ai deja fait c est comme ca

<?php
 
echo views_embed_view('NOM_DE_TA_VUE','default', $tonarg);
?>

en somme tu doit mettre default en 2 ieme param le premier param c est le nom de ta vue et le troisieme ton arg.

Toi tu utilise block!!! ca ca marcherai mais avec un module_invoke.pour appeler un block c est une autre methode avec plus de param et il n y a pas d arguments.

Bref utilise exactement ce ke je t ai mis la haut et j espere que tu a bien mis chacun de tes block dans une vue differente.Si oui alors le code ci dessu n apas de raison de foirer

Essaye avec un arg en dure comme te la suggerer vincent

oui car une vue tu peu l appeler mais pas le block dedans.Meme sui tu arrive a l appeler avec la methode module_invoke, un block n a pas d arguments donc pour ton cas a koi bon?

une Vue par block et view_embed_view marchera avec default en deuxieme param.

ca y est, j'y suis.
Alors ce qu'il se passait c'est que mes vues étaient composées de fichiers attachés, et de ce fait ça ne fonctionne pas. Il ne faut surtout pas non plus créer des blocs dans la vue, juste utiliser les paramètres par défaut!!
voici les deux lignes qui fonctionnent dans le template :

<?php
 
print views_embed_view('emission_podcasts', 'default', $node->title);
?>

<?php
 
print views_embed_view('emission_blog', 'default', $node->field_emission_anim[0]['uid']);
?>

merci encore à vous deux !!

Je l avai fai mais avec la méthode view_embed_view tu n a accès ke a tes valeur par défaut. Et puis j ai été un peu bête a quoi bon ajouter un block ou un fichier attache si tu a déjà tes données. Tan mieu si ça marche enfin