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が、それも助けにはなりませんでした。
アディティアMP

3
ああ、実際に動作して申し訳ありません!私がやった$form['#submit'] = array('custom_food_orders_admin_submit');今、それは働いています。ありがとうございました!
アディティア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.