2012-04-02 1 views
0

J'ai utilisé Drupal 6 et AHAH pour personnaliser mon formulaire de noeud. Pour ahah j'utiliser ce code:Comment arrêter la validation de forme de noeud après AHAH

function mymodule_subtopic_type() { 
    $output = ''; 

    $form_state = array('storage' => null, 'submitted' => false, 'rebuild' => true); 
    $form_build_id = $_POST['form_build_id']; 

    $form = form_get_cache($form_build_id, $form_state); 

    $args = $form['#parameters']; 
    $form_id = array_shift($args); 
    $form_state['post'] = $_POST; 
    $form['#post'] = $_POST; 
    $form['#programmed'] = false; 

    $form['#redirect'] = false; 

    drupal_process_form($form_id, $form, $form_state); 

    $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); 

    $topic_form = $form['topic_wrapper']; 
    unset($topic_form['#prefix'], $topic_form['#suffix']); 
    $output .= theme('status_messages'); 
    $output .= drupal_render($topic_form); 

    drupal_json(array('status' => TRUE, 'data' => $output)); 
} 

Les nouveaux éléments de forme sont rendus très bien, mais je reçois des messages d'état:

  • champ Titre est nécessaire.
  • Le champ de description est obligatoire.

Comment arrêter la validation après un appel ahah?

Répondre

2

Solution de d.o .: http://drupal.org/node/831900#comment-3124386

Ajouter cette fonction:

function _ahah_helper_disable_validation(&$form) { 
    foreach (element_children($form) as $child) { 
    $form[$child]['#validated'] = TRUE; 
    _ahah_helper_disable_validation(&$form[$child]); 
    } 
} 

et appellent avant drupal_process_form (form_id $, sous forme de $, form_state de $);

0

Une autre option que j'essaie est de détecter le bouton AHAH cliquez et revenez du crochet de validation sans traitement si ce n'est pas mon bouton "réel" soumettre. J'utilisais la valeur $ op_state 'op', mais je viens d'apprendre que cela ne semble fonctionner que sur Chrome.

Juste une autre idée.

Questions connexes