web-dev-qa-db-fra.com

Comment utiliser le hook Form_submit?

J'ai un formulaire, généré automatiquement par un type de contenu. Je veux exécuter une fonction form_submit pour saisir/modifier certaines données à enregistrer dans la base de données.

Le type de contenu a déjà ces champs configurés, mais je veux qu'ils soient déterminés dans une fonction form_submit plutôt que via une entrée utilisateur.

Je peux obtenir une fonction de soumission de formulaire, mais je ne sais pas comment ajouter au tableau de valeurs soumis sans avoir à écrire la requête entière moi-même. Quelles variables dois-je saisir et comment les modifier pour ce faire?

Pour être plus précis .. dans le form_alter, cela fait ce que je veux. $form["field_org_id"]["und"][0]['value']['#default_value'] = $org->id;

Mais comment faire l'équivalent hors site dans le formulaire_submit? (il s'agit d'un formulaire d'ajout de contenu et en espérant ne pas réécrire l'intégralité de la requête)

5
Damon
  1. Vous devez utiliser hook_form_alter ou hook_form_FORM_ID_alter
  2. Ajoutez votre gestionnaire d'envoi à $ form ['# submit'] comme ceci $form['#submit'][]='my_submit'
  3. Et écrivez votre code:

    function my_submit($form, &$form_state) { 
      // your code
    }
    
23
jibran

La fonction FORM_FUNCTION_submit () se déclenche automatiquement lorsque le formulaire avec la fonction de générateur de préfixe est soumis:

function generate_special_form(){ // this function name is "FORM_FUNCTION" above
    $form = array();
    $form['field_org_id'] = array(
        '#type' => 'textfield',
        '#title' => 'Organisation',
    );
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'Submit',
    );
    return $form;
}

Lorsque cette fonction soumet, elle appelle automatiquement la fonction generate_special_form_submit () avec 2 paramètres, vous pouvez obtenir les valeurs soumises comme ceci:

function generate_special_form_submit($form, &$form_state){
    // Form above was submitted, now lets clean up $form_state['values'], 
    // that's the submitted values in an associative array.
    form_state_values_clean($form_state);
    // And here is the value that was submitted:
    drupal_set_message($form_state['values']['field_org_id']);
}

Il semble que vous tentiez de modifier un formulaire généré en core. Si c'est le cas, utilisez hook_form_alter pour ajouter la valeur $ form ['# submit'] comme le contour Jibran ci-dessus.

3
Coomie