在Drupal 6中,为系统变量添加编辑功能到管理界面

3
我创建了一个定制模块,使用variable_set()设置系统变量。我希望拥有适当权限的人能够通过管理界面编辑此变量。我知道有一些贡献模块可以编辑系统变量,但我想在我的定制模块中包含这个功能。我希望可以钩入"网站信息"管理员表单或者"文件系统"管理员表单,并包括一个文本框,让用户可以编辑这个系统变量并保存。怎样做最好呢?
谢谢!
1个回答

2

网站信息表单使用system_settings_form(),这意味着您只需要将您的变量作为表单元素添加到表单中(使用hook_form_alter()或者像下面这样使用hook_form_FORM_ID_alter()),系统会处理保存它。

function MYMODULE_form_system_site_information_settings_alter(&$form, &$form_state) {
  $form['my_variable_name'] = array(
    '#type' => 'textfield', // or whatever element makes sense
    '#title' => t('Title'),
    '#default_value' => variable_get('my_variable_name', '')
  );
}

对于system_file_system_settings()表单也是同样的情况。


太棒了。它起作用了,但它将新字段显示在保存按钮之后,而不是与其他字段一起在其前面。 - Erich H.
您可以使用 #weight 属性来控制顺序,例如 $form['element']['#weight'] = -10 将会将其上移。然后您只需要稍微调整一下,直到找到合适的权重即可。 - Clive
好的,抱歉,发生了一些奇怪的事情。如果我输入任何负数权重,例如:-10、-2、-1、-50,无论如何该字段都会显示为列表中的第一个;但是,如果我输入任何正数,例如 1、2、55、100,该字段将出现在保存按钮之后的最后一个位置。??? - Erich H.
你可能需要更改表单中其他项目的权重,它们默认都设置为零,这很好地解释了你所看到的情况。如果你还没有安装它,请安装Devel模块并使用dpm()函数将表单数组显示在屏幕上(dpm($form);)。然后你就可以检查它并查看需要移动哪些元素。 - Clive
是的,就是这样。实际上,当我执行dpm()时,表单元素根本没有应用权重,所以我猜它们必须只有默认值为0。无论如何,最终我只是循环遍历当前的表单数组,并对所有内容应用权重。然后我就可以把我的元素放在想要的位置了。谢谢! - Erich H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接