Score:0

วิธีการผนวกเขตข้อมูลกับวัตถุโหนดโดยทางโปรแกรมเมื่อทำการโคลนด้วย createDuplicate()

ธง in

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

  • ชื่อเรื่อง (ชื่อเรื่อง)
  • ร่างกาย (ร่างกาย)
  • วันที่ (field_date_agenda)

  • ชื่อเรื่อง (ชื่อเรื่อง)
  • ร่างกาย (ร่างกาย)
  • วันที่ (field_date_agenda)
  • จำนวนรายการ (field_int_how_many)
  • อ้างอิงถึง (field_noderef_nta)

กับ $cloned_node = $node->createDuplicate() ฉันสามารถคัดลอกฟิลด์ทั้งหมดจาก รวมทั้งสามารถเปลี่ยนประเภทเนื้อหาเป็น .
เนื่องจาก ไม่มีฟิลด์เพิ่มเติมที่แนบมากับมัน สร้างซ้ำ () จะไม่คัดลอกพวกเขา

ตอนนี้ สิ่งที่ฉันต้องการทำคือเพิ่มฟิลด์อื่นๆ โดยทางโปรแกรม (ซึ่งฉันจะเติมด้วยค่าที่กำหนดเอง) ให้กับ $cloned_node. เมื่อการกระทำเหล่านี้เสร็จสิ้น $cloned_node->บันทึก() จะถูกใช้เพื่อสิ้นสุดกระบวนการโคลนนิ่ง

เพียงเพิ่มมูลค่าผ่าน $cloned_node->set("field_int_how_many", $value) ดูเหมือนจะไม่ทำเคล็ดลับ: เกิดข้อผิดพลาด PHP

InvalidArgumentException: ไม่รู้จักฟิลด์ field_int_how_many ใน Drupal\Core\Entity\ContentEntityBase->getTranslatedField() (บรรทัดที่ 587 ของ /home/username/domains/domainname.com/public_html/devsite/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php)

ใครบ้างมีความคิดที่จะเพิ่มฟิลด์พิเศษเหล่านั้นไปยังโหนดโคลน

Score:3
ธง us

ถ้าเนื้อหาประเภท $โหนด เป็น ชนิดเนื้อหาของโหนดที่ส่งคืนโดย $node->createDuplicate() ยังคงเป็น . นั่นเป็นเหตุผล $node->createDuplicate()->set("field_int_how_many", $value) ส่งคืนข้อผิดพลาดโดยบอกว่า field_int_how_many เป็นฟิลด์ที่ไม่รู้จัก: ประเภทเนื้อหา ไม่มีฟิลด์นั้น

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

$new_node = โหนด::สร้าง(
  'ประเภท' => 'B',
  'title' => $node->title,
  'body' => $node->body,
  'field_date_agenda' => $node->field_data_agenda,
  'field_int_how_many' => /* ค่าที่จะกำหนดให้กับฟิลด์ */
);
in flag
ขอบคุณมากสำหรับคำตอบที่รวดเร็วและชัดเจน ฉันจะให้มันไป

โพสต์คำตอบ

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