2013-08-02 63 views
5

當用戶試圖刪除Drupal 7中的節點時,我該如何完成跳過驗證? 我打電話給我的自定義驗證函數以下列方式:在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

我的解決方案是一個簡單的修改,我的原代碼,我定義驗證函數內添加以下行來當操作只刪除驗證。

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

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

對於那些回覆,感謝提示!

+0

注意:其他解決方案(由克萊夫和維沙爾)也可能工作。 – MTsrb

2

我認爲這裏的關鍵點是節點。檢查hook_node_validate()如果我是你我會看到堆棧並找出它。

讓我知道你什麼時候有更新。

3

偉大的問題,這多年來一直困擾着我,我甚至沒有意識到它。像這樣的東西應該做到這一點:

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

如果使用的是實體API,形式確認正在與需要領域上刪除行動了。即使您使用自己的函數來驗證表單(your_form_name_form_validate),drupal也不允許您使用空字段提交表單。

那是因爲drupal_validate_form()在調用your_form_name_form_validate之前驗證了表單。

drupal_validate_form必須在任何表單驗證函數之前被調用,因爲它驗證表單標記。但那麼它cals _form_validate(),並且不會讓你提交表單需要字段。

在我的情況下,我無法做任何事情,因爲我使用一種形式進行編輯/創建/刪除操作。但是,如果您使用不同的表單,可能在刪除操作上您可以設置

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

和_form_validate函數不會驗證此字段。