简体   繁体   中英

Skip validation on node delete in Drupal 7

How can I accomplish skipping validation when the user attempts to delete a node in Drupal 7? I am calling my custom validation function in the following manner:

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
}

I've been looking around for a couple days now and most of the possible solutions are considering the developer is creating a custom form, which I am not.

Thanks in advance for any tips/advice.

Great question, this has bugged me for years and I hadn't even realised it. Something like this ought to do it:

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';
}

I think the key point here is node. Check out hook_node_validate() if I were you I would see the stack and find it out.

let me know when u have an update.

My solution was a simple modification to my original code, adding the following lines within my custom validation function to only validate when the operation is NOT delete.

//Set current operation
$currOp = $form_state['values']['op'];

//If not deleting, validate
if($currOp != "Delete"){
    //validate code here.
}

To those who replied, thanks for the hints!

For node edit form, to remove validation on delete submit button just need to write the below code in your custom module for article content type node edit form.

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'));
    }
  }
}

If you are using Entity api, validation of form is working with required fields on delete action too. Even if you are using your own function to validate form ( your_form_name_form_validate ) drupal will not allow you to submit form with empty fields.

Thats because drupal_validate_form() validates form before your_form_name_form_validate is invoked.

drupal_validate_form has to be invoked before any form validate functions because it validates form token. But then it cals _form_validate() , and wont let you to submit form with empty required fields.

In my case i cant do anything with because i use one form for edit/create/delete actions. But if you use different forms, probably on delete action you can set

$form['your_field_name']['#validated'] = TRUE;

and _form_validate function wont validate this field.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM