「system_settings_form」はブードゥー教ですか?


8

友達がフォームの設定ファイルでsystem_settings_formの動作を見せてくれました。

問題のコードは次のようになります(簡略化)。

function my_module_generateAdminForm($form){
  $form = array();
  $form['super_secret_password'] = array(
    '#type' => 'textfield',
    '#title' => t('Headline'),
    '#default_value' => variable_get('super_secret_password','password'),
  );
  system_settings_form($form);
}

system_settings_formは送信ボタンを追加し、フォーム送信を処理して変数を保存します。また、「デフォルトにリセット」ボタンを追加します-すべての変数をデフォルトにリセットします。

私は基本的にそれが何をしているのかを推測しました。なぜならそこにはたくさんのドキュメントがなく、私の友人もそれが何をするのか正確に知らないからです。私の質問は、保存/リセットする変数をどのようにして知るのですか?配列を渡すだけではないですか?

また、system_settings_formには他に知っておくべき魔法がありますか?

回答:


14

参照system_settings_formsystem_settings_form_submitを実装の詳細のために。Drupal 7では、[システム設定]フォームから[デフォルトにリセット]ボタンが削除されました。

function system_settings_form($form) {
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );

  if (!empty($_POST) && form_get_errors()) {
    drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
  }
  $form['#submit'][] = 'system_settings_form_submit';
  // By default, render the form using theme_system_settings_form().
  if (!isset($form['#theme'])) {
    $form['#theme'] = 'system_settings_form';
  }
  return $form;
}

System_settings_form:

Addの保存設定の[送信]ボタンとsystem_settings_form_submit関数へのコールバックを送信します。

system_settings_form_submit:

function system_settings_form_submit($form, &$form_state) {
  // Exclude unnecessary elements.
  form_state_values_clean($form_state);

  foreach ($form_state['values'] as $key => $value) {
    if (is_array($value) && isset($form_state['values']['array_filter'])) {
      $value = array_keys(array_filter($value));
    }
    variable_set($key, $value);
  }

  drupal_set_message(t('The configuration options have been saved.'));
}

$ form_state ['values']を使用して読み取られたユーザーが送信したフォーム要素の値としてフォーム要素のキーおよび値としてキーを使用して、すべてのフォーム要素を反復処理し、各フォーム要素の変数を設定します。

つまり、variable_set関数を使用してすべてのフォーム値の変数を設定する送信ハンドラー付きのフォームです。


5
良い説明。「フォーム要素キーとしてのキーを持つ各フォーム要素」で混乱している場合、彼の意味は、上記の例では、$ form ['super_secret_password']によってDrupalがvariable_set( 'super_secret_password'、...)を呼び出すことです。 system_settings_form_submitが変数の名前をフォームの配列キー( 'super_secret_password')から取得するためです。
greg_1_anderson 2012年

1
これは役に立ちます。api.drupal.orgが単純な英語で何をするのか説明できないのはなぜですか。代わりに、コードを提供するだけです。つまり、要約すると、ブードゥー教ではなく、フィールドキーを使用するだけです。
Coomie、2012年

1
大きなvariableを格納するためにこれを使用しないでください。直接のvariable_getがあったかどうかに関係なく、すべてのページリクエストでメモリに保持されるためです。それらはすべてメモリに一度キャッシュされます。また、定期的な送信および検証ハンドラーは問題なく動作します。自由に追加してください。
AyeshK 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.