"设置字段访问"有什么区别?在标题中提到的两个不同的钩子之间?
关于它的任何文档在哪里? (在两个钩子页面上没有找到任何方法来得到答案。)
我重新解释一个问题:一个或另一个钩子的HTML结果是什么?
感谢。
答案 0 :(得分:2)
#access 是一种表单API属性(您可以使用hook_form_alter()将其添加到表单元素中。
当设置为FALSE时,不呈现元素(Drupal不会在表单中呈现字段HTML),并且不考虑用户提交的值。
示例:
function MYMODULE_form_node_form_alter(&$form, $form_state) {
$form['some_field']['#access'] = FALSE; // this field will not be rendered in node edit form
}
hook_field_access() 是一个钩子,用于确定用户是否有权访问给定字段。使用此挂钩,您可以禁止某些用户访问(查看和编辑)某些字段:
function MYMODULE_field_access($op, $field, $entity_type, $entity, $account) {
if ($entity_type == 'node') {
if ($field['field_name'] == 'SOME_FIELD') {
if ($account->uid == 100) {
return FALSE;
}
}
}
}
这意味着当编辑和查看节点时,uid = 100的用户将无法呈现SOME FIELD。
...或者禁止所有人编辑某个字段:
function MYMODULE_field_access($op, $field, $entity_type, $entity, $account) {
if ($entity_type == 'node') {
if ($field['field_name'] == 'SOME_FIELD') {
if ($op == 'edit') {
return FALSE;
}
}
}
}
上面的代码实际上将节点编辑表单中元素'SOME_FIELD'的'#access'属性设置为FALSE,所以没有人会在节点编辑窗体中看到这个字段。
所以'#access'属性只有一个用例 - 设置对给定表单字段的访问权。
hook_field_access()有更广泛的应用程序区域,包括<#em>操纵'#access'属性。