Score:0

วิธีบันทึกค่า ajaxified ในแบบฟอร์ม

ธง gb

ฉันเพิ่มการโทรกลับ ajax ลงในฟิลด์ที่เลือก

$form['field_equipe_membre']['widget']['#ajax'] = อาร์เรย์(
'callback' => 'ajax_desactive_unites_field_callback',
'เหตุการณ์' => 'เปลี่ยนแปลง',
'วิธีการ' => 'html',
'wrapper' => 'edit-field-unite-de-recherche-wrapper',
);

จากฟิลด์ triggering_element ฉันประสบความสำเร็จในการดึงค่าผ่านคำขอ db และเลือกค่านั้นในฟิลด์ที่เลือกอื่น

$trigger = $form_state->getTriggeringElement();
$selected_equipe = $trigger['#value'];
 
$แบบสอบถาม....

$response = ใหม่ AjaxResponse();
$content = '<option value=\"'.$row_unite['nid'].'\" Selected=\"selected\">'.$row_unite['title'].'</option>';
$response->addCommand( ใหม่ AppendCommand('#edit-field-unite-de-recherche', $content));
ส่งคืน $response;

แต่เมื่อฉันส่งแบบฟอร์ม ค่าที่เลือกโดยการโทรกลับจะไม่ถูกบันทึก

สายมายากลหรือวิธีการที่เหมาะสมในการทำเช่นนี้คืออะไร?

ฉันทดสอบ

$form_state->setRebuild();

ในการเรียกกลับ ; ฉันยังทดสอบ

$form_state->setValue('field_unite_de_recherche', $row_unite['nid']);
$form_state->setCached(จริง);

ฉันทดสอบโซลูชันที่เสนอที่ไหนสักแห่งในฟอรัมนี้เพื่อกำหนดฟิลด์ที่ซ่อนอยู่ใน hook_form_edit_alter

$form['product_id']['#type']='ซ่อน';
$form['product_id']['#prefix']='<div id="liberte_pid">';
$form['product_id']['#suffix']='</div>';

และบันทึกค่าในการเรียกกลับ

$form['product_id']['#value'] = อาร์เรย์(
  $row_unite['นิด'],
);

แต่ไม่มีวิธีแก้ปัญหาใดที่ให้ทางออกสำหรับฉัน

ฉันยังแดงที่ https://www.drupal.org/project/drupal/issues/2263569 หน้าแต่ไม่รู้ว่าต้องทำยังไง

ดังนั้น: จะบันทึกค่าที่เลือกนี้โดยการโทรกลับ ajax ได้อย่างไร

Jaypan avatar
de flag
ใน Drupal คุณไม่สามารถเพิ่มองค์ประกอบฟอร์มใน Ajax Callback ได้ ระบบจะเพิกเฉย จะต้องเพิ่มในคำนิยามของฟอร์ม ซึ่งแคชไว้ก่อนที่จะเรียกกลับ Ajax ดูบทช่วยสอนนี้ในวันก่อนที่แสดงตัวอย่างวิธีการทำ: https://www.jaypan.com/tutorial/drupal-form-api-ajax-form-and-results-same-page
cocq avatar
gb flag
ในกรณีของฉัน ฉันไม่ได้เพิ่ม form element ในการเรียกกลับของ ajax ฉันเลือกค่าที่เหมาะสมใน form element ที่มีอยู่จากคำขอ db จากคำขอของผู้ใช้ ฉันแดงลิงก์ของคุณอย่างระมัดระวัง (และฉันพยายามดัดแปลงโค้ดของฉันจากลิงก์นั้น) แต่มันถูกเข้ารหัสจากโปรแกรมที่สร้างขึ้นจากแบบฟอร์ม ในกรณีของฉันมันเป็นการสร้างแบบฟอร์มแบบโต้ตอบ ในตัวอย่างของคุณ ฉันไม่สามารถจัดการ "return $form['search_results'];" ในฟังก์ชัน "ajaxSubmit" อันที่จริง ฉันสงสัยว่าการจัดการ ajax สามารถทำได้จากการเขียนโปรแกรมสร้างฟอร์มเท่านั้น ฉันจะทดสอบสิ่งนี้ในภายหลัง ขอบคุณสำหรับลิงค์
Jaypan avatar
de flag
ฉันเห็นว่าคุณเพิ่ม `` แท็กใน ajax callback ของคุณ ดังนั้นคุณกำลังเพิ่มองค์ประกอบใน ajax callback ของคุณ คุณไม่สามารถเพิ่มอะไรในการเรียกกลับ ajax ได้ แบบฟอร์มนั้นถูกแคชไว้ ณ จุดนั้นแล้ว
cocq avatar
gb flag
ขออภัย ฉันไม่ได้เพิ่มค่า เป็นการเลือกค่าที่ถูกต้องในรายการเลือก แต่เมื่อพิจารณาว่า "แบบฟอร์มถูกแคชไว้แล้ว ณ จุดนั้น" เป็นเรื่องปกติที่การอัปเดตองค์ประกอบที่เลือกจะไม่มีประโยชน์!

โพสต์คำตอบ

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