Migrate est un module Drupal disponible en version stable pour Drupal 6 et Drupal 7. Il était présenté lors de la DrupalCon de Londres par l’un des 2 développeurs de ce module : Moshe Weitzman.
Migrate fournit un framework d’import de données depuis différentes sources vers Drupal. Il permet de créer son import en définissant la source, la destination et le mapping nos données. On peut jouer et rejouer nos imports facilement (fonction de rollback) en utilisant l’interface utilisateur ou Drush.
Les sources des données à importer :
Possibilité d’importer des données vers Drupal depuis différentes sources parmi lesquels :
- MySQL (donc la plupart des CMS)
- PostgreSQL
- MS SQL
- Oracle
- CSV
- XML
- JSON
Sans compter que ce module est écrit en PHP Objet, et qu’il est possible d’écrire facilement une nouvelle classe pour importer des données à partir d’une autre source.
Destinations :
Concernant les destinations des données :
- Entités (D7) & Node, Term, Comment, User (D6)
- Fields (D7) & CCK Fields (D6)
- DB Tables
- Quelques modules (OG, Flag, User Relationships, Private Msg, …)
Et il est toujours possible de créer une nouvelle classe pour ajouter une autre destination.
Mapping :
Une fois notre source et notre destination définies, il ne reste plus qu’à définir le mapping de l’import.
Un exemple simple :
// On surcharge la classe Migration
Abstract class ExampleSimpleMigration extends Migration {
Public function __construct() {
parent::constrcut() ;
}
}
// On définit une team
$this->team = array(
new MigrateTeamMember(‘Name’, ‘email’, ‘job title’)
)
// Une description
$this->description = t(‘Description de votre import’);
// On récupère les données sources
// MySQL par exemple
$query = db_select(…) ;
$this->source = new MigrateSourceSQL($query);
// On définit notre destination
// Termes de taxo par example
$this->destination = new MigrateDestinationTerm(‘nom_de_votre_vocabulaire’);
// On commence le mappping
$this->addFieldMapping(‘field-drupal-name’ , ‘field-source-name’)
->description(t(‘Description pour ce mapping’))
->defaultValue(‘default_ name’) ;
Quelques méthodes supplémentaires :
$this->addSimpleMappings(array(‘status’, ‘mail’)) :
Dans le cas où le nom de champ source est le même que le nom du champ de destination.
->addFieldMapping('roles', 'user_roles')
$this->separator(‘,’) :
Définit le séparateur utilisé dans le cas de valeurs multiples.
$this ->dedupe(‘users’,’ name’) ;
Modifie les valeurs identiques dans le cas où chaque valeur doit être unique. (Si la valeur ‘bernadette’ est présente 2 fois, la deuxième sera transformée en ‘bernadette_1’.
Les fonctions prepare() & prepareRow() vous permettront de faire vos traitements particuliers avant l’import, et la fonction complete() pour ce qui doit être fait après.
Drush :
Pour les imports importants, il est recommandé de lancer les imports par Drush plutôt que par l’interface utilisateur. Voici quelques commandes drush :
drush migrate-status
Affiche les états des imports
drush migrate-import import-name
Lance l’import import-name (utiliser –all pour lancer tous les imports à la fois)
drush migrate- rollaback import-name
Annule l’import en supprimer toutes les données importées.
Allez plus loin :
Ce module est vraiment très bien fourni en documentation, que ce soit sur drupal.org ou dans le code lui-même. Voici quelques liens :
















