Score:-1

การเรียกกลับแบบกำหนดเองของ drupal ในรูปแบบการแก้ไขโหนดไม่ทำงาน

ธง eg

ฉันค่อนข้างใหม่สำหรับ drupal ฉันได้เพิ่มปุ่มแบบกำหนดเองลงในหน้าแก้ไขประเภทเนื้อหา เมื่อฉันคลิกที่ปุ่มนั้นฉันต้องการเรียกใช้ฟังก์ชัน แต่ดูเหมือนว่าจะไม่เรียกใช้ฟังก์ชันเมื่อฉันเห็นคอนโซล ฉันเห็น drupa ajax เกิดข้อผิดพลาดเมื่อใดก็ตามที่ฉันคลิกปุ่ม โปรดแจ้งให้เราทราบว่าฉันทำอะไรผิดที่นี่

ฟังก์ชัน mymodule_form_node_program_edit_form_alter (&$form, FormStateInterface $form_state) {
  $form['สมัคร'] = array(
    '#type' => 'ส่ง',
    '#value' => t('สมัคร'),
    '#น้ำหนัก' => '9',
    '#executes_submit_callback' => เท็จ
    '#limit_validation_errors' => อาร์เรย์(),
    '#ajax' => อาร์เรย์(
      'callback' => 'button_test_callback',
    ),
  );
}
    ฟังก์ชัน button_test_callback (อาร์เรย์ &$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  echo '<script>alert("ยินดีต้อนรับ")</script>';
  คืนฟอร์ม $;
}

ข้อผิดพลาดที่ฉันได้รับ:

ยังไม่ได้จับ Drupal.AjaxError {ข้อความ: "\nเกิดข้อผิดพลาด AJAX HTTP\nรหัสผลลัพธ์ HTTP: 50â¦\Core\DrupalKernel->handle(Object) (บรรทัด: 19)\n", ชื่อ: "AjaxError"} ข้อความ: "\nเกิดข้อผิดพลาด AJAX HTTP\nรหัสผลลัพธ์ HTTP: 500\nข้อมูลการดีบักตามมา\nเส้นทาง: /node/680911/edit?destination=/admin/content&ajax_form=1\nStatusText: ข้อผิดพลาด\nResponseText: เว็บไซต์พบข้อผิดพลาด เกิดข้อผิดพลาดที่ไม่คาดคิด โปรดลองอีกครั้งในภายหลัง Symfony\Component\HttpKernel\Exception\HttpException: การโทรกลับ #ajax ที่ระบุว่างเปล่าหรือไม่สามารถโทรได้ใน Drupal\Core\Form\FormAjaxResponseBuilder->buildResponse() (บรรทัดที่ 67 ของ core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php) Drupal\Core\Form\EventSubscriber\FormAjaxSubscriber->onException(Object, 'kernel.exception', Object)\ncall_user_func(Array, Object, 'kernel.exception', Object) (บรรทัด: 111)\nDrupal\Component\EventDispatcher\ ContainerAwareEventDispatcher->dispatch('kernel.exception', Object) (บรรทัด: 227)\nSymfony\Component\HttpKernel\HttpKernel->handleException(Object, Object, 1) (บรรทัด: 79)\nSymfony\Component\HttpKernel\HttpKernel- >ที่จับ (วัตถุ 1, 1) (บรรทัด: 67)\nDrupal\simple_oauth\HttpMiddleware\BasicAuthSwap->ที่จับ (วัตถุ 1, 1) (บรรทัด: 57)\nDrupal\Core\StackMiddleware\Session->ที่จับ (วัตถุ , 1, 1) (บรรทัด: 47)\nDrupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (บรรทัด: 106)\nDrupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1 ) (บรรทัด: 85)\nDrupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (บรรทัด: 49)\nAsm89\Stack\Cors->handle(Object, 1, 1) (บรรทัด: 50) \nDrupal\ban\BanMiddleware->handle(Object, 1, 1) (บรรทัด: 47)\nDrupal\Core\StackMiddleware\ReverseProxyMiddleware->han dle(Object, 1, 1) (บรรทัด: 52)\nDrupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (บรรทัด: 23)\nStack\StackedHttpKernel->handle(Object, 1, 1) (บรรทัด: 708)\nDrupal\Core\DrupalKernel->ที่จับ (วัตถุ) (บรรทัด: 19)\n"

Score:0
ธง de

คุณกำลังใช้คำจำกัดความการโทรกลับ D7 ต้องกำหนดให้เป็นการโทรกลับ D8+ ดังนั้น:

ฟังก์ชัน button_test_callback ($form, &$form_state) {

ควรเป็น:

ฟังก์ชัน button_test_callback (อาร์เรย์ &$form, \Drupal\Core\Form\FormStateInterface $form_state) {
vyshnavi avatar
eg flag
ฉันเปลี่ยนเป็นสิ่งนี้ยังคงได้รับข้อผิดพลาดเหมือนเดิม ดูเหมือนว่าฟังก์ชัน button_test_callback จะไม่ถูกเรียกใช้
Jaypan avatar
de flag
ฉันอัปเดตรหัสแล้ว ไม่มีเครื่องหมายทับ ดังนั้นคุณควรลองใช้รหัสที่อัปเดต นอกจากนี้ `button_test_callback()` อยู่ในไฟล์ใด
vyshnavi avatar
eg flag
มันยังใช้งานไม่ได้ ปุ่ม_test_callback อยู่ในไฟล์เดียวกัน ฉันต้องการเปลี่ยนค่าของฟิลด์โหนดเมื่อฉันคลิกปุ่มกำหนดเองในแบบฟอร์มแก้ไขโหนดโดยไม่ต้องส่งแบบฟอร์มแก้ไขโหนด
Jaypan avatar
de flag
"ในไฟล์เดียวกัน"
vyshnavi avatar
eg flag
เป็นไฟล์โมดูลที่กำหนดเอง , course_program.module
Jaypan avatar
de flag
ตกลงนั่นควรจะใช้งานได้แล้ว โปรดอัปเดตโพสต์ต้นฉบับเพื่อแสดงรหัสปัจจุบันของคุณ
vyshnavi avatar
eg flag
ฉันอัปเดตรหัสแล้ว ฉันได้รับ Uncaught Drupal.AjaxError ตามที่ฉันกล่าวถึงในคำถามทุกครั้งที่ฉันคลิกปุ่ม
Jaypan avatar
de flag
หากนั่นคือรหัสปัจจุบันของคุณ คุณต้องส่งคืนค่าจากการโทรกลับของ ajax
vyshnavi avatar
eg flag
คุณช่วยยกตัวอย่างได้ไหม
Jaypan avatar
de flag
ในการทดสอบ ให้เพิ่ม `return $form;` ใน ajax callback ของคุณ
vyshnavi avatar
eg flag
ฉันเพิ่ม return $form และฉันได้อัปเดตรหัสในคำถามด้วย แต่ยังไม่เริ่มทำงาน ฉันยังคงได้รับข้อผิดพลาด ajax ในคอนโซล
Jaypan avatar
de flag
การโทร `echo` นั้นอาจทำให้คุณมีปัญหา คุณลองโดยไม่ทำอย่างนั้นเหรอ?
vyshnavi avatar
eg flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/128913/discussion-between-vyshnavi-and-jaypan)
vyshnavi avatar
eg flag
สวัสดี jaypan หลังจาก reomving echo ข้อผิดพลาดไม่ปรากฏขึ้น แต่ฉันต้องการเปลี่ยนค่าฟิลด์ $form['field_text_plain']['widget'][0]['value']['#value'] = '75433g'; แต่มันไม่แสดง ฉันต้องส่งมูลค่ากลับหรือไม่
Jaypan avatar
de flag
ยินดีต้อนรับสู่ Drupal Answers ซึ่งเป็นไซต์รูปแบบหนึ่งคำถามหนึ่งคำตอบ คำถามเกี่ยวกับการโทรกลับที่ว่างเปล่าของคุณได้รับการแก้ไขแล้ว ดังนั้นคำถามที่คุณเพิ่งถามจึงเป็นคำถามใหม่ โปรดทำเครื่องหมายคำถามนี้ว่าแก้ไขแล้ว จากนั้นเปิดหัวข้อใหม่สำหรับปัญหานั้น
vyshnavi avatar
eg flag
โอ้ แน่นอน ขอบคุณสำหรับความช่วยเหลือของคุณ :)

โพสต์คำตอบ

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