Jouer avec views

Onglets principaux

La documentation Drupal 6 n'est plus maintenue et en cours de dépublication.

La plupart des choses présentées ici sont expliquées dans la doc de views en anglais : http://views-help.doc.logrus.com

Si l'anglais ne vous pose pas de soucis, allez y faire un tour, ça sera toujours plus précis.

Sauver une vue dans un module

La première chose à faire est d'implémenter dans votre module le 'hook_views_api' pour dire à votre module quelle version de l'API de views il doit utiliser

<?php
// Implementation of hook_views_api
function mymodule_views_api() {
  return array(
'api' => 2.0);
}
?>

Ensuite, grâce au module 'views_export' (présent dans views) il faut exporter votre vue après l'avoir créée à la main.

Dans votre module créer un fichier : mymodule.views_default.inc dans lequel vous allez implémenter le hook 'hook_views_default_views' et coller à l'intérieur le code exporté de votre vue.

Si vous exportez une seule vue, il faut rajouter un peu de code à la fin :

<?php
// Implementation of hook_views_default_views
function mymodule_views_default_views() {

// Le coller de votre export

 
$views[$view->name] = $view;
  return
$views;
}
?>

Quelques remarques

Une vue définie à la main dans l'interface d'admin est stockée en base de données. Il est possible de la supprimer.

Une vue définie dans un module n'est pas stockée en base (sauf cache) mais dans le fichier. Il est possible de la désactiver.

Ainsi si on modifie le fichier et supprime le cache drupal, la vue sera automatiquement modifiée.

Si une vue définie dans un module est ensuite modifiée via l'admin, elle sera alors stockée en base de données.
Il est possible de revenir à la vue du fichier grâce à un lien dans l'admin de view.

Remplacer une vue déclarée par un module

Quand une vue ne nous plaît pas, on a tendance à la cloner ou à la modifier directement dans l'admin. Mais à moins de changer certaines informations critiques (le chemin pour accéder à la vue etc...) la vue d'origine et la nouvelle peuvent rentrer en conflit.
C'est particulièrement vrai pour la vue taxo.

On peut bien sur désactiver la vue à la main dans l'admin mais dans le cadre d'un déploiement en production, il serait mieux que ce genre de choses soit fait à l'installation de notre module custom.

Voici donc un petit bout de code à mettre dans la fonction hook_install du fichier mymodule.install

<?php
 
// disable a view
 
$views_status = variable_get('views_defaults', array());
 
$views_status[VIEWNAME] = TRUE; // True is disabled
 
variable_set('views_defaults', $views_status);
 
views_invalidate_cache();
 
menu_rebuild();
?>

Modifier une vue déclarée par un module

Une autre solution possible est de modifier la vue via un hook comme un formulaire.
Le hook en question est : hook_views_default_views_alter

<?php
function mymodule_views_default_views_alter(&$views) {
  if (isset(
$views['taxonomy_term'])) {
   
$views['taxonomy_term']->set_display('default');
   
$views['taxonomy_term']->display_handler->set_option('title', 'Categories');
  }
}
?>