ใน hook ฉันใช้ ajax บนฟิลด์ฟอร์ม ซึ่งออกแบบด้วย drupal user interface ประกาศไว้ดังนี้
$form['field_unite_de_recherche']['widget']['#ajax'] = อาร์เรย์(
'callback' => 'ajax_equipes_from_unites_callback',
'เหตุการณ์' => 'เปลี่ยนแปลง',
'วิธีการ' => 'แทนที่',
'wrapper' => 'แก้ไขฟิลด์-equipe-membre2',
);
ในฟังก์ชันการโทรกลับ ฉันดึงค่าบางค่าในฐานข้อมูลจากค่าที่เลือกใน field_unite_de_recherche :
$selected = $form_state->getValue('field_unite_de_recherche');
$query = \Drupal::database()->select(...);
$result = $query->execute();
ในขณะที่ ($row = $result->fetchAssoc()) {
$options[] = $row['ชื่อเรื่อง'];
}
จากนั้น ในฟังก์ชันการโทรกลับนี้ ฉันสร้างเวอร์ชันใหม่ของวิดเจ็ต :
$แบบฟอร์ม['field_equipe_membre2'] = [
'#type' => 'เลือก',
'#title' => 'สวมใส่ Membre2',
'#options' => $ตัวเลือก,
];
ส่งคืน $form['field_equipe_membre2'];
ครั้งแรกที่ฉันเลือกค่าในฟิลด์ "field_unite_de_recherche" ฟิลด์ "field_equipe_membre2" จะถูกสร้างขึ้นใหม่ด้วยค่าที่ถูกต้องจากฐานข้อมูล
ด้วยการเลือกใหม่ในฟิลด์ "field_unite_de_recherche" ค่าต่างๆ จะถูกดึงมาจากฐานข้อมูลอย่างดี แต่ฟิลด์ "field_equipe_membre2" จะไม่ได้รับการอัปเดตด้วยค่าใหม่
ฉันแน่ใจว่าค่าต่างๆ นั้นได้รับอย่างดีจากการเลือกที่สองนี้ เพราะฉันเขียนค่าเหล่านั้นในไฟล์ดังต่อไปนี้
$handle = fopen('debug.txt','w');
ในขณะที่ ($row = $result->fetchAssoc()) {
$options[] = $row['ชื่อเรื่อง'];
fputs($handle, $row['title']."\n");
}
fclose($จับ);
คำถามคือ: เหตุใด "field_equipe_membre2" จึงสร้างใหม่ในครั้งแรกเท่านั้น
ฉันแดงข้อความจำนวนหนึ่งในฟอรัมนี้:
- ไม่จำเป็นต้องใช้คำสั่ง "rebuild" เพราะมัน "รวม" ไว้ใน ajax
สั่งการ
- ไม่มีแคชสำหรับอาแจ็กซ์
ฉันดูโมดูลตัวอย่าง ajax ด้วย แต่พวกเขาไม่เกี่ยวข้องกับลักษณะเบ็ด
ใครสามารถให้คำแนะนำฉันได้บ้าง
อนึ่ง แม้ด้วย
'วิธีการ' => 'แทนที่',
ในการประกาศ ajax ฉันหลีกเลี่ยงการสร้างฟิลด์ "field_equipe_membre2" ใหม่ในแบบฟอร์มไม่สำเร็จ ฉันพยายามที่จะกลับ
$form['field_equipe_membre2']['#ตัวเลือก']
โดยไม่มีความสำเร็จใดๆทำอย่างไรให้เปลี่ยนของเดิมไม่สร้างใหม่?