Blog Joomla!

Comment j'ai migré mon site Joomla! 1.0 (partie 2 : migrer les données)

Index de l'article

Migrer un sites Joomla! consiste à déplacer les données d'une base de données vers une autres bases de données dont la structure est différente. Un simple "copier-coller" ne suffit pas. Cet article décrit la manière avec laquelle j'ai procédé après avoir préparé ma migration.

Créer ses propres plugins de migration

Impossible de trouver un ETL plugin pour ne serait-ce qu'un des composants que j'utilise. Aïe, voilà que cela se corse.Je vais devoir créer ces plugins pour 3 composants dont je souhaite effectuer la migration.

Joomlatools donnent quelques indications sur leur blog (en anglais) , je vais tenter de les suivre.

Tout d'abord, il est nécessaire d'étudier les composants qui sera nécessaire de migrer. Rendez-vous dans le gestionnaire de composant de Joomla! 1.0 et listez les composants, mettez-les à jour avec la version la plus récente et qui correspond à une version identique sous Joomla! 1.5 (à moins que le composant fonctionne en mode Legacy).

 

Gestionnaire de composant sous Joomla! 1.0

Prenons à exemple le composant !JoomlaComment. Via PhpMyAdmin, je repère les tables gérées par le composant : mos_comment, mos_comment_captcha, mos_comment_setting et mos_comment_voting.

Pour chacune de ces tables, je crée un nouveau fichier qui porte nom de la table (comment.php, comment_captcha.php, comment_setting.php et comment_voting.php).

Préoccupons-nous maintenant du contenu de ces fichiers :

À l'intérieur du fichier créez une classe avec le nom de la table, ainsi :

{codecitation}class JoomlaComment_ETL extends ETLPlugin{/codecitation}

Ensuite, j'indique quelle table va migrer :

{codecitation}

     function getAssociatedTable()

    {
        return 'comment';
    }{/codecitation}

Ensuite j'indique les variables de la table à créer. Pour le faire je copie simplement le code contenu dans le fichier .xml du copomsant ou à partir du scrpit SQL généré par la sauvegarde de la table en question.

Requête SQL dans PhpMyAdmin

Copie du code SQL dans le fichier php du plugin ETL

{codecitation}    function getSQLPrologue()
    {
        $ret = <<
       
    CREATE TABLE `jos_comment` (
        `id` int(10) NOT NULL auto_increment,
        `contentid` int(10) NOT NULL default '0',
        `component` varchar(50) NOT NULL default '',
        `ip` varchar(15) NOT NULL default '',
        `userid` int(11) default NULL,
        `usertype` varchar(25) NOT NULL default 'Unregistered',
        `date` datetime NOT NULL default '0000-00-00 00:00:00',
        `name` varchar(30) NOT NULL default '',
        `email` varchar(50) NOT NULL default '',
        `website` varchar(100) NOT NULL default '',
        `notify` tinyint(1) NOT NULL default '0',
        `title` varchar(50) NOT NULL default '',
        `comment` text NOT NULL,
        `published` tinyint(1) NOT NULL default '0',
        `voting_yes` int(10) NOT NULL default '0',
        `voting_no` int(10) NOT NULL default '0',
        `parentid` int(10) NOT NULL default '-1',
        `importtable` varchar(30) NOT NULL default '',
        `importid` int(10) NOT NULL default '0',
        `importparentid` int(10) NOT NULL default '-1',
        PRIMARY KEY  (`id`),
        KEY `com_contentid` (`component`,`contentid`)
    )
    TYPE=MyISAM;
        
    EOT;
        return $ret;
    }{/codecitation}

Ensuite, il faut charger les fichiers créer à dans le répertoire plugins du composant Migrator. Ainsi, les tables seront prises en compte lors de la création du script SQL.

Malheureusement,  il n'est pas si facile, pour qui ne code pas, de créer un plugin fonctionnel. Vous pouvez rencontrer lors de l'installation un blocage du script au moment d'insérer des données dans la table du composant. Dans ce cas, difficile d'identifier l'origine du problème...