Ich verwende das Migrationsmodul für eine Migration von D7 nach D8 und schreibe die gesamte Migration manuell in Code (anstatt das integrierte D7-Migrationsmodul zu verwenden, da ich eine genauere Kontrolle über die Migration wünschte.)
Ich habe die folgende Struktur: Die D7-Site hat ein Bildfeld, in dem Bilder als Dateientitäten gespeichert werden. Auf der D8-Site ist das Bildfeld eine Entitätsreferenz auf eine Medienentität (und die Medienentität verfügt wiederum über ein Bildfeld).
Ursprünglich hatte ich Folgendes für meine Bildermigration:
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
In meiner Artikelknoten-Migrationsdatei hatte ich Folgendes:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
aber mir wurde klar, dass dies nicht funktionieren würde. Die Ziel-ID, die aus der Migration von image_files stammt, waren tatsächlich Dateientitäts-IDs, keine Medienentitäts-IDs. In der idealen Welt möchte ich einen Weg finden, um eine dritte Migration zu erstellen, die diesen mittleren Schritt erstellt, und Dateieinheiten in Medienentitäten zu migrieren und diese Migration dann der Artikelmigration zuzuordnen. Ich kann jedoch keinen guten Weg finden, dies zu tun.
Plan B besteht einfach darin, ein Prozess-Plugin für die Bildmigration zu erstellen, mit dem Dateieinheiten manuell erstellt, an Medienentitäten angehängt und diese Migration an Artikel übergeben werden (dies entfernt den mittleren Schritt). Dies würde jedoch bedeuten, dass Medienentitäten zwar zurückgesetzt werden können, Dateieinheiten jedoch nicht.
field_media_image
.Ich habe die akzeptierte Antwort sehr geschätzt, sie hatte jedoch bereits einige veraltete Definitionen und unterstützte das Posten von Alt- und Titelbildeigenschaften nicht. Daher habe ich es ein wenig verbessert, um dies zu unterstützen und reibungslos mit dem neuesten Drupal 8.6.x zu arbeiten. Hier ist der Code von MediaGenerate.php (die entsprechende Yaml-Syntax befindet sich im Dokumentkommentar):
quelle
Da Media ein Entitätstyp ist, sollten Sie eine eigene Migration erstellen. Sie können eine neue Quelle aus der Dateitabelle generieren. Hier ist ein Beispiel
https://gist.github.com/jibran/8e7cd2319e873858dd49a272227a4fd2
Dann
migration_lookup
können Sie mit die Felder wie folgt abbilden.quelle
Wenn Sie Dateien in Drupal 8 auf Medieneinheiten migrieren möchten, können Sie dieses Modul verwenden: https://www.drupal.org/project/migrate_file_to_media
Es verfügt über ein Drush-Skript, das automatisch die Medienreferenzfelder erstellt. Zusätzlich werden doppelte Bilder mithilfe eines binären Hashs erkannt. Und es unterstützt Übersetzungen.
quelle