[development] AHAH Questions

Kale Worsley kale at egressive.com
Sat Mar 12 12:29:03 UTC 2011



Austin Einter <austin.einter at 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.'));
>}
>?>


More information about the development mailing list