Puncte:1

Importați conținut în noduri cu câmpuri media:image folosind Migrare din sursa csv

drapel mx

Încerc să import conținut de la a .csv dosar în articol nodurile unei noi instalări D9 folosind Migra, Migrare Plus, Instrumente de migrare, Migrați sursa csv și Migrați fișierul (extins)

Ale mele articol tipul de conținut are a field_article_media_image așteptând un articol de imagine media.

Când rulez migrarea, articole sunt create corect DAR field_article_media_image este încă gol. Văd că imaginea a fost importată în sistemul de fișiere, dar creată ca fișier, nu ca element media (nu este prezent în fila media) și nu este legată de articol.

//import-articles.yml

id: import_articles
etichetă: importați articole
migration_group: import_articles_group

destinaţie:
  plugin: entity:node

sursă:
  constante:
    DESTINATION_PATH: „public://migrations/articles/images/”
  plugin: „csv”
  cale: „migrations/articles/articles.csv”
  delimitator: ';'
  incintă: '"'
  header_offset: 0
  ID-uri:
    - id
  câmpuri:
    0:
      nume: id
      etichetă: „Id”
    1:
      nume: titlu
      etichetă: „Titlu”
    2:
      nume: corp
      etichetă: „corp”
    3:
      nume: field_article_media_image
      etichetă: „Imagine”
proces:
  titlu: titlu
  corp/valoare: corp
  corp/format:
    plugin: default_value
    default_value: „basic_html”
  field_article_media_image:
    - plugin: image_import
      sursa: field_article_media_image
      destinație: constante/DESTINATION_PATH
      titlu: titlu
      skip_on_error: adevărat
    - plugin: jurnal
  tip:
    plugin: default_value
    default_value: articol

Jurnalul nu dă nicio eroare. Oare îmi scapă ceva sau fac ceva greșit?

EDITAȚI | ×

După ce a comentat @Joseph, am încercat acest cod:

...
    field_article_media_image:
        sursa: field_article_media_image
        plugin: entity_lookup
        entity_type: media
        pachet: imagine
        bundle_key: pachet
        value_key: „nume”
        access_check: 0
...

Totul merge acum, cred cheie_valoare citate necesare și pot fi access_check trebuia setat la fals.

Puncte:0
drapel in

Modul în care articolul tău este legat de imagine este de fapt astfel:

Articol (nod) -> Imagine (media) -> Fișier (fișier)

Deci există de fapt Trei migrații pe care trebuie să le faci, presupunând că nu faci nimic special și doar faci migrații de vanilie.

  • Prima migrare va fi către a Fişier entitate. Destinația acestei migrații este entitate:fișier care va migra informațiile către fişier_gestionat masa. Acesta este ceea ce migrează metadatele fișierelor, cum ar fi locul în care se află în sistemul de fișiere, când au fost schimbate, când au fost modificate etc.

  • A doua migrare va fi către a Mass-media entitate. Destinația acestei migrații este entitate:media cu mănunchi imagine, care va crea o entitate media a fișierului. Această migrare este de obicei 1:1 cu fișierul pe care îl reprezintă. Aceasta este entitatea la care ar trebui să fie asociată de către alte entități din sistem. Tu faci o migrate_lookup pe Fişier migrarea folosind ID-ul acelui fișier.

    • Cred că aceasta este migrația care vă lipsește.
  • Ultima migrare va fi a ta Articol migrarea, care sunt datele dvs. despre articol din CSV (migrarea pe care ați scris-o). Va trebui să faci o migrate_lookup pe migrarea media folosind ID-ul fișierului pentru field_article_media_image.

drapel mx
Între timp, am reușit să import imaginile ca entități Media (folosind drupal/media_library_importer). Pot trece direct la ultima migrare? Titlul articolului Media este o cheie unică pe care o am în .csv
drapel in
@laurent Dacă ați folosit alte instrumente decât Migrate API pentru a migra Media, migrarea articolului dvs. nu poate utiliza [`migration_lookup`](https://api.drupal.org/api/drupal/core!modules!migrate!src!Plugin! migrate!process!MigrationLookup.php/class/MigrationLookup) plugin pentru a lega articolul la media.Dar puteți crea un [plugin de proces](https://www.drupal.org/docs/8/api/migrate-api/migrate-process/writing-a-process-plugin) și utilizați acea coloană în CSV pentru a găsiți entitatea media corectă în DB folosind [Entity API](https://www.drupal.org/docs/drupal-apis/entity-api/introduction-to-entity-api-in-drupal-8).
drapel mx
În Migrate Plus, pluginul `entity_lookup` pare să facă exact ce vreau, exemplul oferit este _hooking_ noduri la entitățile utilizatorilor, nu știu cum să transpun la entitățile media, dar asta nu sună prea complicat. Sunt nou în Drupal, așa că dacă pot evita să scriu un plugin...
drapel in
@laurent `entity_lookup` poate face ceea ce am descris. Trebuie doar să-l configurați pentru a indica `entity_type` ("media"), `bundle` ("imagine"), `bundle_key` ("bundle") și, cel mai important, `value_key` - numele mașinii câmp din entitatea dvs. media care deține valoarea care coincide cu valoarea din articolele dvs. CSV.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.