Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Écrire des fichiers .install

Référence en anglais sur drupal.org : 20 octobre 2008 - 05h07
http://drupal.org/node/323314


Le fichier .install est exécuté la première fois que le module est activé, il est utilisé pour lancer les procédures de paramétrage requises par le module. La tâche la plus courante est de créer les tables dans la base de données. Le fichier .install n'a pas de syntaxe particulière. Il s'agit simplement d'un fichier PHP avec une extension différente.

Les fichiers .install sont également utilisés pour effectuer les mises à jour requises par une nouvelle version de module.

Instructions

Les instructions d'installation sont placées dans une fonction _install(). Le hook est appelé quand le module est activé la première fois. Un nombre quelconque de fonctions peut y être placé, mais l'utilisation la plus courante consiste à créer les tables requises par le module.

Depuis Drupal 6.x, les tables des bases de données sont créées en utilisant l'API Schema.

Cette API permet aux modules de déclarer leurs tables dans un tableau structuré (semblable à celui de l'API Forms) et fournit des fonctions API pour créer, supprimer et modifier les tables, les colonnes, les clés et les indexs.

Un exemple de structure de données (en provenance de la documentation de l'API Schema)

Comme exemple, voici un extrait de la déclaration de la table node de Drupal :

<?php
$schema
['node'] = array(
    
'description' => t('The base table for nodes.'),
    
'fields' => array(
      
'nid' => array(
        
'description' => t('The primary identifier for a node.'),
        
'type' => 'serial',
        
'unsigned' => TRUE,
        
'not null' => TRUE),
      
'vid' => array(
        
'description' => t('The current {node_revisions}.vid version identifier.'),
        
'type' => 'int',
        
'unsigned' => TRUE,
        
'not null' => TRUE,
        
'default' => 0),
      
'type' => array(
        
'description' => t('The {node_type} of this node.'),
        
'type' => 'varchar',
        
'length' => 32,
        
'not null' => TRUE,
        
'default' => ''),
      
'title' => array(
        
'description' => t('The title of this node, always treated a non-markup plain text.'),
        
'type' => 'varchar',
        
'length' => 255,
        
'not null' => TRUE,
        
'default' => ''),
      ),
    
'indexes' => array(
      
'node_changed'        => array('changed'),
      
'node_created'        => array('created'),
      ),
    
'unique keys' => array(
      
'nid_vid' => array('nid''vid'),
      
'vid'     => array('vid')
      ),
    
'primary key' => array('nid'),
    );
?>

Dans cet exemple, la table node a quatre champs (colonnes de table) intitulés nid, vid, type et title. Chaque champ indique son type (dans cet exemple serial, int ou varchar) et quelques paramètres facultatifs, y compris une description.

La clé primaire de la table est le champ nid. Il y a deux clés uniques : la première appelée vid sur le champ vid et la seconde appelée nid_vid sur les champs nid et vid. Deux indexes, l'un appelé node_change sur le champ changed, l'autre appelé node_created sur le champ created.

Création des tables : hook_schema et fichiers .install

Pour que l'API Schema gère une table d'un module, le module doit avoir un fichier .install qui implémente hook_schema() (remarque : dans version pre-release, hook_schema() était dans le fichier .schema, mais ce n'est plus le cas).

Par exemple, le fichier mymodule.install contiendra :

<?php
function mymodule_schema() {
  
$schema['mytable1'] = array(
     
// spécifications pour mytable1
  
);
  
$schema['mytable2'] = array(
     
// spécifications pour mytable2
  
);
  return 
$schema;
}

function 
mymodule_install() {
  
// Création de mes tables
  
drupal_install_schema('mymodule');
}

function 
mymodule_uninstall() {
  
// Suppression de mes tables.
  
drupal_uninstall_schema('mymodule');
}
?>

La mise à jour de vos schémas de tables se fait en utilisant la fonction hook_update(). Supposons que vous vouliez ajouter une nouvelle colonne appelée newcol à la table mytable1.

Assurez-vous en premier lieu d'actualiser votre structure dans la fonction mymodule_schema() pour que la nouvelle table puisse gérer la nouvelle colonne.

Ensuite, ajoutez une fonction de mise à jour dans le fichier mymodule.install :

<?php
function mymodule_update_1() {
  
$ret = array();
  
db_add_field($ret'mytable1''newcol', array('type' => 'int'));
  return 
$ret;
?>

Un module également utile aux développeurs de modules est le Module Schema. Il apporte des fonctionnalités relationnelles non fournies par le core de l'API Schema. Actuellement, cela concerne :

  • Documentation Schema : affichage hypertexte de la documentation Schema expliquant l'objet des chaque table et chaque champ.
  • Génération de structure Schema : le module examine la base de données et créé la structure Schema API de toutes les tables qui correspondent dans la base de données.
  • Comparaison Schema : le module compare la structure de la base de données avec les structures déclarées par tous les modules activés et signale les tables manquantes ou incorrectes.