Drupal 7 Edit User Page Override - PullRequest
       27

Drupal 7 Edit User Page Override

2 голосов
/ 16 февраля 2011

Мне нужно переопределить страницу 'user /% user / edit' для конкретной роли пользователя, скажем, 'foo_role'.Я успешно создал новую регистрационную форму пользователя, которая явно выбирает поля, которые будут использоваться при создании нового пользователя 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;
 }

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

Перехватчики Alter используют переменную ссылку для изменения содержимого переменной в памяти. Из-за этого вам также не нужно возвращать значение в хуках 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;
  }   
}
3 голосов
/ 16 февраля 2011

Можете ли вы уточнить "не удается"?

Во-первых, вам не хватает формы & из $.Для начала измените это.

Если это не помогает, попробуйте выяснить, какая часть вашего кода на самом деле работает.Попробуйте добавить drupal_set_message («пользователь в роли foo»);внутри условия if.

Если это показывает, то это проблема с unset.Обратите внимание, что вы не должны использовать unset, а вместо этого установите '#access' в FALSE.Как это:

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

Вы можете даже пойти по вкусу и напрямую сохранить все, что возвращается из in_array_check ():

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

Однако здесь есть разница, и это то, чтотеперь вы должны быть либо TRUE, либо FALSE и не использовать какое-либо значение, которое у него уже может быть.

Редактировать: Вы уверены, что ваше поле не находится внутри набора полей?Тогда вместо этого будет $ form ['the_fieldset'] ['field_non_foo'].

...