2009-10-16 30 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