Drupal 7: Как сохранить значения форм с помощью system_settings_form ()? - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу создать простую форму настроек для строящегося модуля.

В настоящее время у меня есть только набор полей и один флажок:

function my_module_settings() {
  $form = array();

  $config = my_module_default_settings();

  $form['my_module_settings'] = [
    '#type' => 'fieldset',
    '#title' => t('Script options'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#group' => 'script_config',
  ];

  $form['my_module_settings']['my_module_setting_scripts'] = array(
    'script_on' => array(
      '#type' => 'checkbox',
      '#title' => t('Enable Scripts'),
      '#default_value' => !empty($config['script_on']) ? $config['script_on'] : FALSE,
      '#group' => 'script_config',
    ),
  );

  return system_settings_form($form);
}

Это делает рендеринг,но если установить флажок и нажать «Сохранить», в форме ничего не сохраняется.

Как я могу убедиться, что данные формы сохранены?

1 Ответ

0 голосов
/ 18 декабря 2018

При использовании system_settings_form() данные формы сохраняются в таблице базы данных {variable}, используя ключи формы для именования переменных.

При отправке формы обработчик отправки system_settings_form не будет использовать 'script_on' , а ключ формы.

Эта функция добавляет обработчик отправки и кнопку отправки в массив форм.Функция submit сохраняет все данные в форме, используя variable_set (), в переменные, имена которых совпадают с ключами в массиве формы.Обратите внимание, что это означает, что вы обычно должны ставить перед ключами массива форм имя вашего модуля, чтобы они были уникальными при передаче в variable_set ().

Это позволяет использовать variable_get('form_key') для получения данных формы,это означает, что в вашем случае вы можете напрямую отобразить такие вещи, как:

'#default_value' => variable_get('my_module_setting_scripts', !!$config['script_on']);

.. здесь с троичным выражением «ярлык» (!!) для параметра резервирования.

...