Lorsque l’on crée une vue il est possible de créer différents affichages (défaut, page ou encore bloc) mais il n’est pas possible d’intégrer votre vue dans une page à un endroit spécifique. Pour cela il existe des modules comme insert_views qui permettent d’insérer une vue dans une page en ajoutant une simple ligne de code. Le problème est qu’il faut faire attention à chaque fois que vous éditez votre page que votre vue fonctionne toujours surtout si vous utilisez un éditeur Wisywig.
Il existe sinon une autre solution, qui consiste à intégrer votre vue en Php.

Je passe la partie création du module, mais pour réaliser ce qui suit il vous faut l’avoir crée.

Nous allons utiliser la fonction views_embed_views($name, $display_id = ‘default’) qui n’a besoin que d’un seul paramètre (nom de la vue) pour fonctionner.

$viewname = 'MY_VIEW_NAME' ;
print views_embed_view ( $viewname );

Le code ci-dessus nous permet d’afficher la vue portant le nom MY_VIEW_NAME

En lisant la fonction views_embed_views on s’apercoit que celle-ci autorise un deuxième paramètre ($display_id) qui gère l’affichage (exemple : default, page, block, etc) et va nous permettre de choisir le format de sortie.
Bien souvent, lorsque l’on crée une vue c’est pour afficher des résultats variables selon un paramètre comme une liste en fonction d’un terme de taxonomie. Ainsi pour passer un argument à notre vue nous allons ajouter un troisième paramètre à notre fonction.

$viewname = 'liste_des_cours' ;
$display = 'page';
$view_arg = array('economie');
print views_embed_view ($viewname, $display , $view_arg);

Il ne vous reste plus qu’à choisir ou intégrer cette vue.

Ce que nous venons de voir est facile à mettre en place pour afficher le contenu d’une vue, mais cela ne nous laisse que très peu de contrôle sur notre vue. Par exemple views_embed_views n’affichera pas le titre que vous aurez saisi dans votre vue.

Pour aller plus loin nous allons utiliser la fonction views_get_views($name, $reset = FALSE) qui va nous permettre d’accéder à plus d’information.

  $viewname = 'economie';
  $view = views_get_view ($viewname);
  $view->set_display('block_1');
  $view->args = array(12, 14, 78);

  //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 et le contenu
    $output = $view->get_title() . $view->render();
  }

Comme toujours il existe pas mal de fonctions et de possibilités pour générer une vue, dans la majorité des cas la première solution est la plus utilisée.

4 Responses to Intégration de view via php

Avatar

selinav

novembre 15th, 2009 at 22 h 18 min

merci pour le tuto.

Où peut-on obtenir la liste des paramètres à affecter à notre vue?

Avatar

Julien

novembre 15th, 2009 at 23 h 30 min

Je n’ai pas trouvé de liste des paramètres possibles. Si tu la trouves je suis preneur.

Si tu veux, tu peux afficher la variable $view soit avec un dsm [ dsm(v$iew); ] soit avec un print_r [ print_r($view), ] et tu obtiendra tout les paramètres de l’objet view. Il ne te restera plus qu’à jouer avec les options et valeur qu’il existe en prenant modèle sur la partie ‘ajout de paramètre à la vue’.

La suite bientôt !

Avatar

Anthony

décembre 17th, 2010 at 0 h 00 min

salut,

petite erreur dans le 3ème code :
$viewname déclaré, $view_name appelée ensuite.

Avatar

aiphes

juin 9th, 2011 at 14 h 44 min

Bonjour

Je cherche à utiliser tes astuces sur un code similaire,afin de faire en sorte que la vue utilise l’argument paramétré : le nid fourni par l’url.Mais sans succès.

http://drupalfr.org/forum/support/developpement/27183-views-affiche-contenu-relatif-avec-argument

Merci

Comment Form



About me

about me

Bienvenue sur mon blog. Sur cet espace j’essaie de partager au mieux ma passion pour le web et actuellement mon engouement pour Drupal. Vous trouverez ici mes découvertes, mes problématiques et les solutions rencontrées.

I am going to DrupalCon London!

Commentaires

  • opi: Merci pour l'article, spécialement l'astuce du parcours d'un repertoire 'views', à la recherches d [...]
  • Julien: Il faut reconnaître quand même un avantage à Features, c'est de réunir en un seul module la poss [...]
  • Netmee: Super article. Je partage ta vision sur le coté plus light de cette solution face à Features. D'un [...]
  • Pascal H: Bonjour, je viens de découvrir Drupal et, quelques lectures plus tard votre blog. Félicitation [...]
  • Gilles: Merci pour cet article très intéressant. Je m'intéresse à l'externalisation de la saisi pour fa [...]