Drupal - 在hook_form_alter中设置默认值?

时间:2009-10-16 18:20:41

标签: forms drupal default

尝试预填充一些表单字段,并使用hook_form_alter()。我尝试了几种不同的方法,但在这两种情况下,字段仍然是空的。我假设我需要设置default_value而不是值,因为如果用户更改了字段中的内容,我希望它能够正确更新。是吗?

以下是我一直在尝试的内容:

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

        }
    }

}

我也是这样试过的:

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

        }
    }

}

2 个答案:

答案 0 :(得分:3)

两者似乎都是正确的格式,但您的第一个将覆盖您为该字段设置的所有其他项目。所以你最好和第二个人一起吃点东西。

在第二个问题上,你错过了一对夫妇的单引号。

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

你确定要进入循环吗?

答案 1 :(得分:1)

您缺少一个阵列级别。配置文件表单字段不在$ form数组的顶层,而是在由类别名称键入的子数组中。因此,如果您为字段指定了“示例类别”类别,则代码应如下所示:

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

您应该使用调试器(或至少var_dump())来检查您想要操作的表单数组 - 节省大量时间。