J'ai régulièrement besoin d'organiser le transfert des données de sites Joomla vers une copie de ces sites, pour plusieurs raisons (nettoyage, mise-à-jour, sauvegardes spécifiques, évolutions...).

Là-dessus, vous allez me dire : beh euuuh, tu connais pas Akeeba ? Si si, je connais, et je valide. J'utilise AkeebaBackup sur tous mes sites Joomjoom, à des fins de sauvegardes. Mais ça ne correspond pas à tous mes besoins. Soit trop lourd, soit trop spécifique, soit trop long...

Imaginez par exemple que vous souhaitiez préparer la nouvelle version d'un site - en modifiant des menus, modules, catégories, etc - tout en y insérant les données du site en production😎Pas simple hein ? Maintenir la cohérence des données tout en travaillant sur le site est alors un vrai défi, et Akeeba ne fait plus du tout l'taf.

Il s'agit donc de transférer les données cœur de Joomla : articles, catégories, tags, utilisateurs, groupes, droit d'accès, etc - comprenant également certaines tables, lignes ou valeurs spécifiques : id super-utilisateur, #_assets, #_ucm, #_workflows, etc - sans toucher aux données structurelles de Joomla. Ce qui peut être un sacré bazar, car Joomjoom a parfois ses raisons que l'amour irradie... ou ignore... ou... bref🥴

De plus, dans certains cas, ce n'est pas seulement les données cœur que je souhaite transférer, mais aussi certaines tables métiers, créées à côté de Joomla (avec Fabrik par exemple).

Dans d'autres cas encore, j'ai besoin de le faire régulièrement, parfois même très, très, très régulièrement😥: pour tester des templates, des mises-à-jour suspectes, des triggers SQL... Avec donc le besoin d'être rapide, et de vidanger le site de destination à chaque opération.

J'ai donc décider d'automatiser tout ça ! Voici le le lien GitHub vers un petit process qui me fait gagner pas mal de temps, et qui peut-être vous en fera gagner à vous aussi. Une fois mis en place, un clic et quelques secondes/minutes (selon la taille du site) suffisent pour transférer vos données.

https://github.com/georgie123/JoomlaDataMigration

Grands principes

  • Identification/séparation/gestion des données cœur VS données structurelles, afin de permettre le développement continu du site de destination en même temps que le transfert régulier des données du site d'origine.
  • Optimisation des transferts de données entre les tables Joomla qui, on le sait, peuvent évoluer d'une version à l'autre du CMS (des tables en plus, des tables en moins, des champs en plus, des champs en moins...). Des fonctions de vérification de l'existence des tables et de comparaison des champs présents vont générer les requêtes SQL de façon dynamique, puis les exécuter (et afficher quelques logs en console). Un autre intéret de cette méthode est d'être particulièrement évolutive : ajouter le transfert d'une autre table nécessite simplement de l'ajouter dans une liste😎
  • Indépendance des scripts de transferts. Plusieurs scripts sont présents dans le répertoire transferts car la cohérence des données ne suit pas la même logique selon que l'on parle des données de contenu, des données d'utilisateurs, de la gestion des liens, des images, de données personnalisées... Ces logiques sont donc séparées en scripts distincts. Un script peut être ajouté ou supprimé sans gêner le reste du processus.