欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal hook form submit alter

由于某些原因,我需要在存储在数据库中的任何形式的每个单个文本框中替换一些字符(如果存在)。换句话说,我需要一个钩子,我可以在其中获取所有提交的数据并替换他们的字符。

我发现这个解决方案:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

但这不是一个好主意,因为我也必须照顾其余的提交进度。我只需要替换一些字符。有没有钩子这样做?有什么解决方案?

正确答案 

$form['#submit']存储一个表单提交处理程序的数组。通过您提供的代码,您只需添加自己的代码即可覆盖它。要获得您想要的结果,应该将您的提交处理程序作为数组中的第一个元素添加如下:

array_unshift($form['#submit'], 'mymodule_custom_submission');
//array_unshift 是压入 放到第一个的意思

以正确的形式获取正确的值并替换一些字符本身可能是一个更大的问题。您可能需要缩小您需要更改的表单/字段,以确保不会破坏任何内容。

分享改善这个答案
 

也许这将是更好的验证,而不是提交过程中的Drupal的建议来执行(见form_set_value功能这些修改https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7)。

所以在你的hook_form_alter中,你甚至可以将它添加到现有验证函数的末尾,如果你喜欢:

$form['#validate'][] = 'mymodule_custom_validation';
来自  http://drupal.stackexchange.com/questions/18641/how-do-i-alter-the-form-submission-handler
普通分类: