web-dev-qa-db-fra.com

Fonction de soumission secondaire pour le bouton d'entrée de formulaire

Je veux avoir des boutons pour supprimer le champ sélectionné du formulaire.

    $form['questions']['buttons'][$counter] = array(
        '#type' => 'button', 
        '#name' =>'button_'.$counter, 
        '#value' => t('Remove'),
        '#submit' => array('my_mod_remove_submit'),
    );

Soumettre la fonction:

function my_mod_remove_submit($form, &$form_state) {
    drupal_set_message('<pre>'.print_r($form_state, 1).'</pre>');
}

Mais il semble que cette fonction ne soit jamais invoquée.

3
Codium

Je pense que vous souhaitez gérer plusieurs boutons Soumettre associés à leurs données pour effectuer des opérations à ce sujet.

La meilleure approche consiste à utiliser des cases à cocher avec un seul bouton d'envoi.

par exemple.

function my_form(){
  $data_ids = array();

  foreach($data_set as $data){
    $data_ids[$data] = '';
    $form['data']['data_preview'][$data['id']] = array('#value' => $data['value']);
  }

  $form['selection'] = array(
    '#type' => 'checkboxes'
    '#options' => $data_ids;
  );

  $form['process'] = array(
    '#type' => 'submit',
    '#value' => 'do',
  );

  $form['#theme'] = 'my_form';
}

Hangler à thème (n'oubliez pas de mettre en œuvre my_form Entrée dans hook_theme)

function theme_my_form($form = array()){
  $rows = array();
  foreach(element_children($form['selection']) as $id) {
    $fields = array();
    $fields[] = drupal_render($form['selection'][$id]);
    $fields[] = drupal_render($form['data']['data_preview'][$id]);
    $rows[] = $fields;
  }

  $output = theme('table', array('Select', 'Data'), $rows);
  $output .= drupal_render($form);// Render rest of form
  return $output;
}

Maintenant former le gestionnaire de soumission

function my_form_submit(&$form, $form_state){
  $clicked_button = $form_state['clicked_button']['#value'];
  $values = $form_state['values'];

  if ($clicked_button == $values['process']){
       //Here check $value['selection'] array and process accordingly
  }
}
0
Shoaib Nawaz