2013-08-02 15 views
5

Come posso ottenere la convalida della disconnessione quando l'utente tenta di eliminare un nodo in Drupal 7? io chiamo la mia funzione di validazione personalizzata nel modo seguente:Ignora la convalida sul nodo delete in 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 
} 

Ho cercato in giro per un paio di giorni e la maggior parte delle possibili soluzioni stanno prendendo in considerazione lo sviluppatore sta creando un modulo personalizzato, che sono non.

Grazie in anticipo per eventuali suggerimenti/consigli.

risposta

0

La mia soluzione era una semplice modifica al mio codice originale, aggiungendo le seguenti righe nel mio funzione di validazione personalizzata per convalidare solo quando l'operazione non è cancellare.

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

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

A quelli che hanno risposto, grazie per i suggerimenti!

+0

Nota: anche le altre soluzioni (di Clive e Vishal) potrebbero funzionare. – MTsrb

2

Penso che il punto chiave qui sia nodo. Controlla hook_node_validate() se fossi in te vedrei lo stack e lo scoprirò.

fammi sapere quando hai un aggiornamento.

3

Grande domanda, questo mi ha infastidito per anni e non me n'ero nemmeno accorto. Qualcosa del genere dovrebbe farlo:

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

Per il modulo di modifica del nodo, per rimuovere la convalida sul pulsante Elimina invio è sufficiente scrivere il codice riportato di seguito nel modulo personalizzato per il modulo di modifica del nodo del tipo di contenuto dell'articolo.

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

Se si utilizza Entity api, la convalida della forma sta lavorando con richiesti campi su eliminare azione troppo. Anche se stai utilizzando la tua funzione per convalidare il modulo (your_form_name_form_validate) drupal non ti consentirà di inviare moduli con campi vuoti.

Questo perché drupal_validate_form() convalida il modulo prima di your_form_name_form_validate viene richiamato.

drupal_validate_form deve essere invocato prima che qualsiasi modulo convalidi funzioni perché convalida il token modulo. Tuttavia, viene visualizzato il numero _form_validate() e non consente di inviare il modulo con i campi richiesti.

Nel mio caso non posso fare nulla con perché io uso un modulo per modificare/creare/eliminare azioni. Ma se si utilizza forme diverse, probabilmente eliminare l'azione è possibile impostare

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

e la funzione _form_validate wont convalidare questo campo.