【问题标题】:What hook to listen to a form submit?什么钩子来收听表单提交?
【发布时间】:2010-08-24 23:48:50
【问题描述】:

我正在编写一个作用于另一个模块的模块。另一个模块的提交表单位于 admin/settings/image-toolkit。提交表单后,我的模块需要响应该事件。

我需要监听什么钩子以及如何知道表单的名称?

在这种情况下,我什至不确定在哪里打印 dsm 以获取有关此表单的更多信息。有没有类似 hook_nodeapi 的东西,但对于我可以给我更多关于表单的信息的表单?

【问题讨论】:

    标签: php drupal content-management-system


    【解决方案1】:

    所有表单都带有一个$form[#submit] 属性,用于描述表单提交时运行的函数。当然,默认值为 formname_submit,但您只需向该数组添加新的即可。

    因此,您应该使用 hook_form_alter 并将另一个项目添加到 $form['#submit'] 数组。

    您可以使用Devel 模块轻松获取表单ID,或者在页面本身的HTML 中查找。 (如果你走后一种路线,连字符应该翻译成下划线)

    我在我的安装中获得了该表单的 system_image_toolkit_settings,但这可能取决于您使用的图像库(我使用 GD)。

    不过,我承认我对您想要添加到那个提交处理程序的内容有点摸不着头脑;p

    编辑:

    回复 OP 评论的一些示例代码:

    你基本上要找的是这个:(来自http://drupal.org/node/144132

    function my_module_form_alter(&$form, $form_state, $form_id) {
      if ($form_id == 'my_form') {
        $form['#submit'][] = 'my_additional_submit_handler';
      }
    }
    

    当然,您需要在您的自定义模块中使用function my_additional_submit_handler 来跟进,以使任何事情发生。

    【讨论】:

    • 要获得有关任何特定表单的更多信息,我建议进入模块本身并检查代码,或者可能将 dpm($form) 行暂时放入表单函数中。
    • 正在添加到表单本身......有点。 :) hook_form_alter 允许您向其“#submit”数组添加一个额外的处理函数,因此表单知道在提交表单时运行您的函数。我用一些示例代码编辑了我的帖子。
    • 当然,您的提交处理程序应该像任何其他 form_submit 函数一样从 $form_state['values'] 读取。提交表单后,$form 将不会返回任何有用的信息:)
    猜你喜欢
    • 2020-10-24
    • 2022-07-07
    • 2017-05-10
    • 1970-01-01
    • 2022-08-18
    • 2011-11-16
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多