2011-02-16 157 views
2

我需要覆蓋特定用戶角色的'user /%user/edit'頁面,如'foo_role'。我已經成功創建了新的用戶註冊表單,該表單明確選擇了用於創建新的foo_role用戶的字段,但由於還有其他用戶字段不適用於foo_role,因此該角色的編輯頁面不正確。Drupal 7編輯用戶頁面覆蓋

這是我最好的嘗試,但它失敗:

function registermodule_form_user_profile_form_alter($form, &$form_state){ 
     global $user; 
     if(in_array("foo_role", $user->roles)){ 
      unset($form['field_non_foo']); 
     } 
     return $form; 
} 

回答

4

修改掛鉤使用變量引用來修改內存中的變量內容。因此,你也不需要在alter hooks中返回一個值。

應該是這樣的:

function registermodule_form_user_profile_form_alter(&$form, &$form_state){ 
    global $user; 

    if(in_array("foo_role", $user->roles)){ 
    $form['field_non_foo'] = FALSE; 
    } 
} 
3

你能否澄清 「失敗」?

首先,您缺少$ form中的&。改變這個開始。

如果這樣不能解決問題,試着弄清楚你的代碼有多少實際工作。嘗試添加一個drupal_set_message('user is in foo role');在if條件內。

如果顯示,那麼這是未設置的問題。請注意,您不應使用未設置,而應將'#access'設置爲FALSE。就像這樣:

$form['field_non_foo']['#access'] = FALSE; 

你甚至可以去幻想和直接保存無論是從in_array_check()返回:

$form['field_non_foo']['#access'] = in_array('foo_role', $user->roles); 

然而有這裏的區別,那就是#access現在將被迫可以是TRUE或FALSE,也可以不使用它可能已有的值。

編輯:你確定你的字段不在字段集內嗎?然後它會是$ form ['the_fieldset'] ['field_non_foo']。

+0

Berdir,道具打樣我 - 這確實是丟失的引用與上爭論。其他未解決的問題是在dpm()中顯示了預期的結果 - 讓事情變得複雜 - 感謝您的幫助。 q - 爲什麼不設置? – luckyape 2011-02-16 20:46:09

+0

也許另一個模塊期望文件存在。取消它實際上意味着它完全消失了。設置訪問false將簡單地隱藏並使用默認值 – Berdir 2011-02-16 20:53:02