Saya menggunakan modul Migrasi untuk migrasi D7 ke D8 dan saya menulis seluruh migrasi secara manual dalam kode (daripada menggunakan modul migrasi D7 bawaan, karena saya ingin lebih banyak kontrol granual pada migrasi.)
Saya memiliki struktur berikut: situs D7 memiliki bidang gambar tempat gambar disimpan sebagai entitas File. Di situs D8, bidang gambar adalah referensi entitas ke entitas Media (dan entitas Media pada gilirannya memiliki bidang Gambar.)
Awalnya, saya memiliki yang berikut untuk migrasi Gambar saya:
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
Di dalam file migrasi simpul artikel saya, saya memiliki yang berikut ini:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
tetapi saya menyadari bahwa ini tidak akan berhasil. Target_id yang berasal dari migrasi image_files benar-benar ID Entitas File, bukan ID entitas media. Di dunia yang ideal, saya ingin menemukan cara untuk membuat migrasi ketiga, yang akan membuat langkah tengah ini, dan memigrasikan entitas file ke Entitas Media dan kemudian memetakan migrasi tersebut ke migrasi Artikel. Namun, saya tidak bisa menemukan cara yang baik untuk melakukan ini.
Plan B hanya akan membuat plugin proses untuk migrasi gambar, yang secara manual akan membuat entitas file, melampirkannya ke entitas media, dan meneruskan migrasi itu ke Artikel (ini menghilangkan langkah tengah). Ini berarti, meskipun, sementara entitas Media dapat diputar kembali, Entitas File tidak bisa.
field_media_image
.Saya sangat menghargai jawaban yang diterima, namun sudah memiliki beberapa definisi yang sudah usang dan tidak mendukung posting alt dan properti gambar judul. Jadi, saya meningkatkannya sedikit untuk mendukung itu dan bekerja dengan lancar dengan Drupal 8.6.x. Berikut ini kode MediaGenerate.php (sintaks Yaml yang sesuai ada di dalam komentar doc):
sumber
Karena Media adalah tipe entitas, Anda harus membuat migrasi sendiri. Anda dapat menghasilkan sumber baru dari tabel file. Berikut ini sebuah contoh
https://gist.github.com/jibran/8e7cd2319e873858dd49a272227a4fd2
Kemudian dengan
migration_lookup
Anda dapat memetakan bidang seperti ini.sumber
Jika Anda ingin memigrasikan file dalam Drupal 8 ke entitas media, Anda dapat menggunakan modul ini: https://www.drupal.org/project/migrate_file_to_media
Ini memiliki skrip drush, yang secara otomatis membuat bidang referensi media. Selain itu mendeteksi gambar duplikat menggunakan hash biner. Dan itu mendukung terjemahan.
sumber