【问题标题】:How to display and hide Drupal 7 fields, based on value of a specific field如何根据特定字段的值显示和隐藏 Drupal 7 字段
【发布时间】:2011-07-15 11:52:51
【问题描述】:

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

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

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

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

我非常感谢任何和所有的意见。

【问题讨论】:

    标签: drupal drupal-7 cck drupal-fields


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢烧酒,我尝试使用 hook_page_alter() 进行页面查看,使用 hook_form_alter 进行页面编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2012-06-15
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多