I have a problem with Ajax and some fields in my entity form. i have a select list in my form and when i change the selected option i wanna increment another field. To explain better, i can create some entity called "modification", in this entity i have a select list with options "option 1, option 2, option3". When i will create an entity with "option 1", my field incrément will be "1", in a create a second entity with "option 1" the incrément will be "2". But if i create a third entity with "option 3" my increment will be "1".

The first thing i need to do is to collect the element list choosen automatically and do an EntityFieldQuery. When i got the count of result i just want to put the count in my field "increment".

Here is my code in hook_form_alter (field_pjt_phase is my list) :

$form['field_pjt_phase']['und']['#ajax'] = array(
     'event' => 'change',
     'callback' => 'projetcreate_modification_callback',
     //'wrapper' => 'field_event_1_role_replace',

And my callback :

function projetcreate_modification_callback($form, $form_state) {
      //$valeur = $form_state['values']['list_eltmission'];
      //My EntityQUery to take the last increment....
      //return $form['field_event_1_role'];

And here a picture of my fields :

My fields

How can i execute the Query when i change the select list ? How to put the result of my coult entityquery in my second field ?

Thanks for your help.

  • In your form alter add some code to check the form state like below to alter the text field value
if (!empty($form_state['values']['field_pjt_phase'])) {
    $field_val = $form_state['values']['field_pjt_phase'];

    // write dynamic query to get the count of the particular field with $field_val  as a condition  
    $form['replace_textfield']['#value'] = $count;
  • Modify your Ajax callback by adding just

    return $form['replace_textfield'];

Refer : This demo which uses Example Module

  • Ok thanks for the module ! I have two problems now. How can i pass my "$_REQUEST['project'] from my url to my ajax callback ? because when i choose a val in my list the value of $_REQUEST disappear. Second question : Why the increment isn't added to my field ?
    – Cracs
    Nov 19 '14 at 14:05
  • Ok i found how to pass the id. By the form_state.
    – Cracs
    Nov 19 '14 at 14:19
  • Oh that's fine.. So it worked?? Nov 19 '14 at 14:21

A good place to start is the aJax example module, and specifically the dependant example.

In that example, the seconds list is updated when the first list is changed, and it's value it updated according to its helper function _ajax_example_get_second_dropdown_options($selected) which is passed the value of the first list.

You could do something similar except use a simple text field for the second field but place the helper function on default value or value :

'#default_value' => _ajax_myentityfieldquery($selected),

and in the helper _ajax_myentityfieldquery return the result of your EntityFieldQuery function.

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.