在Drupal 7中跳过节点删除验证

时间:2013-08-02 15:36:08

标签: php validation drupal drupal-7 drupal-modules

当用户尝试删除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
}

我一直在寻找几天,大多数可能的解决方案都在考虑开发人员正在创建一个自定义表单,我不是。

提前感谢任何提示/建议。

5 个答案:

答案 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函数不会验证此字段。