web-dev-qa-db-fra.com

Obtenir l'ID du nœud dans un formulaire

Je me bats avec la façon d'obtenir l'ID de nœud dans mon user_register_form_submit. J'ai besoin d'obtenir l'ID du nœud du nœud où se trouve mon formulaire, laissez-moi vous expliquer:

J'ai créé un tpl pour mon formulaire d'enregistrement d'utilisateur afin de l'imprimer dans des nœuds d'un type de contenu spécial, ces nœuds préremplissent mon formulaire et aident à créer des utilisateurs, j'ai besoin de cet identifiant de nœud pour supprimer le nœud après avoir soumis le formulaire qui signifie supprimer le nœud après la création d'un utilisateur.

voici mon crochet:

    function hook_form_alter(&$form, &$form_state, $form_id) {
        if($form_id == 'user_register_form'){
            $form['#submit'][] = 'user_register_form_submit';
        }
    }

    function user_register_form_submit($form, &$form_state) {
    // print the node id
    }

Dernière chose, je travaille avec Drupal 7. Merci!

6

Ajoutez une ligne de plus sous votre formulaire d'inscription utilisateur code d'intégration,

$form = drupal_get_form('user_register_form'); 
print drupal_render($form);

echo "<script>
  jQuery(document).ready(function() {
    jQuery('#user-register-form').append('<input type=\"hidden\" name=\"nid\" value=".arg(1).">');
  });
</script>";

Ensuite, vous obtiendrez le nid du nœud à l'intérieur de la fonction de soumission de registre d'utilisateur comme ceci:

function user_register_form_submit($form, &$form_state) {
  // print the node id
  echo $form_state['input']['nid'];
}

Vous pouvez également le faire avec hook_form_alter. Ajoutez un champ masqué et attribuez-lui nid comme valeur.

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register_form') {
    $form['#submit'][] = 'user_register_form_submit';
    $form['nid'] = array(
      '#value' => arg(1),
      '#type' => 'hidden',
    );
  }
}
1
ARUN

Pour Drupal 8 Ajoutez votre gestionnaire de soumission personnalisé sous la forme alter:

$form['actions']['submit']['#submit'][] = '_custom_node_form_submit';

Et ajoutez un gestionnaire d'envoi personnalisé:

function _custom_node_form_submit($form, \Drupal\Core\Form\FormStateInterface $form_state) {
  echo $form_state->getValue('nid');
}

Pour développer Niks réponse.

function custom_module_form_validate(&$form, &$form_state) {
  // This will print the node id.
  var_dump(arg(1)); 
}

Je ne le savais pas avant de l'avoir essayé tout à l'heure. Le crédit devrait aller à Niks.

Remarque; À partir de Drupal docs arg (), "Renvoie un composant du chemin Drupal chemin d'accès." Dans ce cas, le second. Cela signifie que ce ne fonctionnera pas sur tous les formulaires car tous les formulaires n'utiliseront pas le chemin du nœud.

Edit: Incorporation des informations du commentaire de MPD ci-dessous Évitez autant que possible d'utiliser cette fonction, car le code résultant est difficile à lire. Dans les fonctions de rappel de menu, essayez d'utiliser des arguments nommés. Voir l'explication dans menu.inc pour savoir comment construire des rappels qui prennent des arguments. Lorsque vous essayez d'utiliser cette fonction pour charger un élément à partir du chemin actuel, par ex. en chargeant le nœud sur une page de nœud, utilisez plutôt menu_get_object ().

0
Christian