Я хочу создать простую форму настроек для создаваемого модуля.
В настоящее время у меня есть только набор полей и единственный флажок:
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);
}
Это выполняет рендеринг, но установка флажка и нажатие кнопки «Сохранить» на самом деле ничего не сохраняет в форме.
Как я могу убедиться, что данные моей формы сохранены?
При использовании system_settings_form()
данные формы сохраняются в таблице базы данных {variable}
, используя ключи формы для именования переменных.
Когда форма отправлена, обработчик отправки system_settings_form
не будет использовать 'script_on', а будет использовать ключ формы.
This function adds a submit handler and a submit button to a form array. The submit function saves all the data in the form, using variable_set(), to variables named the same as the keys in the form array. Note that this means you should normally prefix your form array keys with your module name, so that they are unique when passed into variable_set().
Это позволяет использовать variable_get('form_key')
для захвата данных формы, что означает, что в вашем случае вы можете напрямую отображать такие вещи, как:
'#default_value' => variable_get('my_module_setting_scripts', !!$config['script_on']);
.. здесь с тернарным выражением «ярлык» (!!) для настройки отката.