我想为要构建的模块设置一个简单的设置表单。
目前,我只有一个字段集和一个复选框:
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);
}
这确实可以渲染,但是选中复选框并单击“保存”实际上并不会在表单中保存任何内容。
如何确保保存表单数据?
答案 0 :(得分:2)
使用system_settings_form()
时,使用表单键命名变量,将表单数据保存在{variable}
数据库表中。
提交表单后,system_settings_form
提交处理程序将不使用'script_on',而是使用表单密钥。
此函数向表单添加一个提交处理程序和一个提交按钮 数组。提交功能使用以下命令将所有数据保存在表单中 variable_set(),将变量命名为与表单中的键相同的变量 数组。请注意,这意味着您通常应该为表单数组添加前缀 带有模块名称的键,以便在传递给它们时是唯一的 variable_set()。
这允许使用variable_get('form_key')
来获取表单数据,这意味着您可以直接映射以下内容:
'#default_value' => variable_get('my_module_setting_scripts', !!$config['script_on']);
..此处的后备设置为三元表达式'shortcut'(!!)。