2009-10-16 106 views
4

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

这是我一直想:

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

     } 
    } 

} 

回答

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())检查要处理的形式阵列 - 节省了很多时间。

+2

FYI devel模块在函数dsm()中提供了'漂亮'版本的var_dump()。 – mikewaters 2009-10-16 19:44:15

+0

谢谢,这样做! – n00b0101 2009-10-16 19:51:49

+1

我个人喜欢使用krumo(“what_I_want_to_dump”); – saadlulu 2011-10-10 07:45:03

3

两个似乎是正确的格式,但你第一个会覆盖所有的您为该领域设置的其他项目。所以你最好先用第二种食物加入它们。

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

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

你确定你正在进入循环?

+0

+1 - 除了丢失的数组级别,这是正确的建议 – 2009-10-16 19:21:38