[support] Drupal 7 AHAH/AJAX issue

Metzler, David metzlerd at evergreen.edu
Mon Sep 10 15:31:32 UTC 2012


I have not used form values in this way before and am unsure if they
will work this way.  Typically $form_state['storage'] is where you might
place these values that are part the form that may be modified by ajax
callback handlers.  Have you tried using $form_state['storage'] instead
of $form_state['values'] for your $all_categories data?  

 

 

 

________________________________

From: support-bounces at drupal.org [mailto:support-bounces at drupal.org] On
Behalf Of Kamal Palei
Sent: Sunday, September 09, 2012 8:44 PM
To: support at drupal.org
Subject: [support] Drupal 7 AHAH/AJAX issue

 

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'];
}

 

?>

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20120910/8e07c939/attachment-0001.html 


More information about the support mailing list