Inclure vue avec argument dans node-custom.tpl

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,

J'ai une vue avec argument que je voudrais inclure dans un node-custom.tpl via php, mais je ne sais pas comment faire avec les arguments.En effet la vue change selon le tid d'un certain vid,voici le code de depart :

  <?php

$viewname = 'liste_autres_vdl';
$view = views_get_view ($viewname);
$view->set_display('block_1');
$view->args = array("2");array($node-> tid);

//Exécution de la vue
$view->pre_execute();
$view->execute();

if ($view->result) {
 
// S'il y a un resultat on récupère le titre (ajoute tag h3, et le contenu)
 
$output = '<div id="ac"><h3>'.$view->get_title().'</h3>' . $view->render().'</div>';
}

//Affiche la vue
print $output;

?>

Comment faire pour que la vue récupère le bon tid ?
Merci

Forum : 
Version de Drupal : 

j'ai regardé le lien que tu me donnes, et j'ai essayé ceci avec mon code, mais j'ai pas l'impression que ça marche.

<?php  if (
$node->field_liste_autre_vdl[0]['view']
):
?>

<div id="bloc_vdl_autres_evenements">
      
    <?php

$viewname = 'liste_autres_vdl';
$view = views_get_view ($viewname);
$view->set_display('block_1');
$args = array($node-> tid);
$view->set_arguments($args);

//Exécution de le vue
$view->pre_execute();
$view->execute();

if ($view->result) {
 
// S'il y a un resultat on récupère le titre (ajoute tag h3, et le contenu)
 
$output = '<div id="ac"><h3>'.$view->get_title().'</h3>' . $view->render().'</div>';
}

//Affiche la vue
print $output;

?>
</div>
<?php endif;?>

j'ai besoin au final de récupérer le tid d'un vocabulaire et de l'utiliser comme argument pour la vue...facile à écrire mais moins à réaliser pour moi

Mais tu n'utilsie pas la function views_get_view_result.
J'aurais fait quelque chose dans ce genre :

<?php
$viewname
= 'liste_autres_vdl';
$view = views_get_view_result($viewname, 'default', $node-> tid)

if (!empty($view)) {
 
// S'il y a un resultat on récupère le titre (ajoute tag h3, et le contenu)
 
$output = '<div id="ac"><h3>'.$view->title.'</h3>' . $view->render().'</div>';
}

//Affiche la vue
print $output;

?>

Je l'ai utilisé pour une fonction et j'ai récupérer tout les éléments de la vue correspondant au arguments.

ça ne marche pas non plus...ça casse la page...j'ai essayé ceci:

<?php
$viewname
= 'liste_autres_vdl';
$view = views_get_view_result($viewname, 'block_1', $node-> tid);

if (!empty(
$view)) {
 
// S'il y a un resultat on récupère le titre (ajoute tag h3, et le contenu)
 
$output = '<div id="ac"><h3>'.$view->title.'</h3>' . $view->render().'</div>';
}

//Affiche la vue
print $output;
?>

par contre ceci semble etre ok, mais il manque le titre..

<?php
 
print views_embed_view('liste_autres_vdl','block_1',$view_args);
?>

bon je tente de récupérer le bon tid afin de le passer en argument de la vue...

<?php
 $viewname
= 'liste_autres_vdl';
$view = views_get_view ($viewname);
$viewdisplay = $view->set_display('block_1');

$lesVid=array('2');//vid = 2 , type d'evenement

// on recupere le vid (taxonomie) et l'on verifie si c'est celui voulu
       if ( ! empty($node->taxonomy)  ) {
// Récupération du 1er element du tableau
          
$term = array_shift($node->taxonomy);
   
// verifie si l'un des termes appartiennent bien à l'un des vid définis dans le tableau
          
if ( in_array($term->vid,$lesVid) ) {
              
$args = $term->tid;
              
$view->set_arguments($args);
              
$output = '<div id="ac"><h3>'.$view->get_title().'</h3>' . $view->preview($viewdisplay, $args).'</div>';
               if (!empty(
$view->result)) {
  print
$output;
}
           }
       }
?>

mais cela ne fonctionne pas...il affiche des contenus avec des tid differents..alors qu'il devrait afficher des contenu ayant le meme tid..

EDIT : trop mortel ça marche !!! en fait mes contenus etaient mal taggués (devel generate inside) donc aprés correction ça roule...reste plus qu'a déployer aux autres types et bien sur en prod...

je ne comprends pas trop le probleme, le preview me donne le bon resultat et le code insérer trouve un résultat vide et n'affiche donc rien...la vue est bonne, les arguments aussi...ça fonctionne sur un site et pas sur un autre,avec la même vue et la même architecture...là je suis planté