当我尝试使用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']);
}
}
}
}
解决方法:
您应该将#access属性设置为FALSE,而不是使用unset()来隐藏表单元素.这样可以保持表单构建树的完整性,从而避免在其他模块尝试访问或更改该信息时出现问题. Source
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-requests.他们真的在做什么吗?您目前是否以相应的用户身份登录?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。