Pre jedného klienta robím upgrade webu z Drupal 6 na Drupal 9. Tentokrát som sa rozhodol, že sa hlbšie ponorím do Drupal Migrate API a použijem ho na migráciu obsahu. Všetko šlo ako po masle, až pokiaľ so nenarazil na migráciu obrázkov. Samotné súbory som zmigroval bez problémov, podobne aj obsah, jediné, čo mi nešlo, bolo prepojiť file entity s obsahovými entitami. Na starom (Drupal 6) webe boli vo fielde field_news_images
, na novom sa pole volá field_images
.
Základ Migrate API tvoria yaml súbory, ktorých štruktúra je celkom dobre pochopiteľná. Zakrátko mi teda došlo, že do migračného yaml pre obsah musím doplniť niečo takéto:
field_images: plugin: sub_process source: field_news_images process: target_id: fid
Znamená to asi toľko, že ID súboru (obrázku) z poľa na Drupal 6 webe sa preniesie do príslušného poľa na Drupal 9 webe. Fungovalo to, len to malo jednu chybu. IDčká súborov na starom a novom webe sa nezhodovali a preto mi do obsahu migračný skript priraďoval neexistujúce entity. Bolo treba teda spraviť ešte jednu drobnú zmenu a to do migračného skriptu pre súbory pridať takúto maličkosť:
fid: - plugin: get source: fid
Znamená to asi toľko, že pri migrácii súborov zmigrujeme aj ich ID (fid) a teda toho ID bude rovnaké na starom aj na novom webe. Revertol som zmigrované súbory aj obsah a znovu zmigroval najprv súbory, potom obsah a voilá! Súbory boli správne priradné k obsahu.
Aj tak mi to ale nedalo a pátral som, či by so vedel zmigrovať súbory s tým, že by som nemusel migrovať aj ich IDčka. Je to na plugin migration_lookup
, ktorý si vie prečítať dáta z inej migrácie. Príslušný kód pre migráciu obsahu potom bude vyzerať nejako takto:
field_images: plugin: sub_process source: field_news_images process: target_id: plugin: migration_lookup migration: upgrade_d6_ksa_file source: fid
Znamená to asi toto: do poľa field_images
by som chcel obsah poľa field_news_images
a keď to budeš migrovať, tak pre nový obrázok použi ID, pod ktorým si tento súbor zmigroval v rámci migrácie upgrade_d6_ksa_file
.
Funguje!
Pridať nový komentár