Emigrate : un module d'exportation de site Drupal 8 et 9 pour les développeurs
22 mars 2022
J’ai récemment publié la première version alpha de mon projet Emigrate.
Ce module permet d’exporter le contenu d’un site Drupal 8 ou 9 vers une hiérarchie de fichiers JSON, dans un but d’archivage ou de migration vers une autre plateforme.
Pour l’utiliser, vous aurez besoin des éléments suivants :
- Un site en Drupal 8 ou 9 (meh)
- Le gestionnaire de dépendances Composer
- L’outil en ligne de commande Drush
Comment ça marche
Prenons l’exemple d’un site standard, tel que créé à l’installation de Drupal. Ce dernier propose deux types de contenu par défaut : Article et Page de base.
Commençons par créer une page :
Nous remplissons deux champs :
- Le titre : champ de type titre standard de Drupal
- Le corps du texte : champ de type Texte (formaté, long, avec résumé)
Créons maintenant un article.
En plus des deux champs identiques à ceux du contenu Page, celui-ci contient :
- Un champ Étiquettes : références à des termes du vocabulaire Étiquettes
- Une champ Image : référence à un fichier, accompagnée d’un texte alternatif
Installation et configuration du module emigrate
Ouvrez un terminal, placez-vous à la racine de votre projet Drupal, et installez le module en tapant la commande :
composer require putthisinthecode/emigrate:1.0.0-alpha
Activez le module avec la commande
drush en emigrate
Dans le même répertoire, initialisez ensuite l’environnement de migration en tapant
drush emigrate:init
Vous devriez voir apparaître dans le répertoire courant un sous-répertoire emigrate
, contenant un fichier emigrate.toml
.
Toujours à la racine de votre site, lancez l'exportation en tapant la commande
drush emigrate:export
Les contenus sont exportés dans le répertoire emigrate
, avec la structure suivante :
├── emigrate.toml
├── entities
│ ├── node
│ │ ├── article
│ │ │ └── 2.json
│ │ └── page
│ │ └── 1.json
│ ├── taxonomy_term
│ │ └── tags
│ │ ├── 1.json
│ │ ├── 2.json
│ │ └── 3.json
│ └── user
│ └── user
│ └── 1.json
└── index.json
- Le répertoire
entities
contient au premier niveau un répertoire pour chaque type d'entité exporté (ici node, terme de taxonomie, et utilisateur) - Chaque répertoire d’entité contient un ou plusieurs sous-répertoires correspondant à ses bundles (sous-type Drupal). Par exemple, le répertoire node (contenu) inclue les répertoires
article
etpage
, correspondant aux bundles (type de contenu) du même nom. Nous avons un seul bundle pour la taxonomie Étiquettes (nom machine :tags
), et un seul pour les utilisateurs (user
) - Chaque entité est exportée dans un fichier JSON individuel, ayant pour titre son identifiant avec l’extension
json
. Voici le contenu du fichier entities/node/article/2.json, correspondant à notre article.
{
"id": 2,
"language": "fr",
"type": "article",
"published": true,
"featured": true,
"sticky": false,
"slug": "/node/2",
"body": "<p>Tincidunt per potenti habitant mus scelerisque [...]</p>\r\n",
"comment": {
"type": "comment",
"comments": []
},
"field_image": {
"id": "1",
"uri": "2022-03/loutre.jpg",
"name": "loutre.jpg"
},
"field_tags": [
{
"id": "1",
"title": "Premiére étiquette",
"description": null,
"vocabulary": "tags"
},
{
"id": "2",
"title": "Deuxième étiquette",
"description": null,
"vocabulary": "tags"
},
{
"id": "3",
"title": "Troisième étiquette",
"description": null,
"vocabulary": "tags"
}
]
}
- Enfin, le fichier index.json contient la liste des chemins de toutes les entités exportées. Voici son contenu pour notre exemple :
[
"entities/node/page/1.json",
"entities/node/article/2.json",
"entities/taxonomy_term/tags/1.json",
"entities/taxonomy_term/tags/2.json",
"entities/taxonomy_term/tags/3.json",
"entities/user/user/1.json"
]
Bien qu’il permette déjà d’exporter des contenus simples, ce module nécessitera du développement supplémentaire pour être utilisable dans un contexte professionnel. N'hésitez pas à me contacter si vous souhaitez faire appel à mes services pour l'adapter à vos besoins.
Crédit photo de loutre : Eric Bégin
Partager
Une action LaunchBar pour LastPass
2 mars 2020
J’ai une mémoire de poisson rouge.
C’est la raison pour laquelle j’utilise l’application LastPass pour saisir automatiquement mes identifiants lorsque je me connecte à un site web.
Bien que cet outil soit utile dans un navigateur, il s’avère peu pratique dans d’autres contextes, par exemple, lorsque je souhaite saisir le nom d’utilisateur et le mot de passe d’un site dans une application de bureau.
J’ai donc développé une action pour LaunchBar , qui me permet de naviguer dans les données de mes comptes en me servant uniquement du clavier.
Vous pouvez récupérer une première version fonctionnelle de ce projet sur mon compte GitHub.
L’interface utilisateur est encore en chantier. Je posterai un guide d’utilisation et une archive à télécharger dès que la peinture sera sèche.
Mise à jour du 7 mars 2020 : J’ai finalement abandonné Lastpass pour 1Password, bien mieux intégré à Mac OS, et LaunchBar pour Alfred, beaucoup plus extensible. Ce projet restera donc à l’état de preuve de concept.
Partager
Encore un blog de développeur
29 février 2020
Je vais garder ça court, parce que personne ne lit les introductions.