2013-08-02 9 views
5

में नोड डिलीट पर सत्यापन छोड़ें जब उपयोगकर्ता ड्रूपल 7 में नोड को हटाने का प्रयास करता है तो मैं स्किपिंग सत्यापन कैसे प्राप्त कर सकता हूं? मैं निम्नलिखित तरीके से अपने कस्टम सत्यापन समारोह बोल रहा हूँ:ड्रूपल 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

आप इकाई एपीआई का उपयोग कर रहे हैं, तो प्रपत्र के सत्यापन पर आवश्यक क्षेत्रों के साथ काम कर रहा है बहुत कार्रवाई को हटा दें। भले ही आप फॉर्म को सत्यापित करने के लिए अपने स्वयं के फ़ंक्शन का उपयोग कर रहे हों (your_form_name_form_validate) ड्रूपल आपको खाली फ़ील्ड के साथ फ़ॉर्म सबमिट करने की अनुमति नहीं देगा।

Thats क्योंकि drupal_validate_form()your_form_name_form_validate से पहले फॉर्म को मान्य करता है।

drupal_validate_form किसी भी फॉर्म को मान्य कार्यों से पहले बुलाया जाना चाहिए क्योंकि यह फॉर्म टोकन को मान्य करता है। लेकिन फिर यह _form_validate() कोल्स करता है, और आपको खाली आवश्यक फ़ील्ड के साथ फ़ॉर्म सबमिट करने की अनुमति नहीं देता है।

मेरे मामले में मैं कुछ भी नहीं कर सकता क्योंकि मैं संपादन/निर्माण/कार्यों को हटाने के लिए एक फॉर्म का उपयोग करता हूं। लेकिन अगर आप अलग अलग रूपों का उपयोग करें, शायद पर कार्रवाई को नष्ट आप

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

सेट कर सकते हैं और _form_validate समारोह अभ्यस्त इस क्षेत्र को मान्य।

संबंधित मुद्दे