0

I need to add the options array for a select field based on the first one like

<?php

function lists_form_alter(&$form,&$form_state,$form_id){
    $governments=array();
  if($form_id == 'place_node_form'){
      /*$vocabularies=  taxonomy_get_vocabularies();

      foreach($vocabularies as $vocab){
          if($vocab->machine_name =='listings'){
              //
              //$_SESSION['vid']=$vocab->vid;
              break;
          }
      }*/
            $options=array();
      $g=taxonomy_get_tree(23,0,1,FALSE);
      $x=count($g);
      for($i=0;$i<$x;$i++){
                $city[$i] = taxonomy_get_children($g[$i]->tid,23);
                      $options[$g[$i+1]->tid]=$g[$i]->name;
      }
      }
                  $options[0]='choose the government';

       $form['gov']=array('#title'=>'Gov','#name'=>'governorate','#type'=>'select','#options'=>$options,
           '#suffix'=>'<div id="replace"></div>'
           ,'#ajax'=>array('callback'=>'ajax_callback','event'=>'change','wrapper'=>'replace','method'=>'replace'));

isset($form_state['values']['governorate']) ? $op=taxonomy_get_children($form_state['values']['governorate'],23)
        : $op='';            
$form['city']=array("#title"=>'City','#name'=>'city','#type'=>'select','#prefix' => '<div id="replace">',
        '#suffix' => '</div>',
           '#options'=> $op);

} 

function ajax_callback($form_state,$form){
    $form_state['rebuild']=true;
    return $form['city'];
}

?>

what's wrong here?

1

You've got the parameters the wrong way round in your callback function; and you should probably take $form_state by reference if you need to change it:

function ajax_callback($form, &$form_state){
  $form_state['rebuild']=true;
  return $form['city'];
}
|improve this answer|||||
  • I did but still nothing changed – Mohammed Gomma Sep 24 '12 at 18:37
  • please make sure that you you invoked the arguments in correct order and don't forget to look at the '&' in the form_state argument :) – Mathankumar Sep 24 '12 at 18:40
  • i did what do u mean INVOKED – Mohammed Gomma Sep 24 '12 at 18:42
0

Thanks guys i found the solution by that answer

Is it possible to replace more than one form element (wrappers) triggered by only one #ajax trigger element?

the first answer using ajax_command_replace

and here is the final code

function lists_form_alter(&$form,&$form_state,$form_id){
 $governments=array();
  if($form_id == 'place_node_form'){

        $options=array();
  $g=taxonomy_get_tree(23,0,1,FALSE);
  $x=count($g);
  for($i=0;$i<$x;$i++){
            //$city[$i] = taxonomy_get_children($g[$i]->tid,23);
                  $options[$g[$i+1]->tid]=$g[$i]->name;
  }
  }
              $options[0]='choose the government';

      $form['gov']=array('#title'=>'Gov','#name'=>'governorate','#type'=>'select','#options'=>$options
       ,'#ajax'=>array('callback'=>'ajax_callback','event'=>'change','wrapper'=>'replace','method'=>'replace'));

$form['city']=array("#title"=>'City','#name'=>'city','#type'=>'select','#prefix' => '', '#suffix' => '','#options'=>$op);

}

function ajax_callback($form_state,$form){
$form_state['values']['governorate'] != 0 ? $op=array(0=>'zero',1=>'one')
    : $op=array(2=>'two');  

  $form['city']=array("#title"=>'City',
  '#name'=>'city','#type'=>'select',
    '#pref=> '<div id="replace">',
    '#suffix' => '</div>','#options'=>$op);

return array( '#type'=>'ajax', '#commands'=>array(ajax_command_replace ("#replace",render($form['city']))) );

}
|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.