如何根据特定字段的值显示和隐藏Drupal 7字段

时间:2011-03-15 03:12:51

标签: drupal drupal-7 cck drupal-fields

我在这里要做的是控制一组字段在节点视图中的显示方式。我不想通过用户角色来控制它们,因为这将是节点级别权限,我不希望这些权限影响具有相同内容类型的其他节点。

例如,想象一下我有三个不同的角色:ROLEA,ROLEB和ROLEC。每个角色都有自己的权限集,用于访问字段。当第一次创建节点时,角色为ROLEA的用户可以看到几个字段并可以编辑这些字段的值。发布节点时,将通过“规则”模块调用规则/操作,并将该节点中的状态字段设置为STAGE1。在此事件(创建新节点)之后,如果用户(ROLEA)转到刚刚由她自己创建的节点,那么之前可编辑的字段现在应该是只读的。这意味着当Rules模块将状态字段的值设置为STAGE1时,当该节点想要由Drupal加载时,我们需要检查状态值,并且如果它是例如STAGE1,则修改其他字段该特定节点,只读或可编辑,或在某些情况下将其隐藏在用户之外。所以我的猜测是创建一个模块,每次加载该类型的节点时,检查状态字段(这是我们在该节点类型中创建的字段)并根据该字段的值确定哪个节点应该出现或隐藏。这应该覆盖为该特定节点类型上的那些字段设置的权限。

我要做的是创建一种方法来控制哪个字段将是只读/可编辑/隐藏的,这是基于该内容类型中特定字段的值,该字段由Roules模块设置,基于不同用户组在该节点上工作的不同阶段。我没有使用有机集团。我使用Drupal 7和Rules模块以及其他几个与权限相关的模块。但我发现没有这种方法来处理节点级别的字段可见性,与用户角色分开。

您认为还有其他方法可以达到相同的效果吗?如果你能给我一个关于如何创建这样一个模块的想法,我感激不尽。

我非常感谢任何和所有的投入。

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容创建模块并在节点表单上添加挂钩:hook_form_alterhook_form_FORM_ID_alter

使用这种钩子,您可以根据您想要的任何内容(用户角色,字段值......)轻松修改节点表单并隐藏或只读特定字段

答案 1 :(得分:0)

还有hook_node_view_alter()挂钩和hook_entity_view_alter()挂钩,允许您在呈现节点之前修改它的呈现数组。在那里,您可以将字段数组设置为'#access' = FALSE以隐藏它们,或'#access' = TRUE显示它们。

如果节点的另一个字段中的日期过去有一段时间(它是“订阅过期”字段),我正在使用它隐藏一些字段。所以我不需要更改编辑表单,只需要更改字段显示。