Drupal : Astuce d'un formulaire web soumettant valeurs cachées

Comment soumettre certaines valeurs cachées le long d'un formulaire web Drupal? Notre exemple. On a un nœud emploi (NID 1) et on veut aller à un formulaire web pour postuler pour le poste. On construit donc un lien sur notre nœud pointant vers le nœud Web Form (NID 2).
Dans le noeud modèle, saisissez tout simplement l'url: le nœud, la Webform du NID, nœud du NID du poste

<?php
print l('Postuler pour cet emploi''node/2/1');
?>

Dans un module vous définissez un hook_form_alter (). (Les modificateur hook_form sont utilisés pour modifier les formulaires dans Drupal et naturellement ils fonctionnent sur les WebForms aussi)
Une petite astuce: On construit l'id de notre formulaire d'un façon dynamique. La première partie est 'webform_client_form_' la seconde partie est une variable qui est également dynamiquement construite, car on a un site multilingue, la fonction i18n_get_lang () de l'API nous procure le langage courant des utilisateurs. Enfin, on a quelque chose comme cela 'webform_client_form_2 'où 2 est l'identifiant du nœud. Vous pouvez faire tout cela en dur aussi.
Maintenant, pour enregistrer l'ID du nœud de notre travail dans un champ de formulaire web caché, on fait ce qui suit. On récupère le chemin, on le split et dans le 2ième élèment du tableau on a notre ID du nœud. On utilise la valeur par défaut du champ caché pour stocker nos ID des nœuds. Utilisez checkplain pour assainir l'entrée. Présentez le formulaire et vous trouverez la valeur soumise sur votre champ caché.

<?php
/**
 *  Implémentation hook_form_alter()
 */  
function glue_form_alter(&$form$form_state$form_id) { 
  if (
$form_id == 'webform_client_form_'.variable_get('glue_link_to_webform_' i18n_get_lang(), '2')) {
    
array_unshift($form['#submit'], 'glue_webform_add_nid'); 
    
$bpath explode('/' ,$_GET['q']);
    if (
is_numeric($bpath[2])) {
      
$form['submitted']['vacature_node']['#default_value'] = 'node/'.check_plain($bpath[2]);
    } 
  }
}
?>

Dans un formulaire web, les champs cachés ont certaines variables disponibles, mais vous ne pouvez pas vraiment les formater correctement.

Vous pouvez définir des variables dans un formulaire de paramétrage comme ceci:

<?php
/**
 *  Implémentation hook_menu()
 *  http://api.drupal.org/api/function/hook_menu/6
 */ 
function glue_menu() {
  
$items = array();
  
$items['admin/settings/custom'] = array(
    
'title' => t('custom settings page'),
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('glue_settings_form'),
    
'access arguments' => array('administer custom settings'),
    
'type' => MENU_SUGGESTED_ITEM,
  );

  return 
$items;
}

/**
 * Le formulaire de paramètrage du module
 */
function glue_settings_form() {
  
$form['glue_link_to_webform_nl'] = array(
    
'#type' => 'textfield',
    
'#title' => 'Sollicitatie node nl',
    
'#default_value' => variable_get('glue_link_to_webform_nl''117'),
  );   
  
$form['glue_link_to_webform_en'] = array(
    
'#type' => 'textfield',
    
'#title' => 'Sollicitatie node en',
    
'#default_value' => variable_get('glue_link_to_webform_en''122'),
  ); 
  
$form['glue_link_to_webform_fr'] = array(
    
'#type' => 'textfield',
    
'#title' => 'Sollicitatie node fr',
    
'#default_value' => variable_get('glue_link_to_webform_fr''123'),
  ); 
  
$form['glue_link_to_webform_de'] = array(
    
'#type' => 'textfield',
    
'#title' => 'Sollicitatie node de',
    
'#default_value' => variable_get('glue_link_to_webform_de''124'),
  ); 
  
  
  return 
system_settings_form($form); 
}
?>