当用户尝试删除Drupal 7中的节点时,如何完成跳过验证? 我按以下方式调用自定义验证函数:
function my_issue_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'my_issue_node_form':{
$form['#validate'][] = 'my_issue_node_form_validate';
break;
}
}
}
function my_issue_node_form_validate($form, &$form_state) {
//custom validation done here
}
我一直在寻找几天,大多数可能的解决方案都在考虑开发人员正在创建一个自定义表单,我不是。
提前感谢任何提示/建议。
答案 0 :(得分:4)
很好的问题,这已经困扰了我多年,我甚至都没有意识到这一点。像这样的东西应该这样做:
function my_issue_form_my_issue_node_form_alter(&$form, &$form_state, $form_id) {
// Make sure it's an edit form.
if (!empty($form['nid']['#value'])) {
// The nid is required for the delete confirmation form.
$form['actions']['delete']['#limit_validation_errors'] = array(array('nid'));
}
$form['#validate'][] = 'my_issue_node_form_validate';
}
答案 1 :(得分:2)
我认为这里的关键点是节点。如果我是你,请查看hook_node_validate()我会看到堆栈并找到它。
让我知道你什么时候有更新。
答案 2 :(得分:0)
我的解决方案是对原始代码的一个简单修改,在我的自定义验证函数中添加以下行,仅验证操作是否未删除。
//Set current operation
$currOp = $form_state['values']['op'];
//If not deleting, validate
if($currOp != "Delete"){
//validate code here.
}
对于那些回复的人,谢谢你的提示!
答案 3 :(得分:0)
对于节点编辑表单,要删除删除提交按钮上的验证,只需在自定义模块中为文章内容类型节点编辑表单编写以下代码。
function module_name_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'article_node_form') {
if (!empty($form['nid']['#value'])) {
// The nid is required for the delete confirmation form.
$form['actions']['delete']['#limit_validation_errors'] = array(array('nid'));
}
}
}
答案 4 :(得分:0)
如果您使用的是Entity API,则表单验证也适用于删除操作中的必需字段。即使您使用自己的函数来验证表单( your_form_name_form_validate ),drupal也不允许您提交带有空字段的表单。
这是因为drupal_validate_form()在调用your_form_name_form_validate
之前验证了表单。
drupal_validate_form
,因为它验证表单标记。但随后它会发送_form_validate(),并且不会让您提交包含空必需字段的表单。
在我的情况下,我无法做任何事情,因为我使用一个表单进行编辑/创建/删除操作。但是如果您使用不同的表单,可能在删除操作上,您可以设置
$form['your_field_name']['#validated'] = TRUE;
和_form_validate函数不会验证此字段。