Drupal Migrate API: Ako zmigrovať obrázky

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!

Publikované dňa
Zaradené v kategóriach: