Score:0

สร้างฟอร์มใหม่ด้วย ajax (แก้ไขแล้ว)

ธง gb

ใน 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']['#ตัวเลือก']

โดยไม่มีความสำเร็จใดๆทำอย่างไรให้เปลี่ยนของเดิมไม่สร้างใหม่?

cocq avatar
gb flag
ฉันแก้ปัญหาสองข้อ หากต้องการแทนที่วิดเจ็ตที่มีอยู่ (เช่น : เพื่อหลีกเลี่ยงการสร้างวิดเจ็ตใหม่) : ใช้ id ของ div ของวิดเจ็ต ไม่ใช่ id ของวิดเจ็ต หากต้องการแทนที่อาร์เรย์ตัวเลือก: เลือก "html" เป็นเมธอดแทน "แทนที่"

โพสต์คำตอบ

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