【问题标题】:Add edit functionality for a system variable to the admin in Drupal 6在 Drupal 6 中为管理员添加系统变量的编辑功能
【发布时间】:2012-12-04 17:40:36
【问题描述】:

我创建了一个自定义模块,它使用 variable_set() 设置系统变量。我希望具有适当权限的人能够通过管理员编辑此变量。我确信有贡献的模块允许您编辑系统变量,但我一直在寻找一种方法来将此功能包含在我的自定义模块中。我想可能会挂接到“站点信息”管理表单或“文件系统”管理表单,并包含一个文本字段,他们可以在其中编辑此系统变量并将其保存。解决这个问题的最佳方法是什么?

谢谢

【问题讨论】:

    标签: forms drupal drupal-6 global-variables drupal-modules


    【解决方案1】:

    站点信息表单使用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() 表单也是如此。

    【讨论】:

    • 太棒了。这行得通,但它在保存按钮之后显示新字段,而不是在它之前与其他字段一起显示。
    • 您可以使用#weight 属性控制订单,例如$form['element']['#weight'] = -10 会将其向上移动。然后你只需要玩一会儿,直到找到合适的重量
    • 好的,抱歉,发生了一些奇怪的事情。如果我输入任何负权重,即:-10、-2、-1、-50,无论如何,该字段都会显示为列表中的第一个,但是,如果我输入任何正数 1、2、55、100,则字段出现在保存按钮后的最后。 ???
    • 您可能需要更改表单中其他项目的重量,默认情况下它们都设置为零,这很好地解释了您所看到的内容。如果您还没有安装Devel 模块并使用dpm() 函数将表单数组显示到屏幕上(dpm($form);)。然后你可以检查它,看看你需要移动哪些元素
    • 是的,就是这样。实际上,当我执行 dpm() 时,表单元素甚至根本没有应用权重,所以我猜它们的默认值一定是 0。无论如何,我最终只是循环通过当前表单数组并将权重应用于所有内容。然后我可以把我的元素放在我想要的地方。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多