Voici un petit billet pour vous montrer qu’il est simple d’exporter vos vues créées depuis l’interface d’administration directement dans vos modules. Pourquoi ? Simplement pour ne pas laisser le code dans la base de données et pour avoir une copie de celui-ci quelque part dans des fichiers bien au chaud.

Avant toute chose, sachez qu’il existe presque toujours une solution afin d’exporter ce que vous avez fait sur le site dans un module, pour cela vous pouvez utiliser l’API d’un module, un autre module dédié à l’export ou encore utiliser le module Features qui permet d’exporter pas mal de choses en quelques clics. Pour si peu, j’avoue que je préfère mettre ça dans un module et puis de toute façon je ne suis pas un grand fan de Features.

Le code ci dessous est basé sur views 3 et Drupal 7 mais il est semblable à ce que l’on pouvait trouver avec la version 6. Pour cet exemple j’ai crée un module Drupal nommé sandbox dans lequel j’ai ajouté un fichier sandbox.info et sandbox.module.

Première étape : Préparation de notre module l’api de Views

La première étape consiste à se faire connaître auprès de views en invoquant son API, dans notre cas la dernière version, la 3.

/**
* Implements hook_views_api().
*/
function sandbox_views_api() {
 return array(
   'api' => 3,
 );
}

Pour une question de lisibilité et pour mieux nous y retrouver dans nos fichiers, créez un nouveau répertoire nommé views à la racine de votre module dans lequel nous placerons par la suite toutes les vues que nous exporterons.

Créez un nouveau fichier portant par exemple le nom de votre vue et l’extension “.inc” (ex : ma_gestion_des_articles.inc), ouvrez le et placez y la balise d’ouverture PHP (

Chaque vue aura ainsi son propre fichier de configuration.

Deuxième étape : Exporter vos vues.

L’exportation d’une vue se fait directement depuis l’interface d’administration de views (admin/structure/views). Cliquez sur le lien “exportez” qui se trouve dans le petit menu d’édition à droite dans la catégorie “opérations” de chaque vue. A ce moment là, votre page se recharge vous mettant face à votre export. Copiez le code, collez le dans le fichier que nous avons crée à l’étape précédente puis sauvegardez le.

Voila, vous avez exporté une copie de sauvegarde de votre vue mais pour le moment Views ne sait pas encore qu’elle existe.

Troisième étape : Indiquer à Views où trouver les fichiers d’export de nos vues.

Dans un nouveau fichier sandbox.views_default.inc à la racine de notre module nous allons créer un petit bout de code qui va nous permettre de scanner automatiquement notre repertoire afin d’indiquer à Views où sont stockés nos fichiers d’export.

/**
* Implements hook_views_default_views().
*/
function sandbox_views_default_views() {
 static $views;

 if (isset($views)) {
   return $views;
 }

 // Remplacer le nom de mon module “sandbox” par le nom de votre module.
 $files = file_scan_directory(drupal_get_path('module', 'sandbox') . '/views', '/\.inc$/');
 foreach ($files as $filepath => $file) {
   include $filepath;
   if (isset($view)) {
     $views[$view->name] = $view;
   }
 }
 return $views;
}

A partir de maintenant, Views est capable de venir lire dans ce répertoire et de charger les vues sur votre site. Vous pouvez ainsi stocker une copie de chacune de vos vues, ce qui vous sera pratique si vous voulez installer votre module sur plusieurs sites.

La mise à jour d’une vue ?

Une vue ça vit et, même si vous l’avez exportée dans un module, vous pouvez encore effectuer des modifications sur celle-ci depuis l’interface d’administration des views, elle passera alors dans un état “surchargée”. Notez que si vous la modifiez, elle ne sera plus identique à celle que possède votre module, n’oubliez donc pas de l’exporter à nouveau dans votre module. Néanmoins pour views, la vue à utiliser est toujours la copie qu’il a créée lorsque vous avez sauvegardé vos modifications. Pour revenir à la version qui se trouve dans votre module, vous devez cliquer sur le lien “revert view”.

5 Responses to Exporter vos views dans vos modules

Avatar

Netmee

janvier 20th, 2012 at 20 h 13 min

Super article. Je partage ta vision sur le coté plus light de cette solution face à Features. D’un autre côté Features permet quand même de créer un module plus complet et homogène comprenant en plus des vues, des contents types et des variables associées à la vue.
Je pense que c’est vraiment une question de taille de projet qui fera la différence entre cette solution et Features.
En tout cas merci pour cette astuce.

Avatar

Julien

janvier 23rd, 2012 at 9 h 57 min

Il faut reconnaître quand même un avantage à Features, c’est de réunir en un seul module la possibilité d’exporter plusieurs choses facilement, mais pour moi ce module reste quand même une grosse usines.
Je ne pense pas que ça dépende de la taille du projet, je pense que c’est une question de besoin. Le plus dur avec Features c’est de bien découper les modules exportés afin qu’il n’y ait pas de dépendances entre eux. Pour avoir essayé par le passé sur de gros projets, je dois dire que c’est compliqué sur de gros projets.

Avatar

opi

janvier 26th, 2012 at 12 h 23 min

Merci pour l’article, spécialement l’astuce du parcours d’un repertoire ‘views’, à la recherches des ‘myviews.inc’

Note que pour Drupal 6 ca fonctionne, a la difference sur le masque à utiliser pour file_scan_directory(). (Le format à changé : http://api.drupal.org/api/drupal/includes–file.inc/function/file_scan_directory/6#comment-1818)

Ca devient donc:

 $files = file_scan_directory(drupal_get_path('module', 'sandbox') . '/views', '.inc');

Et il faut penser aussi a changer la version de l’API, car en D6 c’est généralement la version 2.

Avatar

Djims

janvier 31st, 2012 at 18 h 21 min

Superbe article.
Mais une qustion : Je voudrais qu’à l’installation de mon module, la views soit crée automatiquement de meme que le type de contenu.
Pour le type de contenu, pas de souci, j’y arrive et en suivant cet article, j’ai exporté la view mais elle ne se crée pas automatiquement ou du moins, je ne retrouve pas dans views.
Une idée?

Avatar

Julien

février 7th, 2012 at 10 h 00 min

Normalement en suivant ce code la vue est disponible dans l’interface d’administration de views. Peut-être qu’il te faudrait vider le cache de Drupal et vérifier l’implémentation de chacune de ces fonctions.

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

  • Julien: Bonjour Apparemment D7 encode par défaut les e-mails au format "plain text", voici un lien qui e [...]
  • minh khue: Salut Julien. J'ai suivi votre blog et vos postes sur Drupal. C'est génial. Je souhaite demander s [...]
  • Polguy: Merci Julien de ta réponse. J'ai bien remarqué qu'il fallait modifier le paramétrage de db_query [...]
  • Julien: Bonjour Polguy, Effectivement ce n'est pas précisé mais il s'agit d'un bout de code pour Drupal [...]
  • Julien: Normalement en suivant ce code la vue est disponible dans l'interface d'administration de views. Peu [...]