'checkbox', '#title' => t('AJAX Example 1'), '#description' => t('Enable to show second field.'), '#default_value' => $node->ajax_example['example_1'], '#ajax' => array( 'callback' => 'ajax_example_form_node_callback', 'wrapper' => 'ajax-example-form-node', 'effect' => 'fade', ), ); $form['container'] = array( '#prefix' => '
', '#suffix' => '
', ); // If the state values exist and 'ajax_example_1' state value is 1 or // if the state values don't exist and 'example1' variable is 1 then // display the ajax_example_2 field. if (!empty($form_state['values']['ajax_example_1']) && $form_state['values']['ajax_example_1'] == 1 || empty($form_state['values']) && $node->ajax_example['example_1']) { $form['container']['ajax_example_2'] = array( '#type' => 'textfield', '#title' => t('AJAX Example 2'), '#description' => t('AJAX Example 2'), '#default_value' => empty($form_state['values']['ajax_example_2']) ? $node->ajax_example['example_2'] : $form_state['values']['ajax_example_2'], ); } } /** * Returns changed part of the form. * * @return array * Form API array. * * @see ajax_example_form_node_form_alter() */ function ajax_example_form_node_callback($form, $form_state) { return $form['container']; } /** * Implements hook_node_submit(). * @see ajax_example_form_node_form_alter() */ function ajax_example_node_submit($node, $form, &$form_state) { $values = $form_state['values']; // Move the new data into the node object. $node->ajax_example['example_1'] = $values['ajax_example_1']; // Depending on the state of ajax_example_1; it may not exist. $node->ajax_example['example_2'] = isset($values['ajax_example_2']) ? $values['ajax_example_2'] : ''; } /** * Implements hook_node_prepare(). * * @see ajax_example_form_node_form_alter() */ function ajax_example_node_prepare($node) { if (empty($node->ajax_example)) { // Set default values, since this only runs when adding a new node. $node->ajax_example['example_1'] = 0; $node->ajax_example['example_2'] = ''; } } /** * Implements hook_node_load(). * * @see ajax_example_form_node_form_alter() */ function ajax_example_node_load($nodes, $types) { $result = db_query('SELECT * FROM {ajax_example_node_form_alter} WHERE nid IN(:nids)', array(':nids' => array_keys($nodes)))->fetchAllAssoc('nid'); foreach ($nodes as &$node) { $node->ajax_example['example_1'] = isset($result[$node->nid]->example_1) ? $result[$node->nid]->example_1 : 0; $node->ajax_example['example_2'] = isset($result[$node->nid]->example_2) ? $result[$node->nid]->example_2 : ''; } } /** * Implements hook_node_insert(). * * @see ajax_example_form_node_form_alter() */ function ajax_example_node_insert($node) { if (isset($node->ajax_example)) { db_insert('ajax_example_node_form_alter') ->fields(array( 'nid' => $node->nid, 'example_1' => $node->ajax_example['example_1'], 'example_2' => $node->ajax_example['example_2'], )) ->execute(); } } /** * Implements hook_node_update(). * @see ajax_example_form_node_form_alter() */ function ajax_example_node_update($node) { if (db_select('ajax_example_node_form_alter', 'a')->fields('a')->condition('nid', $node->nid, '=')->execute()->fetchAssoc()) { db_update('ajax_example_node_form_alter') ->fields(array( 'example_1' => $node->ajax_example['example_1'], 'example_2' => $node->ajax_example['example_2'], )) ->condition('nid', $node->nid) ->execute(); } else { // Cleaner than doing it again. ajax_example_node_insert($node); } } /** * Implements hook_node_delete(). * @see ajax_example_form_node_form_alter() */ function ajax_example_node_delete($node) { db_delete('ajax_example_node_form_alter') ->condition('nid', $node->nid) ->execute(); }