Score:0

ส่งค่าผ่าน URL ไปยังแบบฟอร์มแก้ไขโหนดและใช้เพื่อเปลี่ยนเส้นทางหลังจากบันทึกโหนด

ธง cn

ฉันมีโหนดที่มีชุดของมุมมองแบบฝังเมื่อแสดงฉันต้องส่งค่าผ่านอาร์กิวเมนต์ URL (http://example.org/node/x?id=y) เพื่อให้ผู้รับชมได้รับข้อมูลที่เหมาะสม ผู้ใช้ต้องสามารถแก้ไขโหนดนี้ได้ แต่เมื่อพวกเขาบันทึกและกลับไปที่โหนด โหนดจะสูญเสีย รหัส=y บางส่วนและจอแสดงผลไม่สมบูรณ์

ฉันรู้ว่าฉันสามารถใช้ hook_form_alter() เพื่อเปลี่ยนเส้นทาง แต่ฉันไม่รู้ว่าฉันจะเปลี่ยนเส้นทางได้อย่างไรหลังจากบันทึกโหนดโดยใช้อาร์กิวเมนต์ URL นั้น

gmak avatar
cn flag
@apaderno - ขอบคุณสำหรับการแก้ไขโพสต์ของฉันเพื่อให้ชัดเจน
in flag
คุณใช้ Drupal เวอร์ชันใด
gmak avatar
cn flag
ฉันใช้ Drupal 9
Score:0
ธง us

โดยใช้ hook_form_alter()คุณสามารถเพิ่มตัวจัดการการส่งที่กำหนดการเปลี่ยนเส้นทาง รหัสสำหรับตัวจัดการการส่งจะคล้ายกับรหัสต่อไปนี้

ฟังก์ชัน mymodule_node_edit_submit (อาร์เรย์ &$form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();
  $id = \Drupal::request()->query->get('id');
  $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()], [query => ['id' => $id]]);
}

รหัสสำหรับ hook_form_BASE_FORM_ID_alter() ก็จะเป็นสิ่งต่อไปนี้

ฟังก์ชัน mymodule_form_node_form_alter (&$form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();

  // เนื่องจากมีการเรียกใช้ hook นี้สำหรับทุก ๆ โหนด โปรดตรวจสอบประเภทเนื้อหาของมัน
  ถ้า ($node->getType() == 'ประเภทเนื้อหาที่คุณสนใจ') {
    $form['actions']['submit']['#submit'][] = 'mymodule_node_edit_submit';
  }
}

เดอะ hook_form_FORM_ID_alter() ควรตั้งชื่อการใช้งาน mymodule_form_node_<content_type_machine_name>_alter(). (แทนที่ โมดูลของฉัน ด้วยชื่อเครื่องโมดูล <content_type_machine_name> ด้วยชื่อเครื่องชนิดเนื้อหา) ในกรณีนี้ เนื่องจาก hook ถูกเรียกใช้เฉพาะสำหรับชนิดเนื้อหา จึงไม่จำเป็นต้องตรวจสอบชนิดเนื้อหาของโหนดก่อนที่จะเพิ่มตัวจัดการการส่ง

gmak avatar
cn flag
มีบางอย่างไม่ทำงาน หาก URL ของฉันคือ ```http://example.org/node/123?id=57``` หลังจากส่งแบบฟอร์มแล้ว ระบบจะเปลี่ยนเส้นทางไปที่ ```http://example.org/node/123?id ```. ดูเหมือนว่าพารามิเตอร์การค้นหา id จะไม่ได้รับการเพิ่ม ถ้าฉันทำ ```dpm($id)``` ในฟังก์ชันใดฟังก์ชันหนึ่ง มันจะแสดงเป็น NULL ซึ่งทำให้ฉันคิดว่าข้อความค้นหาไม่ถูกจับจากโหนดดั้งเดิม ฉันพลาดอะไรไปหรือเปล่า?

โพสต์คำตอบ

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