我在点击'重置默认值'时尝试执行variable_set()。在我的模块的管理页面表单上。这通过system_settings_form_submit()运行。我的表单中的#default_value被重置,但我的模块依赖于这个存储的变量来显示一些数据。单击重置会使用默认值填写表单,但不会“保存”。它在数据库中重新创建变量,因此我的模块函数会中断。单击重置后似乎没有任何反应,除了从数据库中删除变量。提前谢谢。
我的提交功能如下:
function faculty_submit(&$form, &$form_state){
if($form_state['values']['op'] == 'Reset to defaults') {
global $faculty_detail_template_default;
variable_set('faculty_detail_template', $faculty_detail_template_default);
}
elseif ($form_state['values']['op'] == 'Save configuration') {
// Clear caches for list and detail pages.
cache_clear_all('faculty_list', 'cache', TRUE);
cache_clear_all('faculty_detail_load', 'cache', TRUE);
}
}
答案 0 :(得分:1)
首先,当您按重置为默认值按钮时system_settings_form_submit
执行的操作。它会调用variable_del
,它会从variables
表中删除表单中所有您定义的变量。
现在您的表单的#default
值可能已填满,因为您执行了类似的操作:
global $faculty_detail_template_default;
$form = array (
'#default_value' => variable_get('faculty_detail_template', $faculty_detail_template_default),
);
我不明白为什么你坚持在variables
表中添加默认值。这整个方法都存在缺陷。只需在代码所依赖的variable_get($name, $default)
处使用faculty_detail_template
即可。这正是该函数的第二个参数用于:$default The default value to use if this variable has never been set.
因此对于Drupal来说,variable
表中缺少变量意味着编码器如何处理这种情况(提供默认值)例如)。使用variable_get
指定的默认值。
其次,如果您使用了system_settings_form
,那么您已经拥有了一个提交功能,即上面提到的功能system_settings_form_submit
),因此除非您专门添加faculty_submit
,否则不会调用$form['#submit'][] = 'faculty_submit';
return system_settings_form($form);
要执行的提交回调数组。像这样:
variable_set
顺便说一句,使用全局变量是一个坏主意(一般而言),你应该尽量避免使用它们。这就是变量用于什么:)可以在代码的不同部分检索的信息片段。因此,在您的模块中添加.install
文件,在该文件中使用{{1}}定义这些全局变量。这比在代码中间神奇地弹出一些全局变量要清晰得多。
答案 1 :(得分:0)
您需要使用& $ form_state ['值'] [' yourVariableNameOfForm']而不是我在下面制作的粗体。
variable_set(' faculty_detail_template', $ faculty_detail_template_default );