-
-
Save fubarhouse/0eedf1ebf8e6cb025126d3c3bedf5a9d to your computer and use it in GitHub Desktop.
Multiple field API example including add/remove submit and callback functions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @file | |
* Module file for add_more_example. | |
*/ | |
/** | |
* Implements hook_menu(). | |
* | |
* @inheritdoc | |
*/ | |
function addmore_menu() { | |
$items = array(); | |
$items['admin/snippet/addmore'] = array( | |
'title' => 'Example form', | |
'type' => MENU_CALLBACK, | |
'page callback' => 'drupal_get_form', | |
'page arguments' => array('addmore_form'), | |
'access callback' => TRUE, | |
); | |
return $items; | |
} | |
function addmore_form($form, &$form_state) { | |
$form['field_container'] = [ | |
'#type' => 'container', | |
'#weight' => 80, | |
'#tree' => TRUE, | |
'#prefix' => '<div id="js-ajax-elements-wrapper">', | |
'#suffix' => '</div>', | |
]; | |
$values = variable_get('testvar_one', NULL); | |
$form_state['field_deltas'] = isset($form_state['field_deltas']) ? $form_state['field_deltas'] : range(0, count($values) - 1); | |
foreach ((array) $form_state['field_deltas'] as $delta => $value) { | |
$form['field_container'][$delta] = [ | |
'#type' => 'container', | |
'#attributes' => [ | |
'class' => ['container-inline'], | |
], | |
'#tree' => TRUE, | |
]; | |
$form['field_container'][$delta]['field1'] = [ | |
'#type' => 'textfield', | |
'#title' => t('Field 1 - ' . $delta), | |
'#value' => $values[$delta], | |
'#size' => 10, | |
]; | |
$form['field_container'][$delta]['remove_name'] = [ | |
'#type' => 'submit', | |
'#value' => t('Remove'), | |
'#submit' => ['addmore_form_remove'], | |
'#ajax' => [ | |
'callback' => 'addmore_form_remove_callback', | |
'wrapper' => 'js-ajax-elements-wrapper', | |
], | |
'#weight' => 50, | |
'#attributes' => [ | |
'class' => ['button-small'], | |
], | |
'#name' => 'remove_name_' . $delta, | |
]; | |
} | |
// Submit buttons. | |
$form['field_container']['add_name'] = [ | |
'#type' => 'submit', | |
'#value' => t('Add one more'), | |
'#submit' => ['addmore_form_add'], | |
'#ajax' => [ | |
'callback' => 'addmore_form_add_callback', | |
'wrapper' => 'js-ajax-elements-wrapper', | |
], | |
'#weight' => 100, | |
]; | |
$form['submit'] = [ | |
'#type' => 'submit', | |
'#value' => t('Submit'), | |
'#submit' => ['addmore_submit'], | |
'#weight' => 150, | |
]; | |
$form['other_field'] = [ | |
'#type' => 'textfield', | |
'#title' => t('Other field'), | |
]; | |
return $form; | |
} | |
/** | |
* Remove submit function | |
*/ | |
function addmore_form_remove($form, &$form_state) { | |
$delta_remove = $form_state['triggering_element']['#parents'][1]; | |
$k = array_search($delta_remove, $form_state['field_deltas']); | |
unset($form_state['field_deltas'][$k]); | |
$form_state['rebuild'] = TRUE; | |
drupal_get_messages(); | |
} | |
/** | |
* Remove callback. | |
*/ | |
function addmore_form_remove_callback($form, &$form_state) { | |
return $form['field_container']; | |
} | |
/** | |
* Add submit function. | |
*/ | |
function addmore_form_add($form, &$form_state) { | |
$form_state['field_deltas'][] = count($form_state['field_deltas']) > 0 ? max($form_state['field_deltas']) + 1 : 0; | |
$fs['field_deltas'] = $form_state['field_deltas']; | |
$fs['field_deltas'][] = count($form_state['field_deltas']) > 0 ? max($form_state['field_deltas']) + 1 : 0; | |
$form_state['rebuild'] = TRUE; | |
drupal_get_messages(); | |
} | |
/** | |
* Add callback. | |
*/ | |
function addmore_form_add_callback($form, $form_state) { | |
return $form['field_container']; | |
} | |
function addmore_submit($form, $form_state) { | |
print ''; | |
variable_set('testvar_one', $form_state['input']['field_container']); | |
$x = variable_get('testvar_one', NULL); | |
print ''; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment