J'utilise le module Migrate pour une migration D7 vers D8 et j'écris toute la migration manuellement dans le code (plutôt que d'utiliser le module de migration D7 intégré, car je voulais un contrôle plus granulaire de la migration.)
J'ai la structure suivante: le site D7 a un champ d'image où les images sont stockées en tant qu'entités de fichier. Sur le site D8, le champ image est une référence d'entité à une entité média (et l'entité média à son tour a un champ image).
À l'origine, j'avais les éléments suivants pour ma migration d'images:
id: image_files
source:
plugin: legacy_images
constants:
source_base_path: http://example.com/
destination:
plugin: 'entity:file'
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- uri
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
Dans mon fichier de migration de nœud d'article, j'avais les éléments suivants:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
mais j'ai réalisé que cela ne fonctionnerait pas. L'ID cible provenant de la migration des fichiers image était en fait des ID d'entité de fichier, et non des ID d'entité multimédia. Dans le monde idéal, j'aimerais trouver un moyen de créer une troisième migration, qui créerait cette étape intermédiaire, et migrerait les entités de fichier dans les entités multimédias, puis mapperait cette migration vers la migration des articles. Cependant, je ne peux pas trouver une bonne façon de procéder.
Le plan B consistera simplement à créer un plug-in de processus pour la migration des images, qui créera manuellement des entités de fichier, les joindra aux entités multimédias et passera cette migration aux articles (cela supprime l'étape intermédiaire). Cela signifierait, cependant, que même si les entités multimédias peuvent être annulées, les entités de fichiers ne le peuvent pas.
field_media_image
.J'ai beaucoup apprécié la réponse acceptée, mais elle contient déjà des définitions obsolètes et ne prend pas en charge la publication des propriétés des images alt et title. Ainsi, je l'ai un peu amélioré pour prendre en charge cela et travailler en douceur avec la dernière Drupal 8.6.x. Voici le code de MediaGenerate.php (la syntaxe Yaml appropriée est à l'intérieur du commentaire doc):
la source
Comme Media est un type d'entité, vous devez créer sa propre migration. Vous pouvez générer une nouvelle source à partir de la table de fichiers. Voici un exemple
https://gist.github.com/jibran/8e7cd2319e873858dd49a272227a4fd2
Ensuite,
migration_lookup
vous pouvez mapper les champs comme celui-ci.la source
Si vous souhaitez migrer des fichiers dans Drupal 8 vers des entités multimédias, vous pouvez utiliser ce module: https://www.drupal.org/project/migrate_file_to_media
Il a un script drush, qui crée automatiquement les champs de référence du média. De plus, il détecte les images en double à l'aide d'un hachage binaire. Et il prend en charge les traductions.
la source