Score:1

นำเข้าเนื้อหาในโหนดด้วยช่องสื่อ:รูปภาพโดยใช้การโยกย้ายจากแหล่งที่มา csv

ธง mx

ฉันพยายามนำเข้าเนื้อหาจากไฟล์ .csv ไฟล์ลงใน บทความ โหนดของการติดตั้ง D9 ใหม่โดยใช้ โยกย้าย, โยกย้ายพลัส, โยกย้ายเครื่องมือ, โอนย้ายซอร์ส csv และ ย้ายไฟล์ (ขยาย)

ของฉัน บทความ ประเภทเนื้อหามี field_article_media_image คาดหวังรายการภาพสื่อ

เมื่อฉันเรียกใช้การโยกย้าย ไฟล์ บทความ มีการสร้างอย่างถูกต้องแต่ field_article_media_image ยังว่างเปล่า ฉันเห็นว่ารูปภาพถูกนำเข้าในระบบไฟล์ แต่สร้างเป็นไฟล์ ไม่ใช่รายการสื่อ (ไม่มีอยู่ในแท็บสื่อ) และไม่ได้เชื่อมโยงกับบทความ

//import-articles.yml

id: import_articles
ป้ายกำกับ: นำเข้าบทความ
การโยกย้ายกลุ่ม: import_articles_group

ปลายทาง:
  ปลั๊กอิน: เอนทิตี: โหนด

แหล่งที่มา:
  ค่าคงที่:
    DESTINATION_PATH: 'สาธารณะ://migrations/articles/images/'
  ปลั๊กอิน: 'csv'
  เส้นทาง: 'การย้ายข้อมูล/บทความ/บทความ.csv'
  ตัวคั่น: ';'
  สิ่งที่แนบมา: '"'
  header_offset: 0
  รหัส:
    - รหัส
  เขตข้อมูล:
    0:
      ชื่อ: ID
      ป้ายกำกับ: 'รหัส'
    1:
      ชื่อ: ชื่อเรื่อง
      ป้ายกำกับ: 'ชื่อเรื่อง'
    2:
      ชื่อ: ร่างกาย
      ป้ายกำกับ: 'ร่างกาย'
    3:
      ชื่อ: field_article_media_image
      ป้ายกำกับ: 'รูปภาพ'
กระบวนการ:
  หัวเรื่อง: หัวเรื่อง
  ร่างกาย / มูลค่า: ร่างกาย
  เนื้อ/รูปแบบ:
    ปลั๊กอิน: default_value
    default_value: 'basic_html'
  field_article_media_image:
    - ปลั๊กอิน: image_import
      ที่มา: field_article_media_image
      ปลายทาง: ค่าคงที่/DESTINATION_PATH
      หัวเรื่อง: หัวเรื่อง
      skip_on_error: จริง
    - ปลั๊กอิน: บันทึก
  พิมพ์:
    ปลั๊กอิน: default_value
    default_value: บทความ

บันทึกไม่มีข้อผิดพลาด ฉันพลาดอะไรไปหรือฉันทำอะไรผิดหรือเปล่า?

แก้ไข

หลังจากสิ่งที่ @Joseph แสดงความคิดเห็น ฉันลองรหัสนี้:

...
    field_article_media_image:
        ที่มา: field_article_media_image
        ปลั๊กอิน: entity_lookup
        entity_type: สื่อ
        กำ: รูปภาพ
        bundle_key: บันเดิล
        value_key: 'ชื่อ'
        access_check: 0
...

ตอนนี้ทุกอย่างกำลังทำงานอยู่ ฉันคิดว่า ค่า_คีย์ คำพูดที่จำเป็นและ อาจจะ access_check ต้องตั้งค่าเป็นเท็จ

Score:0
ธง in

บทความของคุณเกี่ยวข้องกับรูปภาพอย่างไรจริง ๆ แล้วเป็นดังนี้:

บทความ (โหนด) -> รูปภาพ (สื่อ) -> ไฟล์ (ไฟล์)

ดังนั้นจึงมีจริง สาม คุณต้องทำการย้ายข้อมูลโดยสมมติว่าคุณไม่ได้ทำอะไรเป็นพิเศษและแค่ทำการย้ายข้อมูลวานิลลา

  • การโยกย้ายครั้งแรกจะเป็น ไฟล์ เอนทิตี ปลายทางของการอพยพครั้งนี้คือ เอนทิตี: ไฟล์ ซึ่งจะย้ายข้อมูลไปยัง file_managed ตาราง. นี่คือสิ่งที่ย้ายข้อมูลเมตาของไฟล์ เช่น ตำแหน่งที่อยู่ในระบบไฟล์ เวลาที่มีการเปลี่ยนแปลง เวลาที่ได้รับการแก้ไข ฯลฯ

  • การโยกย้ายครั้งที่สองจะเป็น สื่อ เอนทิตี ปลายทางของการอพยพครั้งนี้คือ เอนทิตี: สื่อ พร้อมมัด ภาพซึ่งจะสร้างเอนทิตีสื่อของไฟล์ การย้ายข้อมูลนี้มักจะเป็นแบบ 1:1 กับไฟล์ที่เป็นตัวแทน นี่คือเอนทิตีที่ควรเกี่ยวข้องกับเอนทิตีอื่นในระบบ คุณทำก ย้ายข้อมูล_lookup บน ไฟล์ การย้ายข้อมูลโดยใช้ ID ของไฟล์นั้น

    • ฉันเชื่อว่านี่คือการย้ายข้อมูลที่คุณพลาดไป
  • การโยกย้ายครั้งล่าสุดจะเป็นของคุณ บทความ การโยกย้าย ซึ่งเป็นข้อมูลบทความของคุณจาก CSV ของคุณ (การโยกย้ายที่คุณเขียน) คุณจะต้องทำ ย้ายข้อมูล_lookup ในการย้ายสื่อโดยใช้ ID ของไฟล์สำหรับ field_article_media_image.

mx flag
ในระหว่างนี้ ฉันจัดการเพื่อนำเข้ารูปภาพเป็นเอนทิตีสื่อ (โดยใช้ drupal/media_library_importer) ฉันสามารถไปที่การย้ายข้อมูลครั้งล่าสุดได้โดยตรงหรือไม่ ชื่อของรายการสื่อเป็นรหัสเฉพาะที่ฉันมีใน .csv ของฉัน
in flag
@laurent หากคุณใช้เครื่องมืออื่นที่ไม่ใช่ Migrate API เพื่อย้ายสื่อ การย้ายบทความของคุณจะไม่สามารถใช้ ปลั๊กอินโยกย้าย!กระบวนการ!MigrationLookup.php/class/MigrationLookup) เพื่อเชื่อมโยงบทความกับสื่อแต่คุณสามารถสร้าง [ปลั๊กอินกระบวนการ](https://www.drupal.org/docs/8/api/migrate-api/migrate-process/writing-a-process-plugin) และใช้คอลัมน์นั้นใน CSV ของคุณเพื่อ ค้นหาเอนทิตีสื่อที่ถูกต้องในฐานข้อมูลโดยใช้ [Entity API](https://www.drupal.org/docs/drupal-apis/entity-api/introduction-to-entity-api-in-drupal-8)
mx flag
ใน Migrate Plus ปลั๊กอิน `entity_lookup` ดูเหมือนจะทำในสิ่งที่ฉันต้องการ ตัวอย่างที่ให้คือ _hooking_ โหนดไปยังเอนทิตีผู้ใช้ ฉันไม่รู้วิธีเปลี่ยนไปยังเอนทิตีสื่อ แต่นั่นฟังดูไม่ซับซ้อนเกินไป ฉันยังใหม่กับ Drupal ดังนั้นหากฉันสามารถหลีกเลี่ยงการเขียนปลั๊กอินได้...
in flag
@laurent `entity_lookup` สามารถทำสิ่งที่ฉันอธิบายได้ คุณเพียงแค่กำหนดค่าให้ชี้ไปทางขวา `entity_type` ("media"), `bundle` ("image"), `bundle_key` ("bundle") และที่สำคัญที่สุดคือ `value_key` - ชื่อเครื่องของ ฟิลด์ในเอนทิตีสื่อของคุณที่มีค่าที่ตรงกับค่าใน CSV บทความของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา