Please start your investigations using the AHAH Example in the Examples Project (http://drupal.org/project/examples) and http://randyfay.com/ahah. If you build a form starting with that foundation, then please come back for help at that point.
Thanks, -Randy On Thu, Mar 10, 2011 at 9:10 PM, Austin Einter <austin.ein...@gmail.com> wrote: > 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.')); > } > ?> > -- Randy Fay Drupal Module and Site Development ra...@randyfay.com +1 970.462.7450