我想在现有节点表单中添加自己的验证(或提交)处理程序/函数。我试过乘法(下面),但它不能正常工作。
function MY_MODULE_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'MY_MODULE_handler';
//or
$form['actions']['submit']['#validate'][] = 'MY_MODULE_handler';
//or
$form['submit']['#submit'][] = 'MY_MODULE_handler';
//or
$form['#submit'][] = 'MY_MODULE_handler';
//or
array_unshift($form['#validate'], 'MY_MODULE_handler');
//or
$form['actions']['submit']['#submit'][]='MY_MODULE_handler';
}
但这些尝试似乎都不适用于我的处理程序:
function MY_MODULE_handler($form, &$form_state){
dsm($form);
dsm($form_state);
}
查看$form
中的form_alter
变量,我发现$form['actions']['submit']['#submit']
和$form['#validate']
已经有提交/验证处理程序。
但如果我使用上面的一个示例,则dsm
不会打印任何内容。此外,它不再打印确认(提交)!但是,如果我使用
function MY_MODULE_handler($form, &$form_state){
die('Handler was hit');
}
我看到处理程序被击中了。
可能是什么原因?我需要处理程序来读取两个表单字段并将它们保存在一个节点属性中。
答案 0 :(得分:0)
正如@ 2pha提出的那样,我使用了钩子HOOK_node_presave而不是额外的验证/提交处理程序,它允许我解决我的问题(这是将表单中的值分配给一个节点属性,请参阅注释)。