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

如何根据特定字段的值显示和隐藏Drupal 7字段,drupal,drupal-7,cck,drupal-fields,Drupal,Drupal 7,Cck,Drupal Fields,我在这里要做的是控制一组字段如何显示在节点视图上。我不想按用户角色控制它们,因为这将是一个节点级权限,我不希望这些权限影响具有相同内容类型的其他节点 例如,假设我有三个不同的角色:ROLEA、ROLEB和ROLEC。每个角色都有自己的字段访问权限集。首次创建节点时,角色为ROLEA的用户可以看到两个字段,并可以编辑这些字段的值。发布节点时,通过规则模块调用规则/操作,并将该节点中的状态字段设置为STAGE1。在此事件(创建了一个新节点)之后,如果用户(ROLEA)转到她自己刚刚创建的节点,那么以

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

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

我想做的是创建一种方法,根据Roules模块根据不同用户组在该节点上工作的不同阶段设置的内容类型中特定字段的值,控制哪个字段是只读/可编辑/隐藏的。我不使用有机团体。我使用Drupal7和规则模块以及两个其他与权限相关的模块。但我发现,没有这样一种方法可以独立于用户角色,在节点级别处理字段可见性

你认为还有其他方法可以达到同样的效果吗?如果你能告诉我如何创建这样一个模块,我将不胜感激


我非常感谢所有的输入。

您可以使用:或创建一个模块并在节点窗体上添加一个钩子


使用这种钩子,您可以根据需要(用户角色、字段值…)轻松修改节点表单并隐藏或生成只读特定字段。

您可以使用:或创建模块并在节点表单上添加钩子

使用这种钩子,您可以根据需要(用户角色、字段值…)轻松修改节点形式并隐藏或生成只读特定字段。

还有钩子和钩子,允许您在渲染节点之前修改其渲染数组。在那里,您可以将字段数组设置为具有
'#access'=FALSE
,以便隐藏它们,或设置为具有
'#access'=TRUE
以显示它们

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

还有一个钩子和一个钩子,允许您在渲染节点之前修改该节点的渲染数组。在那里,您可以将字段数组设置为具有
'#access'=FALSE
,以便隐藏它们,或设置为具有
'#access'=TRUE
以显示它们


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

谢谢soju,我尝试了hook_page_alter()用于页面查看,hook_form_alter()用于页面编辑。谢谢soju,我尝试了hook_page_alter()用于页面查看,hook_form_alter()用于页面编辑。