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 () 제출 핸들러를 덮어 쓰기 때문에 system_settings_form () 함수를 처음 사용하는 목적을 상실하게됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.