Migrieren von Drupal 6-Dateien zu Drupal 8-Medienentitäten
Drupal 8 bietet bereits die notwendigen Konfigurationsdateien und PHP-Plugins, um Dateien von Drupal 6 zu migrieren. Wenn Sie jedoch das Drupal 8 Core Media Modul für Ihre Dateien verwenden, müssen Sie eine zweite Migration hinzufügen.
Ich gehe davon aus, dass Sie eine Drupal 8 Migration mit den migrate tools und migrate plus Modulen durchführen.
Datei-Migration
Kopieren Sie /core/modules/file/migrations/d6_file.yml nach config/install/migrate_plus.migration.d6_file.yml in Ihrem benutzerdefinierten Modul und setzen Sie den Pfad der Quelldatei:
# Jede Migration, die eine Datei von Drupal 6 fid referenziert, sollte diese
# Migration als eine optionale Abhängigkeit angeben.
id: d6_file
label: Öffentliche Dateien
audit: true
migration_group: d6
migrations_tags:
- Drupal 6
- Inhalt
source:
plugin: d6_file
constants:
# Das Tool, das diese Migration konfiguriert, muss source_base_path setzen. Er
# stellt den voll qualifizierten Pfad dar, relativ zu dem URIs in der Tabelle der Dateien
# Tabelle angegeben sind, und muss mit einem / enden. Siehe source_full_path
# Konfiguration in der Prozesspipeline dieser Migration als Beispiel.
source_base_path: '/path/to/drupal6/files/to/migrate'
...
Drupal 8 weigert sich, ein Modul zu installieren, dessen Konfiguration bereits importiert wurde. Um diesen Fehler zu vermeiden, fügen Sie eine Abhängigkeit von Ihrem benutzerdefinierten Modul in die Migrationsdatei ein. Wenn Sie das Modul deinstallieren, wird Drupal 8 auch die Konfiguration entfernen:
dependencies:
enforced:
module:
- custom_migrate_module
Migration von Medieneinheiten
Kopieren Sie /core/modules/file/migrations/d6_file.yml nach config/install/migrate_plus.migration.d6_media_entity.yml in Ihr eigenes Modul.
Ändern Sie die Plugin-ID und das Label, den Prozess und die Zielkonfiguration, um Medienentitäten zu erstellen:
Vor (Auszug)
id: d6_file
label: Öffentliche Dateien
...
process:
# Wenn Sie sowohl diese Migration als auch d6_user_picture_file in einer eigenen
# Migration verwenden und die Migrationen inkrementell ausführen, wird dringend empfohlen
# fid-Zuordnung zu entfernen, um mögliche ID-Konflikte zu vermeiden.
# Konflikte zu vermeiden. Aus diesem Grund ist dieses Mapping standardmäßig auskommentiert.
# fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath
-
plugin: urlencode
destination_full_path:
plugin: file_uri
source:
- filepath
- file_directory_path
- temp_directory_path
- is_public
uri:
plugin: file_copy
source:
- '@source_full_path'
- '@destination_full_path'
filemime: filemime
# Die Dateigröße muss nicht migriert werden, sie wird beim Speichern der Dateieinheiten berechnet.
# dateigröße: dateigröße
status: status
changed: timestamp
uid: uid
destination:
plugin: entity:file
Nachher (Auszug)
id: d6_media_entity
label: Medienentitäten
migration_group: d6
...
process:
langcode:
plugin: default_value
default_value: 'de'
field_media_file/target_id:
plugin: migration_lookup
migration: d6_file
source: fid
feld_media_file/display:
plugin: default_value
default_value: 0
field_media_file/description:
plugin: default_value
default_value: ''
status: status
changed: timestamp
uid:
plugin: migration_lookup
migration: d6_user
source: uid
destination:
plugin: entity:media
default_bundle: file
Oder wenn Sie Bilder migrieren:
id: d6_media_entity
label: Media entities
migration_group: d6
...
process:
langcode:
plugin: default_value
default_value: 'de'
field_media_image/target_id:
plugin: migration_lookup
migration: d6_file
source: fid
feld_media_image/alt: filename
field_media_image/title:
plugin: default_value
default_value: ''
status: status
changed: timestamp
uid:
plugin: migration_lookup
migration: d6_user
source: uid
destination:
plugin: entity:media
default_bundle: image
Zuletzt fügen Sie die Migrationsabhängigkeiten zu config/install/migrate_plus.migration.d6_media_entity.yml hinzu:
migration_dependencies:
required:
- d6_user
- d6_datei
dependencies:
enforced:
module:
- custom_migrate_module
Die Ausführung dieser beiden Migrationen kopiert Ihre Dateien aus dem Drupal 6- in das Drupal 8-Dateiverzeichnis und erstellt für jede dieser Dateien eine Medienentität.
Medienentitäten zu Knoten zuweisen
Um Medienentitäten Medienfeldern auf Knoten zuzuordnen, müssen Sie dem Feld die Medienentitäts-ID (anstelle der Datei-ID) zuweisen, z.B.:
id: d6_node
label: Nodes
audit: true
migration_group: d6
migration_tags:
- Drupal 6
- Inhalt
deriver: Drupal\Node\Plugin\migrate\D6NodeDeriver
source:
plugin: d6_node
process:
field_media:
plugin: sub_process
source: uploads
process:
destination_id:
plugin: migration_lookup
migration: d6_media_entity
source: fid
no_stub: true
display: list
description: description
...
destination:
plugin: entity:node
Es kann sein, dass Sie ein benutzerdefiniertes Quell-Plugin erstellen müssen, um die ID der Datei abzurufen, die an einen Knoten angehängt ist.
Neuen Kommentar hinzufügen