Drupal webform trick submitting hidden values

Posted by: 
Dominique De Cooman

Hoe voer je verborgen waarden in tegelijk met een drupal webform? Ons voorbeeld. We hebben een job node (nid 1) en we willen naar een webform gaan om voor de baan te soliciteren. Daarvoor bouwen we een link op onze node die naar de webform node verwijst (nid 2).
In de node template typt u snel een url: node, nid webform, nid job node

<?php
print l('Apply for this job''node/2/1');
?>

In een module bepaalt u een hook_form_alter(). (Hook form alters worden gebruikt om forms te veranderen in drupal en ze werken natuurlijk ook op webforms)

Misschien een kleine side trick hier: We bouwen de id van ons webform dynamisch. Het eerste deel is 'webform_client_form_' het tweede deel is een variabele die ook dynamisch gebouwd is omdat we een meertalige site hebben, de i18n_get_lang() api functie geeft ons de huidige gebruikers taal. Op het einde hebben we iets als dit 'webform_client_form_2' waar 2 is de node id. U kunt dit ook volledig hardcoded doen.

Om de node id van onze baan in een verborgen webform veld op te slaan doen we het volgende. We grijpen de path, breken het op en in de array op key 2 vinden we onze node id. We gebruiken de standaardwaarde van het verborgen veld om onze node id op te slaan. Gebruik checkplain om de input te zuiveren. Verstuur de form en u zult de waarde ingevoerd vinden in uw verborgen veld.

<?php
/**
 *  Implementation 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]);
    } 
  }
}
?>

In een webform hebben verborgen velden variabelen beschikbaar maar u kunt ze niet fatsoenlijk formateren.

U kunt de variabelen bepalen in een settings form zoals deze:

<?php
/**
 *  Implementation hook_menu()
 *  <a href="http://api.drupal.org/api/function/hook_menu/6
">http://api.drupal.org/api/function/hook_menu/6
</a> */ 
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;
}

/**
 * The settings form for the 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); 
}
?>

Reactie toevoegen