重置模块管理表单值时的Drupal variable_set

时间:2011-11-17 18:44:47

标签: php drupal drupal-6 drupal-fapi

我在点击'重置默认值'时尝试执行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);
  }
}

2 个答案:

答案 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 );