Mets-le dans le code()

Développement web && hacking erratique

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 et page, 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.

Partager