2014-11-04 47 views
1

標題中提到的兩個不同鉤子之間的「設置字段訪問」有什麼區別?hook_field_access VS ['#access']在hook_form_alter中

哪裏有關於它的文檔? (在這兩個鉤子頁面上沒有找到任何方法可以得到答案。)

我重申了這個問題:一個或另一個鉤子的HTML結果是什麼?

謝謝。

回答

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個時,他編輯和查看節點用戶。

...或禁止大家編輯一些領域:

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'屬性。