1

英语不是我的母语——所以我希望你能理解我的意思,请宽容。;-)

我是一个 drupal 初学者,现在已经学习了几个星期 - 用英语阅读了很多东西,但我需要帮助才能找到正确的方法

我试图生成通用内容类型,其中 field.display.state 应该根据实际存储在 profile2 中的用户驱动设置进行更改。我实际上未能以适当的方式实现这种依赖关系......

当只涉及 profile2 字段时,条件字段表现得很好我还查看了 hook_alter_form 规则字段权限

..我实际上有点困惑哪种方式可以工作以及我应该使用哪种方式

我不是在寻找制作的代码,但也许是为了寻找最佳实践,在这里寻找提示 - 提示这里的专家如何处理这些事情 链接到主题等等

感谢所有的答案汤姆

4

1 回答 1

0

到目前为止,最好的方法是使用一些(相对)简单的代码来做到这一点。

首先,您需要创建一个简单的模块。更多关于这里

一旦你有了它,你需要改变节点的显示方式。最好的钩子是hook_node_view,它允许您在呈现之前覆盖每个字段。

在那里,您需要检查内容类型是否是您要更改的内容类型,执行您的逻辑,并更改要呈现的节点对象。最后,返回更改后的节点对象。

假设您的模块是nodemodule

function nodemodule_node_view($node, $view_mode) {
  global $user;
  if ($node->type=="my_content_type"){
     // Perform checks and whatnot here
     if($user->uid==123) {
       // Disable access to field_example
       $node->content['field_example']['#access'] = false;   
     }
  }

  return $node;
}

这基本上相当于用户“无权”查看该字段。这里的标准 ( uid= 123 ) 没什么用,但您可以使用自己的标准。

如果您使用它,请不要忘记刷新所有缓存!

另一种选择是字段权限模块,您可以在其中设置哪些组可以对每个字段执行什么操作(查看/编辑/等),然后使用用户挂钩来更改用户组。我敢肯定还有其他方法:)

于 2013-08-20T13:55:54.067 回答