Set default value to hook_form_alter?

Trying to pre-populate some of my form fields, and I use hook_form_alter (). I tried several different ways, but in both cases the fields are still empty. I assume that I need to set default_value, not a value, because if the user changes what is in this field, I want it to be correct. Is it correct?

Here is what I tried:

function mymodule_form_alter(&$form, &$form_state, $form_id) { if($form_id == 'user_profile_form') { if(arg(0) == 'user' && arg(1)) { $user = user_load(arg(1)); $form['profile_company_site']= array('#default_value' => $user->profile_company_site); $form['profile_blog_url']= array('#default_value' => $user->profile_blog_url); $form['profile_my_website_url']= array('#default_value' => $user->profile_my_website_url); $form['profile_first_name']= array('#default_value' => $user->profile_first_name); $form['profile_last_name']= array('#default_value' => $user->profile_last_name); } } } 

I also tried this as follows:

 function mymodule_form_alter(&$form, &$form_state, $form_id) { if($form_id == 'user_profile_form') { if(arg(0) == 'user' && arg(1)) { $user = user_load(arg(1)); $form['profile_company_site'][#default_value'] = $user->profile_company_site); $form['profile_blog_url'][#default_value'] = $user->profile_blog_url); $form['profile_my_website_url']['#default_value'] = $user->profile_my_website_url); $form['profile_first_name']['#default_value'] = $user->profile_first_name); $form['profile_last_name']['#default_value'] = $user->profile_last_name); } } } 
+4
source share
2 answers

You are missing one level of the array. The fields of the profile form will not be at the top level in the $ form array, but in a subarray with a key by category name. Therefore, if you assigned your fields to the category "approximate category", your code should look like this:

 function mymodule_form_alter(&$form, &$form_state, $form_id) { if($form_id == 'user_profile_form') { if(arg(0) == 'user' && arg(1)) { $user = user_load(arg(1)); $form['example category']['profile_company_site']['#default_value'] = $user->profile_company_site); $form['example category']['profile_blog_url']['#default_value'] = $user->profile_blog_url); $form['example category']['profile_my_website_url']['#default_value'] = $user->profile_my_website_url); $form['example category']['profile_first_name']['#default_value'] = $user->profile_first_name); $form['example category']['profile_last_name']['#default_value'] = $user->profile_last_name); } } } 

You should use a debugger (or at least var_dump() ) to check the array of forms you want to manipulate - it saves a lot of time.

+1
source

Both seem to be in the correct format, but your first one will overwrite all the other elements that you specified for this field. Thus, you better get off the second and add them a piece of food.

In the second case, you do not have enough single quotes for a couple.

 $form['profile_company_site']['#default_value'] = $user->profile_company_site); 

Are you sure you are in the loop?

+3
source

All Articles