2013-08-02 16 views
5

Jak wykonać pomijanie sprawdzania poprawności, gdy użytkownik próbuje usunąć węzeł w Drupal 7? Wołam mojego niestandardową funkcję sprawdzania w następujący sposób:Pomiń sprawdzanie usunięcia węzła w 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 
} 

ja już rozglądać się za kilka dni teraz i większość z możliwych rozwiązań rozważa deweloper jest tworzenie niestandardowego formularza, którego jestem nie.

Z góry dziękuję za wszelkie wskazówki/porady.

Odpowiedz

0

Moje rozwiązanie było proste modyfikacje do mojego oryginalnego kodu, dodając następujące linie wewnątrz mojej funkcji zwyczaj sprawdzania poprawności do sprawdzania poprawności tylko wtedy, gdy operacja nie jest usunąć.

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

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

Tym, którzy odpowiedzieli, dzięki za wskazówki!

+0

Uwaga: inne rozwiązania (opracowane przez Clive i Vishal) również mogą działać. – MTsrb

2

Myślę, że kluczowym punktem jest tutaj węzeł. Sprawdź hook_node_validate(), gdybym był tobą, zobaczyłbym stos i go znalazłem.

daj mi znać, gdy będziesz mieć aktualizację.

3

Świetne pytanie, przez lata mnie to dręczyło, a ja nawet nie zdawałem sobie z tego sprawy. Coś jak to powinno wystarczyć:

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

Dla formularza edycji węzła, aby usunąć sprawdzanie poprawności przy kasowaniu przycisku Wyślij wystarczy napisać poniższy kod w swoim module niestandardowym dla formularza edycji typu zawartości węzła artykułu.

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

Jeśli używasz Entity api, walidacja formularza pracuje z wymaganych pól na usuwać działanie zbyt. Nawet jeśli używasz własnej funkcji do sprawdzania poprawności formularza (your_form_name_form_validate) drupal nie pozwoli Ci przesłać formularza z pustymi polami.

To dlatego, że drupal_validate_form() sprawdza poprawność formularza przed wywołaniem your_form_name_form_validate.

drupal_validate_form należy wywoływać przed każdym formularzem sprawdzania poprawności funkcji, ponieważ sprawdza token formularza. Ale potem pojawia się _form_validate() i nie można przesłać formularza z pustymi polami wymaganymi.

W moim przypadku nie mogę nic zrobić, ponieważ używam jednego formularza do edycji/tworzenia/usuwania akcji. Ale jeśli używasz różnych formularzy, prawdopodobnie po usunięciu akcji możesz ustawić funkcje, które nie będą sprawdzać poprawności, aby ustawić funkcje: i _form_validate.

Powiązane problemy