ฉันจะใช้ส่งโทรกลับในแบบฟอร์มการตั้งค่าผู้ดูแลระบบ Drupal ได้อย่างไร


14

ฉันใช้รหัสนี้เพื่อสร้างแบบฟอร์มผู้ดูแลระบบของฉัน:

function custom_orders_admin(){
  $form = array();

  $form['custom_ignore_terms']['ignore_terms'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Don\'t display these'),
    '#default_value' => variable_get('custom_ignore_terms', array()),
    '#options' => drupal_map_assoc($termTypes),
    '#description' => t("Choose the terms you do not want displayed."),
    '#required' => FALSE,
  );

  return system_settings_form($form);
}

แต่ฉันสังเกตว่าถ้าฉันทำสิ่งนี้:

function custom_orders_admin_submit($form, &$form_state) {
  exit(var_dump($form_state));
}

ฉันออกไม่ได้ ฉันเดาว่านี่เป็นเพราะsystem_settings_form()ดูแลการส่ง ฉันจะควบคุมกลับได้อย่างไร ฉันต้องทำการประมวลผลที่กำหนดเองในตัวจัดการ _submit นั้น ...


ฉันพยายามเพิ่ม'#submit'คุณสมบัติ$formแต่ก็ไม่ได้ช่วยอะไร
Aditya MP

3
เอ่อขอโทษที่ใช้งานได้จริง! ฉันทำ$form['#submit'] = array('custom_food_orders_admin_submit');และตอนนี้ก็ใช้งานได้ ขอขอบคุณ!
Aditya MP

คำตอบ:


30

ตัวจัดการการส่งเริ่มต้นของการ$form_id . '_submit'ยิงเท่านั้นหากไม่มีการตั้งตัวจัดการการส่งอื่น ๆ

เนื่องจาก system_settings_form () ตั้งค่าตัวจัดการการส่งตัวจัดการเริ่มต้นจึงไม่เริ่มทำงานดังนั้นคุณต้องระบุหากคุณต้องการใช้

คุณสามารถทำเช่นนี้:

/**
 * A custom form.
 */
function custom_form() {
  $form = array();

  $form['custom_form_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Custom form field'),
    '#default_value' => variable_get('custom_form_field', ''),
  );

  // Set a submit handler manually because the default submit handler
  // gets overridden by the system_settings_form() submit handler.
  $form['#submit'][] = 'custom_form_submit';

  return system_settings_form($form);
}

/**
 * Submit handler for the custom form.
 */
function custom_form_submit($form, &$form_state) {
  // Submit code here.
}

การเพิ่มตัวจัดการการส่งของคุณเช่นนี้หมายความว่าคุณจะทำงานก่อนที่ system_settings_form () ส่งตัวจัดการ

หากคุณต้องการให้คุณทำงานแทน:

// Set a submit handler manually because the default submit handler
// gets overridden by the system_settings_form() submit handler.
$form['#submit'][] = 'custom_form_submit';

return system_settings_form($form);

ทำ:

$form = system_settings_form($form);
$form['#submit'][] = 'custom_form_submit';
return $form;

อย่าทำสิ่งนี้แม้ว่า:

$form = system_settings_form($form);
$form['#submit'] = array('custom_form_submit');
return $form;

เพราะนั่นจะเขียนทับ system_sttings_form () submit handler ซึ่งจะกำจัดจุดประสงค์ของการใช้ system_settings_form () ฟังก์ชั่นในสถานที่แรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.