Чи є "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_form та system_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:

Додайте збережену конфігурацію Кнопка "Надіслати" та надішліть зворотний дзвінок функції 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 ['значень']

Отже, це просто форма з обробником подання, яка встановлює змінні для всіх значень форми за допомогою функції змінної_сети.


5
Гарне пояснення. Якщо вас плутає "кожен елемент форми з ключем як ключовим елементом форми", він має на увазі, що у вашому прикладі вище, $ form ['super_secret_password'] змусить Drupal викликати змінний_set ('super_secret_password', ...), тому що system_settings_form_submit приймає назву змінної з ключа масиву ('super_secret_password') вашої форми.
greg_1_anderson

1
Це корисно. Чому api.drupal.org не може просто пояснити, що це робить простою англійською мовою. Натомість він просто дає код ... Отже, підсумовуючи, не вуду, просто за допомогою моїх польових клавіш.
Coomie

1
Я думаю, що варто зауважити, що ви не повинні використовувати це для зберігання великих змінних, оскільки це залишиться в пам'яті для кожного запиту сторінки, незалежно від того, був для нього прямий змінний_джет чи ні. Всі вони один раз зберігаються в пам'яті. Крім того, регулярні обробники відправки та перевірки працюватимуть без проблем. Сміливо додайте їх.
АйешК
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.