Drupal 7:如何使用system_settings_form()保存表单值?

时间:2018-12-18 00:01:21

标签: php drupal drupal-7

我想为要构建的模块设置一个简单的设置表单。

目前,我只有一个字段集和一个复选框:

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 :(得分: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'(!!)。