2

「foo_role」などの特定のユーザー ロールの「user/%user/edit」ページをオーバーライドする必要があります。新しい foo_role ユーザーの作成に使用するフィールドを明示的に選択する新しいユーザー登録フォームを正常に作成しましたが、foo_role に適用できない追加のユーザー フィールドがあるため、このロールの編集ページは正しくありません。

これは私の最善の試みですが、失敗します:

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

2 に答える 2

4

変更フックは変数参照を使用して、メモリ内の変数の内容を変更します。そのため、alter フックで値を返す必要もありません。

次のようになります。

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

  if(in_array("foo_role", $user->roles)){
    $form['field_non_foo'] = FALSE;
  }   
}
于 2011-03-01T16:44:18.643 に答える
3

「失敗」を明確にできますか?

まず、$form の & がありません。まずそれを変更します。

それでも問題が解決しない場合は、コードが実際にどの程度機能しているかを調べてみてください。drupal_set_message('user is in foo role'); を追加してみてください。if条件の中。

それが表示される場合、それは未設定に問題があります。unset を使用するのではなく、'#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'] になります。

于 2011-02-16T19:10:09.230 に答える