2011-03-15 177 views
0

我在這裏要做的是控制一組字段在節點視圖中如何顯示。我不想通過用戶角色來控制它們,因爲這將成爲節點級權限,並且我不希望這些權限會影響具有相同內容類型的其他節點。如何根據特定字段的值顯示和隱藏Drupal 7字段

例如,假設我有三種不同的角色:ROLEA,ROLEB和ROLEC。每個角色都有自己的權限設置,用於訪問字段。當第一次創建節點時,角色爲ROLEA的用戶可以看到幾個字段並可以編輯這些字段的值。節點發布時,通過規則模塊調用規則/操作,並將該節點中的狀態字段設置爲STAGE1。在此事件(創建新節點)之後,如果用戶(ROLEA)轉到剛剛創建的節點,那麼以前可編輯的那些字段現在應該是隻讀的。這意味着在Rules模塊中,將狀態字段的值設置爲STAGE1,當該節點想要通過Drupal加載時,我們需要檢查狀態值,並基於該狀態如果它是例如STAGE1,則修改其他字段該特定節點是隻讀或可編輯的,或者在某些情況下將其隱藏起來而不是用戶。所以我的猜測是創建一個模塊,每當該類型的節點加載時,檢查狀態字段(這是我們在該節點類型中創建的字段)並根據該字段的值確定哪個節點應該出現或隱藏。這應該覆蓋爲該特定節點類型上的那些字段設置的權限。

我想要做的是創建一個方法來控制哪些字段將被讀取/可編輯/隱藏基於該內容類型中的特定字段的值,已由Roules模塊設置在不同的用戶羣上在該節點上工作的不同階段。我沒有使用有機組。我使用Drupal 7和Rules模塊以及其他許可相關模塊。但是我發現沒有這種方式來處理節點級別的字段可見性,與用戶角色分開。

您是否認爲有其他方法可以達到相同的效果?我很感激你能否給我一個關於如何創建這樣一個模塊的想法。

我真的很感激任何和所有的輸入。

回答

3

您可以創建一個模塊,並使用節點表上添加一個鉤子:hook_form_alterhook_form_FORM_ID_alter

使用這種掛鉤的,你可以很容易地修改節點形式和隱藏或使只讀具體領域的基礎上,無論你想要(用戶角色,字段值...)

+1

謝謝燒酒,我嘗試了hook_page_alter()進行頁面瀏覽,hook_form_alter進行頁面編輯。 – Mehr 2011-03-22 23:39:30

0

還有hook_node_view_alter()鉤子和hook_entity_view_alter()鉤子,允許您在渲染節點之前修改渲染陣列。在那裏你可以設置字段數組使其隱藏起來,或者'#access' = TRUE來顯示它們。

如果在節點的另一個字段中的日期過去有一段時間(這是「訂閱過期」字段),我正在使用它來隱藏某些字段。所以我不需要改變編輯表單,只是字段顯示。

相關問題