Score:1

การโหลดและบันทึกโหนดโดยทางโปรแกรมไม่ได้อัปเดตฟิลด์ของฉัน แต่การแก้ไขและบันทึกด้วยตนเองทำ ทำไมความแตกต่าง?

ธง ng

ฉันได้ย้ายฟิลด์วันที่ D7 เป็น D9 Smart Date (แบบเกิดซ้ำ) ในระหว่างการย้ายข้อมูล ฉันได้แยกวิเคราะห์กฎการทำซ้ำเดิมและเติมลงในฟิลด์ D9 Smart Date ใหม่

อย่างไรก็ตาม วันที่เกิดซ้ำจะไม่แสดงใน Views เว้นแต่ฉันจะแก้ไขและบันทึกโหนดด้วยตนเองก่อน (โดยไม่ทำการเปลี่ยนแปลงใดๆ)

ปัญหาคือฉันมีโหนดหลายร้อยโหนดที่ต้องบันทึกใหม่และไม่มีวิธีการแบบโปรเกรสซีฟเลย การแก้ไขและบันทึกด้วยตนเองเท่านั้นที่บังคับให้กฎการทำซ้ำต้องทำสิ่งที่ต้องทำเพื่อให้ปรากฏขึ้น

ฉันได้ลองใช้ฟังก์ชันบันทึกโหนดของ Views Bulks Action แล้ว ฉันได้ลองใช้โมดูลบันทึกทั้งหมดแล้ว ฉันได้ลองสร้างสคริปต์ PHP เพื่อโหลดและบันทึกโหนดแล้ว

ไม่มีการทำงานเหล่านี้ สคริปต์ของฉันอยู่ด้านล่าง ความคิดใดที่ทำไมต้องบันทึกงานด้วยตนเองเท่านั้น

ป้อนคำอธิบายรูปภาพที่นี่

Jaypan avatar
de flag
โดยทั่วไปโหนดจะไม่ทำอะไรเมื่อบันทึกหากไม่มีการเปลี่ยนแปลงค่าใดๆ
quantumized avatar
ng flag
ฉันเพิ่งแก้ไขสคริปต์เพื่อเปลี่ยน Sticky เป็น True และยังใช้งานไม่ได้ ดังนั้นโหนดกำลังบันทึก แต่อะไรก็ตามที่ฟิลด์ Smart Date ต้องทำจะทำงานเฉพาะเมื่อโหนดถูกบันทึกด้วยตนเองเท่านั้น มีวิธีการเลียนแบบการบันทึกโหนดด้วยตนเองผ่านรหัสหรือไม่? ไม่แน่ใจว่าความคลาดเคลื่อนมาจากไหน
Jaypan avatar
de flag
เป็นไปได้ว่าโมดูลมีฟังก์ชันบางอย่างที่กำลังดำเนินการในการบันทึกฟอร์ม แทนที่จะบันทึกเอนทิตี ฉันจะอ่านโมดูลและดูที่คำนิยามของฟอร์มและ/หรือฟอร์มใด ๆ ที่แก้ไข hooks เพื่อดูว่าพวกเขากำลังทำอะไรแบบนั้นอยู่หรือไม่
quantumized avatar
ng flag
ขอขอบคุณ. นั่นสมเหตุสมผลแล้ว มีวิธีการบันทึกแบบฟอร์มโดยทางโปรแกรมหรือไม่?
Jaypan avatar
de flag
ใน Drupal 7 คุณสามารถใช้ drupal_form_submit() บันทึกการเปลี่ยนแปลงนี้ (https://www.drupal.org/node/2121003) บอกว่าคุณสามารถใช้ `\Drupal::formBuilder()->submitForm()` ฉันไม่รู้กลไกของมันแม้ว่า
Score:1
ธง cn

ความคิดใดที่ทำไมต้องบันทึกงานด้วยตนเองเท่านั้น

ตามที่ Jaypan กล่าวไว้ในความคิดเห็น นี่เป็นเพราะ Drupal จะไม่บันทึกโหนดหากไม่มีอะไรเปลี่ยนแปลง

เมื่อคุณ ส่งแบบฟอร์มสำหรับนิติบุคคล ซึ่งมีวันที่สร้าง/เปลี่ยนแปลง (เช่น Imposs อินเทอร์เฟซที่เปลี่ยนแปลงเอนทิตี) มันทำสิ่งนี้:

ถ้า (อินสแตนซ์ $entity ของ EntityChangedInterface) {
  $entity->setChangedTime($this->time->getRequestTime());
}

ซึ่งเปลี่ยนแปลงค่าฟิลด์ บังคับให้เอนทิตีบันทึก

คุณสามารถใช้วิธีการเดียวกันนี้เพื่อบังคับให้บันทึกในรหัสของคุณ

quantumized avatar
ng flag
ขอบคุณสำหรับข้อมูล @Clive ฉันหวังว่ามันจะเป็นอะไรที่ง่ายเหมือนที่คุณแนะนำ แต่เมื่อฉันเปลี่ยน Sticky จาก False เป็น True และบันทึก Smart Date อีกครั้ง ก็ยังไม่ได้ทำ มันเป็นเวทมนตร์ที่เกิดขึ้นเมื่อทำการบันทึกด้วยตนเอง มีคนแนะนำว่าบางทีโมดูลกำลังทำสิ่งพิเศษที่เกิดขึ้นเฉพาะระหว่างการแก้ไข/บันทึกฟอร์มโหนด แต่ฉันไม่สามารถหาวิธีบันทึกฟอร์มโดยทางโปรแกรมได้
cn flag
มีตัวอย่างที่นี่: https://drupal.stackexchange.com/questions/253009/how-to-call-submit-form-from-another-page-in-custom-module - ปัญหาคือมันเป็นรูปแบบเอนทิตี ไม่ใช่ ง่ายมากที่จะเติมค่าการส่ง จะมีวิธี API อื่นสำหรับสิ่งนั้นเช่นกัน แต่แบบฟอร์มนั้นค่อนข้างยุ่งยากในการทำงานกับโปรแกรม (จากภายนอกเป็นอย่างน้อย) อาจใช้ความพยายามน้อยลงในการดูรหัสในโมดูลวันที่อัจฉริยะและดูว่ากำลังทำอะไรผิดปกติหรือไม่
Jaypan avatar
de flag
ใช่ คุณอาจต้องดึงโค้ดออกจากโมดูลและวางไว้ใน hook_update_N() หรือสร้างสคริปต์ drush ที่ทำสิ่งเดียวกัน

โพสต์คำตอบ

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