Я хочу создать простую форму настроек для строящегося модуля.
В настоящее время у меня есть только набор полей и один флажок:
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’ но ключ формы.
Эта функция добавляет в форму обработчик отправки и кнопку отправки.
массив. Функция submit сохраняет все данные в форме, используя
variable_set (), для переменных, названных так же, как ключи в форме
массив. Обратите внимание, что это означает, что вы обычно должны префикс вашего массива формы
ключи с именем вашего модуля, чтобы они были уникальными при передаче в
variable_set ().
Это позволяет использовать variable_get('form_key')
чтобы получить данные формы, то есть в вашем случае вы можете напрямую отобразить такие вещи, как:
'#default_value' => variable_get('my_module_setting_scripts', !!$config['script_on']);
.. здесь с троичным выражением «ярлык» (!!) для резервной настройки.
Других решений пока нет …