Hi All I am quite new to AHAH, strugling to find how it works. I referred documentation and poll module. I want 3 fields in a fieldset, *Company, Start-Date, End-Date*.
I have a button "*Add More Company*", if clicked, it should add a new row having *Company, Start-Date, End-Date *dynamically. How many times user clicks, those many rows needs to be added. To get the above mentioned form, I have put the code as below. However, on button click, new rows are not adding up. Please help me to find whats the error with code. Regards, Austin Code =============================================== <?php function submitresume_menu() { $items = array(); $items['submitresume/form'] = array( 'title' => t('Submit Your Resume'), 'page callback' => 'submitresume_form', 'access arguments' => array('access content'), 'description' => t('Submit Your Resume'), 'type' => MENU_CALLBACK, ); $items['submitresume/form/morecompanies'] = array( 'page callback' => 'submitresume_add_more_companies', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); return $items; } function submitresume_form() { return drupal_get_form('submitresume_my_form'); } function submitresume_my_form($form_state) { $form = array('#cache' => TRUE,); if (isset($form_state['all_companies'])) { $all_companies = $form_state['all_companies']; } else { $all_companies = 1; } //Add a wrapper for the companies and add more button. $form['work_history_wrapper'] = array( '#title' => t("Work history: Mention all the companies you gave worked so far"), '#type' => 'fieldset', '#collapsible' => TRUE, '#collapsed' => FALSE, '#prefix' => '<div class="clear-block" id="work-history-wrapper">', '#suffix' => '</div>', ); //Container for just companies $form['work_history_wrapper']['allcompanies'] = array( '#prefix' => '<div id="all-companies">', '#suffix' => '</div>', ); for ($delta = 0; $delta < $all_companies; $delta++) { //Need to do: Get the company name, start date and end date, pass it to submitresume_add_one_company_form, so that it is shown properly $form['work_history_wrapper']['allcompanies'][$delta] = submitresume_add_one_company_form($delta, $company_name, $compsdt, $compedt); } $form['work_history_wrapper']['morecompany'] = array( '#type' => 'button', '#value' => t('Add More Companies'), '#weight' => 1, '#submit' => array('add_more_companies_submit'), // If no javascript action. '#ahah' => array( 'path' => 'submitresume/form/morecompanies', 'wrapper' => 'all-companies', 'method' => 'replace', 'effect' => 'fade', ), ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Submit', ); return $form; } function submitresume_add_one_company_form($delta, $company_name, $compsdt, $compedt) { $form = array( '#tree' => TRUE, ); $form['companies'] = array( '#type' => 'textfield', '#title' => t('Company')."-".$delta, '#parents' => array('allcompanies', $delta, 'companies'), '#size' => 30, '#maxlength' => 100, ); $form['startdate'] = array( '#type' => 'date', '#title' => t('Start Date'), '#parents' => array('allcompanies', $delta, 'startdate'), ); $form['enddate'] = array( '#type' => 'date', '#title' => t('End Date'), '#parents' => array('allcompanies', $delta, 'enddate'), ); return $form; } function add_more_companies_submit($form, &$form_state) { // Set the form to rebuild and run submit handlers. node_form_submit_build_node($form, $form_state); // Make the changes we want to the form state. if ($form_state['values']['morecompany']) { $n = $_GET['q'] == 'submitresume/form/morecompanies' ? 1 : 5; $form_state['all_companies'] = count($form_state['values']['allcompanies']) + $n; } } function submitresume_add_more_companies() { include_once 'modules/node/node.pages.inc'; $form_state = array('storage' => NULL, 'submitted' => FALSE); $form_build_id = $_POST['form_build_id']; // Get the form from the cache. $form = form_get_cache($form_build_id, $form_state); $args = $form['#parameters']; $form_id = array_shift($args); // We will run some of the submit handlers so we need to disable redirecting. $form['#redirect'] = FALSE; // We need to process the form, prepare for that by setting a few internals // variables. $form['#post'] = $_POST; $form['#programmed'] = FALSE; $form_state['post'] = $_POST; // Build, validate and if possible, submit the form. drupal_process_form($form_id, $form, $form_state); // This call recreates the form relying solely on the form_state that the // drupal_process_form set up. $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); // Render the new output. $choice_form = $form['work_history_wrapper']['allcompanies']; unset($choice_form['#prefix'], $choice_form['#suffix']); // Prevent duplicate wrappers. $output = theme('status_messages') . drupal_render($choice_form); drupal_json(array('status' => TRUE, 'data' => $output)); } function submitresume_validate($form, &$form_state) { } function submitresume_submit($form, &$form_state) { drupal_set_message(t('The form has been submitted.')); } ?>