简体   繁体   中英

Drupal - Set default value in hook_form_alter?

Trying to prepopulate some of my form fields, and am using hook_form_alter(). I've tried a couple of different ways, but in both cases, the fields still come up empty. I'm assuming that I need to set default_value and not value because if the user changes what's in the field, I want that to update correctly. Is that right?

Here's what I've been trying:

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 it this way:

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);

        }
    }

}

Both seem to be in the correct format, but your first one will overwrite all the other items you set for the field. So you are better going off with the second and adding them piece meal.

On the second one, you are missing some single quotes on a couple.

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

Are you sure you are getting into loop?

You are missing one array level. The profile form fields will not be at the top level in the $form array, but in a subarray keyed by the category name. So if you assigned your fields a category of 'example 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 a var_dump() ) to inspect the form array you want to manipulate - saves a lot of time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM