hook_form_alter для сброса полей в соответствии с ролью пользователя - PullRequest
0 голосов
/ 08 мая 2018

Я сталкиваюсь с проблемой, когда пытаюсь использовать hook_form_alter, чтобы скрыть поля в соответствии с ролями пользователя. Я использовал unset() и удалил поле из массива $form, но он все еще показывает, когда форма отображается.

Вот мой код:

function mymodule_form_alter($form, $form_state, $form_id){
  global $user;
  if($form_id == 'my_content_type'){
    if(array_key_exists(5,$user->roles) && !array_key_exists(3,$user->roles)){
      if(empty($form_state['field']['args'][0]->title)){
        unset($form['field_body']);
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я нашел решение. Мне нужно просто добавить & with $ form и $ form_state в параметры hook_form_alter. Как hook_form_alter (& $ form, & $ form_state, $ form_id)

0 голосов
/ 08 мая 2018

Вместо использования unset() для скрытия элемента формы вы должны установить для свойства #access значение FALSE. Это сохраняет дерево построения формы без изменений, что позволяет избежать проблем, если другие модули пытаются получить доступ к этой информации или изменить ее. Источник

function MYMODULE_form_alter($form, $form_state, $form_id) {

  global $user;
  $account = $user;

  if ($form_id == 'MYCONTENTTYPE_node_form') {

    if (user_has_role(5, $account) && !user_has_role(3, $account)) {

      if (empty($form_state['field']['args'][0]->title)) {

        $form['field_body']['#access'] = FALSE;
      }
    }
  }
}

Если это все еще не работает, дважды проверьте ваши if-запросы. Они действительно что-то делают? Вы вошли в систему как соответствующий пользователь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...