Importer du contenu à l'installation dans un Drupal 8
Lorsque vous travaillez à plusieurs et souhaitez disposer chacun du même contenu, ou avoir du contenu créé automatiquement sur vos différents environnements, il existe peu de modules pour cela.
Solution la plus utilisée: Default content.
Ce module permet d'exporter un contenu en fichier json qui sera placé dans un module.
**Avantages:**
Importe du contenu à l'installation du module
Gère les références à d'autres contenus
**Inconvénients:**
L'import ne se fait qu'à l'installation du module
Si vous souhaitez réimporter du contenu que quelqu'un d'autre à rajouté (ou lors d'une mise à jour d'environnement), il faut réinstaller le module
Si vous réimportez du contenu en réinstallant le module, un soucis va se poser car il va tenter de recréer le contenu déjà existant.
Ne se joue pas si l'on installe le site avec une configuration existante et donc ce module déjà activé
L'export fait référence aux images dans sites/default/files, on doit donc également disposer de ces images en les plaçant par ses propres moyens dans les bons répertoires.
Solution imparfaite donc, d'avantage destinée à une utilisation unique.
L'autre solution est le module en développement Entity Staging
Ce module fournit une commande drush permettant d'exporter le contenu de votre choix (avec ses dépendances). Il se base sur migrate pour faire l'import du contenu.
**Avantages:**
Le contenu est exporté dans un répertoire spécifique que l'on peut placer où l'on veut.
Gère les références à d'autres contenus
Gère et stocke les fichiers dans sa propre arborescence
Gère la mise à jour et le delta entre l'existant et le nouveau contenu à ajouter / mettre à jour
**Inconvénients:**
Encore en dev et peu maintenu, même si la majorité des issues ont leur patch.
Nécessite migrate
Finalement
Malgré les inconvénients de ce dernier, celui-ci reste néanmoins la solution la plus pertinente à l'heure actuelle pour qui veut pouvoir créer et mettre à jour du contenu lors du développement et pouvoir le partager entre plusieurs environnements.
Espérons que le mainteneur disposera d'un peu plus de temps pour mettre à jour son module ou pourra bénéficier de co-maintenance. Ce module mériterait amplement d'avoir une version stable et d'avoir une meilleur visibilité.
Pour corriger les lacunes rencontrées aujourd'hui avec ce module, voici les tickets avec les patchs indispensables à l'heure actuelle:
Call to undefined function Drupal\entity_staging\Commands\_drush_log_drupal_messages()
Hard coded staging directory
Crash when destination folder does not exist
Import multiple references of files
[warning] count(): Parameter must be an array or an object that implements Countable EntityStagingProcessEntityReferenceFieldSubscriber.php:92
Nodes imported without image fields, A la suite de toutes ces modifications, il faut prendre le patch de cet article.
Ce qui donnerait dans un fichier composer.json:
{
"extra": {
...
"patches": {
"drupal/entity_staging": {
"[2973904] Call to undefined function Drupal\\entity_staging\\Commands\\_drush_log_drupal_messages()": "https://www.drupal.org/files/issues/2018-05-18/call_to_undefined_functi…",
"[2947449] Hard coded staging directory": "https://www.drupal.org/files/issues/hard-coded-staging-directory-294744…",
"[2912401] Crash when destination folder does not exist": "https://www.drupal.org/files/issues/crash_when_destination-2912401-6.pa…",
"[2954545] Import multiple references of files": "https://www.drupal.org/files/issues/2018-12-06/2954545-2.patch",
"[3018586] [warning] count(): Parameter must be an array or an object that implements Countable EntityStagingProcessEntityReferenceFieldSubscriber.php:92": "https://www.drupal.org/files/issues/2018-12-06/3018586-2.patch",
"[2987062] Nodes imported without image fields": "http://blog.fclement.info/sites/default/files/2018-12/2987062-after-oth…"
}
}
},
...
}
J'ai ajouté le patch du ticket #2987062 qui manquait et empêchait l'import de fichier correctement