นำเข้า CSV เพื่อโยกย้าย Drupal 7 ถึง 8 - คู่มือฉบับสมบูรณ์
เผยแพร่แล้ว: 2020-02-11การโยกย้าย Drupal 7 ถึง 8 ไม่ใช่เรื่องที่น่าเบื่อเพราะมีหลายวิธีในการย้ายข้อมูล! ขึ้นอยู่กับความซับซ้อนของโครงการ เราสามารถเลือกเทคนิคที่เหมาะสมที่สุดได้ สิ่งที่เรากำลังจะพูดถึงในบล็อกนี้คือการย้ายเนื้อหาและการกำหนดค่าจาก Drupal 7 ไปยัง Drupal 8 โดยใช้วิธีนำเข้า CSV

Drupal มีโมดูลต่างๆ สำหรับการนำเข้าข้อมูลจากแหล่งต่างๆ เช่น JSON, XML และ CSV ระบบ API การโยกย้ายหลักของ Drupal 8 มีชุด API ทั้งหมดที่สามารถจัดการการย้ายข้อมูลประเภทใดก็ได้จาก Drupal เวอร์ชันก่อนหน้าไปยัง Drupal 8
งานเตรียมการบางอย่างก่อนการโยกย้าย Drupal 7 ถึง 8
ในการโยกย้ายจาก Drupal 7 ไปยัง Drupal 8 โดยใช้การนำเข้า CSV เราจำเป็นต้องมีโมดูลเหล่านี้
โมดูล Drupal 7 -
ดูการส่งออกข้อมูล : โมดูลนี้ต้องได้รับการติดตั้งในไซต์ Drupal 7 ของเรา โมดูล Views Data export ช่วยในการส่งออกข้อมูลในรูปแบบ CSV
ดูฟิลด์รหัสผ่าน : โมดูลนี้ช่วยในการย้ายรหัสผ่านซึ่งจะส่งรหัสผ่านในรูปแบบที่แฮช
โมดูล Drupal 8 -
โยกย้าย - โมดูล Drupal 8 Migrate ช่วยในการดึงข้อมูลจากแหล่งต่าง ๆ ไปยัง Drupa 8
Migrate Plus – โมดูล Drupal 8 นี้จะช่วยในการจัดการข้อมูลต้นทางที่นำเข้า
โยกย้าย Drupal – โมดูลนี้ให้การสนับสนุนในการย้ายเนื้อหาและการกำหนดค่าไปยัง Drupal 8
โยกย้ายซอร์ส CSV – โมดูลนี้มีปลั๊กอินต้นทางที่สามารถโยกย้ายเอนทิตีและเนื้อหาไปยัง Drupal 8 จากไฟล์ .csv
Migrate Tools – โมดูล Drupal 8 นี้ช่วยด้วยการนำเสนอเครื่องมือ UI/คำสั่ง Drush เพื่อจัดการการย้ายข้อมูล
โมดูลการพัฒนาการกำหนดค่า - โมดูลนี้ช่วยในการนำเข้าไฟล์การกำหนดค่าไปยัง Drupal 8
ให้การโยกย้าย Drupal 8 เริ่มต้นขึ้น!
อันดับแรกเราต้องสร้างโมดูลที่กำหนดเองสำหรับเรา Drupal 8 การโยกย้าย ชื่อ Let 's โมดูลนี้เป็นtest_migrate และเรารู้ว่าหลังจากสร้าง โมดูลที่กำหนดเองแล้ว เราจำเป็นต้องสร้าง ไฟล์ info.yml

ปุ่มหน้าจอการแสดงดังกล่าวข้างต้นที่จำเป็นสำหรับinfo.yml
เมื่อสร้าง ไฟล์ info.yml แล้ว เราจำเป็นต้องสร้างกลุ่มการย้ายข้อมูลสำหรับการย้ายข้อมูล กลุ่มการอพยพครั้งนี้จะต้องมีการสร้างขึ้นในเส้นทาง: test_migration> การตั้งค่า> การติดตั้ง ชื่อของกลุ่มที่ควรจะmigrate_plus.migration_group.test_migration.yml

ภาพหน้าจอด้านบนแสดงโครงสร้างโฟลเดอร์เพื่อสร้างกลุ่มการย้ายข้อมูล
ภายใน ไฟล์ migrate_plus.migration_group.test_migration.yml เราจำเป็นต้องเขียน id ป้ายกำกับ และคำอธิบายสำหรับกลุ่มการย้ายข้อมูลซึ่งแสดงในภาพหน้าจอด้านล่าง

หลังจากสร้างกลุ่มการโยกย้าย เราจำเป็นต้องติดตั้งกลุ่มนี้ใน ไฟล์ info.yml ของเรา

ตอนนี้ เราจะเขียนสคริปต์การย้ายข้อมูลสำหรับผู้ใช้, คำศัพท์อนุกรมวิธาน, ย่อหน้า, ประเภทเนื้อหา โปรดทราบว่าคุณกำลังย้ายข้อมูลในลำดับเดียวกัน เนื่องจากจะมีลิงก์ระหว่างเอนทิตีเหล่านี้ ตัวอย่างเช่น เนื้อหาจะถูกสร้างขึ้นโดยผู้ใช้รายใดรายหนึ่ง ดังนั้นก่อนอื่น เราต้องย้ายผู้ใช้ และหลังจากการจัดหมวดหมู่แล้ว ประเภทของเนื้อหา
ตอนนี้ มาเขียนสคริปต์ใน ไฟล์ yaml สำหรับการโยกย้ายผู้ใช้ ดังนั้น ในการเขียนการโยกย้ายผู้ใช้ เราจำเป็นต้อง มีไฟล์ yaml ของ ผู้ใช้ ชื่อ migrate_plus.migration.test_migration_users.yml และสคริปต์สำหรับการย้ายข้อมูลแสดงอยู่ด้านล่าง

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


เส้นทาง - ระบุเส้นทางสำหรับไฟล์ csv
header_row_count - จะให้นับแถวซึ่งเป็นส่วนหัวของคอลัมน์ใดคอลัมน์หนึ่ง
คีย์ - ซึ่งควรไม่ซ้ำกันสำหรับทุกแถว
กระบวนการ - ในที่นี้ เรากำลังจับคู่ไฟล์ csv กับฟิลด์

ภาพด้านบนแสดงการแมประหว่างฟิลด์และ csv ในที่นี้ ชื่อคือชื่อเครื่องของฟิลด์ชื่อผู้ใช้ และชื่อคือชื่อคอลัมน์ csv ถ้าเรามีหลายข้อมูลในฟิลด์เดียว เราจะใช้ตัวคั่น ผู้ใช้อาจมีบทบาทหลายอย่างในกรณีที่เราเขียนตามที่แสดงในภาพด้านบน
รูปภาพถูกย้ายโดยการเขียนปลั๊กอินที่กำหนดเอง ปลั๊กอินที่กำหนดเองสามารถเขียนได้ในเส้นทาง src> ปลั๊กอิน> โยกย้าย> กระบวนการ ในภาพด้านบน คุณจะเห็นว่า user_image_import_process เป็นปลั๊กอินที่กำหนดเองซึ่งเขียนขึ้นเพื่อโยกย้ายรูปภาพของผู้ใช้

ภายใน UserImportProcess.php เรากำลังเขียนฟังก์ชันซึ่งจะคัดลอกรูปภาพและบันทึกไปยังปลายทาง สคริปต์แสดงอยู่ในภาพด้านล่าง

เพื่อที่จะระบุที่ภาพจะถูกบันทึกไว้เราจะเขียนหนึ่งImageImportprocess ฟังก์ชั่นอื่น ๆ อีกมากมาย ในฟังก์ชันนั้นเราจะพูดถึงชื่อเครื่องของภาพ

ใน ไฟล์ info.yml ของ ผู้ใช้ จะมีส่วนปลายทางซึ่งจะระบุตำแหน่งที่จะจัดเก็บข้อมูลที่ย้ายและส่วนใดที่เป็นเอนทิตี สิ่งนี้ถูกทำเครื่องหมายในภาพด้านล่าง

หลังจากสร้างโค้ดสำหรับผู้ใช้แล้ว เราต้องเขียน yaml สำหรับเงื่อนไขการจัดหมวดหมู่ โปรดทราบว่าหากคุณมีเพียงฟิลด์ชื่อในอนุกรมวิธานของคุณ คุณไม่จำเป็นต้องเขียนไฟล์ yaml แยกต่างหาก หากคุณมีหลายฟิลด์ในอนุกรมวิธาน คุณจะต้องเขียนไฟล์ yaml แยกต่างหาก ในแง่อนุกรมวิธาน เราจะมี tid เป็นคีย์ เนื่องจาก tid จะไม่ซ้ำกันสำหรับแต่ละเทอม

หลังจากนี้เราจะย้ายย่อหน้า เพื่อที่เราต้องสร้างไฟล์ yaml แยกต่างหาก รหัสที่จะย้ายจะแสดงอยู่ในภาพด้านล่าง

สุดท้ายนี้ ให้ย้ายข้อมูลประเภทเนื้อหา ไฟล์ yaml สำหรับประเภทเนื้อหาแสดงในโค้ดด้านล่าง
label : 'ย้ายข้อมูลประเภทเนื้อหาจากไฟล์ csv'
Migration_group : test_migration
ที่มา : id : test_migration_content
ปลั๊กอิน : csv

# เส้นทางแบบเต็มไปยังไฟล์
เส้นทาง : 'modules/custom/test_migrate/assets/csv/content.csv'
header_row_count : 1
กุญแจ :
- นิด
กระบวนการ :
# การเพิ่มการแมประหว่างฟิลด์และคอลัมน์ csv
title : title
โปรโมท : promoted_to_front_page
เหนียวหนึบ : เหนียวหนึบ
field_display_name : display_name
field_marketing_tagline : marketing_tagline
field_taxonomy :
ปลั๊กอิน :entity_lookup
ที่มา : Taxonomy
entity_type : taxonomy_term
Bundle_key : vid
มัด : อนุกรมวิธาน
value_key : ชื่อ
body/value : body
เนื้อหา/รูปแบบ :
ปลั๊กอิน : default_value
default_value : "full_html"
field_paragraph :
- ปลั๊กอิน : ระเบิด
ตัวคั่น : "|"
ที่มา : fcid
- ปลั๊กอิน : skip_on_empty
วิธีการ : กระบวนการ
- ปลั๊กอิน : migration_lookup
การโยกย้าย : test_migration_paragraphs
no_stub : จริง
- ปลั๊กอิน : iterator
กระบวนการ :
target_id : '0'
target_revision_id : '1'
ปลายทาง :
ปลั๊กอิน : 'entity:node'
default_bundle : เนื้อหา
Migration_dependencies :
ต้องการ :
- test_migration_paragraph
- test_migration_taxonomy
การพึ่งพา : { }
หลังจากเขียนไฟล์ yaml ทั้งหมดแล้ว การย้ายข้อมูล test_migrate.info.yml จะ มีการติดตั้งด้านล่าง

เมื่อคุณทำตามขั้นตอนเหล่านี้เสร็จแล้ว ให้ไปที่ไซต์ของคุณและติดตั้งโมดูลที่กำหนดเองของคุณ

ถัดไป ไปที่โปรเจ็กต์ของคุณในเทอร์มินัลแล้วรัน คำสั่ง “drush ms” เพื่อตรวจสอบสถานะการย้ายข้อมูลดังแสดงในภาพด้านล่าง

การใช้คำสั่งโยกย้าย drush MIM การโยกย้าย-ID เราสามารถเห็นรหัสการโยกย้ายในภาพด้านบน
เมื่อเสร็จแล้ว หากคุณตรวจสอบสถานะการย้าย คุณจะเห็นจำนวนรายการที่ย้าย

ตอนนี้คุณสามารถสังเกตได้ว่ามีการย้ายเนื้อหาทั้งหมด หากมีข้อผิดพลาดในการย้ายข้อมูล กระบวนการจะยุติที่อินสแตนซ์นั้น ตรวจสอบปัญหาของเนื้อหานั้น จากนั้นคุณสามารถเริ่มการย้ายข้อมูลได้อีกครั้ง
สิ่งที่ต้องจำ
หากการย้ายข้อมูลถูกยกเลิกในระหว่างกระบวนการ สถานะของการย้ายข้อมูลจะแสดงเป็น "กำลังนำเข้า" เพื่อที่จะเปลี่ยนสถานะเป็นว่างคุณจำเป็นต้องเรียกใช้คำสั่ง drush นางโยกย้ายรหัส ต่อไป ให้รันคำสั่ง drush mim migration-id
หากคุณต้องการย้อนกลับเนื้อหาที่ย้าย ให้รันคำสั่ง drush mr migration-id
หากคุณมีการเปลี่ยนแปลงอะไรในรหัสหลังจากเริ่มต้นกระบวนการโยกย้ายแล้วให้แน่ใจว่าคุณเรียกใช้คำสั่ง drush CDI test_migration คำสั่งนี้จะช่วยให้คุณสะท้อนถึงการเปลี่ยนแปลงในขณะย้ายข้อมูล เมื่อเสร็จแล้ว ให้ตรวจสอบไซต์ของคุณอย่างละเอียดเพื่อดูว่ามีการย้ายเนื้อหาทั้งหมดหรือไม่
