Drupal yönetici ayarları formunda geri gönderme isteği nasıl kullanabilirim?


14

Yönetici formumu yapmak için bu kodu kullanıyorum:

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);
}

Ama bunu yaparsam:

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

Çıkamam. Sanırım bunun nedeni system_settings_form(), gönderimi önemsiyor. Kontrolümü nasıl geri alabilirim? Bu _submit işleyicisinde bazı özel işlemler yapmam gerekiyor ...


Bir '#submit'özellik eklemeyi denedim $formama bu da yardımcı olmadı.
Aditya MP

3
Ah, gerçekten işe yaradığı için üzgünüm! Yaptım $form['#submit'] = array('custom_food_orders_admin_submit');ve şimdi çalışıyor. Teşekkür ederim!
Aditya MP

Yanıtlar:


30

Varsayılan gönderme işleyicisi $form_id . '_submit'yalnızca başka bir gönderme işleyicisi ayarlanmamışsa tetiklenir.

System_settings_form () bir gönderme işleyicisi ayarladığından, varsayılan işleyici tetiklenmez, bu nedenle kullanmak istiyorsanız belirtmeniz gerekir.

Bunu şöyle yapabilirsiniz:

/**
 * 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.
}

Gönderme işleyicinizi böyle eklemek, sizinki system_settings_form () gönderme işleyicisinden önce çalıştırılacağı anlamına gelir.

Sizinkinin daha sonra yayınlanmasını istiyorsanız:

// 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);

Yapmak:

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

Yine de bunu yapmadığınızdan emin olun:

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

çünkü bu, system_sttings_form () gönderme işleyicisinin üzerine yazacaktır;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.