Hi List
I am trying to learn ajax stuff in Drupal 7.
 
I want to have a simple questionnaire form. Where I will have a single textfield.
In that text field one will type a question category, and if he wants to type more question categories, user need to click a  button "Add More Categories".
Please see link http://www.netcloudsystems.com/?q=questionnaire/form/manage
 
The whole source code is at the end of this email.  When ajax callback fires, I want to remember how many textfields I need to add, so that when a section of form is updated in _form() hook, I can according add those many textfields.
 
I am trying to manage that using a variable "$all_categories" and form element $form['all_categories']  (of type value).
 
I tried many options, always I find $all_categories value is 1.   So I am unable to add more textfields. 
My observation is whatever I set in ajax callback, in _form hook api, I find value is lost.
 
Kindly guide me what I am missing.
 
Best Regards
Kamal
NECS, Bangalore
 
 
<?php
function questionnaire_menu() {
 $items = array();
 
 $items['questionnaire/form/manage'] = array(
 'title' => t('Manage questions'),
 'page callback' => 'questionnaire_form',
 'access arguments' => array('question manage'),
 'type' => MENU_SUGGESTED_ITEM,
 );
  return $items;
}
function questionnaire_permission()
{
  return array(
   'question manage' => array(
   'title' => t('Question management'),
   'description' => t('Provides question management capability'),
   ),
  );          
}
 
 
function questionnaire_form()
{
 return drupal_get_form('questionnaire_my_form');
}
 
 
function questionnaire_my_form($form, &$form_state)

  $form_state['cache'] = TRUE;
 
  $all_categories = !empty($form_state['values']['all_categories']) ? $form_state['values']['all_categories'] : 1; 
 
  $form['all_categories'] = array(
   '#type' => 'value',
   '#default_value' => $all_categories,
   '#value' => $all_categories);
 
   // The prefix/suffix provide the div that we're replacing, named by   
   // #ajax['wrapper'] above.   
   $form['category_fieldset'] = array(   
        '#title' => t("Questions Categories"),   
        '#prefix' => '<div id="category-div">',   
        '#suffix' => '</div>',   
        '#type' => 'fieldset',   
        '#description' => t('Please enter the question categories'),
   );

   for ($i=1; $i<= $all_categories ; $i++)
   {  
      $key = 'ctg' . $i;
      $form['category_fieldset']['category'][$key] = array(     
         '#type' => 'textfield',     
         '#title' => "Question category $i",   
         ); 
    } 
   $form['category_fieldset']['add_more_category'] = array(   
        '#type' => 'submit',
        '#value' => t('Add More Categories'),
        '#ajax' => array(     
          'callback' => 'questionnaire_category_callback',
          'wrapper' => 'category-div',     
          'method' => 'replace',     
          'effect' => 'fade',   
          ),
     );
   
    $form['submit'] = array(   
        '#type' => 'submit',   
        '#value' => t('Submit'), 
        ); 
       
    return $form;
}  
 
function questionnaire_category_callback($form, &$form_state)
{
  $form_state['values']['all_categories'] = $form_state['values']['all_categories'] + 1;
  return $form['category_fieldset'];
}
 
?>