標題中提到的兩個不同鉤子之間的「設置字段訪問」有什麼區別?hook_field_access VS ['#access']在hook_form_alter中
哪裏有關於它的文檔? (在這兩個鉤子頁面上沒有找到任何方法可以得到答案。)
我重申了這個問題:一個或另一個鉤子的HTML結果是什麼?
謝謝。
標題中提到的兩個不同鉤子之間的「設置字段訪問」有什麼區別?hook_field_access VS ['#access']在hook_form_alter中
哪裏有關於它的文檔? (在這兩個鉤子頁面上沒有找到任何方法可以得到答案。)
我重申了這個問題:一個或另一個鉤子的HTML結果是什麼?
謝謝。
#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個時,他編輯和查看節點用戶。
...或禁止大家編輯一些領域:
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()具有更廣闊的應用領域,包括操縱'#access'屬性。