Drupal内容视图显示通过用户参考字段引用的实体

时间:2016-04-25 14:20:33

标签: entity-framework drupal entity views

使用Drupal 7,Views和Entity API我正在尝试创建一个View,显示登录用户可以使用的所有下载。

我使用以下内容类型:

  • 软件
  • 软件包

用户有一个实体引用字段,可接受1个值来引用软件包 user_software_pack

软件包包含一个实体引用字段,该字段接受无限值以引用包中包含的软件 field_included_software

对于视图我正在创建一个未格式化的类型软件

的内容提示词列表

执行此操作会向我显示已发布的所有软件,我现在正尝试使用以下关系将列表过滤为仅供用户使用的软件。

  • 通过 field_software_pack
  • 引用内容的用户实体的桥梁
  • 通过 field_software_pack
  • 引用的内容实体的桥梁
  • 通过 field_included_software
  • 引用的内容实体的桥梁

对我来说,这会转换为获取用户,然后使用它来引用软件包,然后引用该软件包中的软件。 该视图向我显示了所有软件实体。我错过了什么吗?

设置Show:Content设置以使用该关系为我提供了一个空视图,根据需要设置关系也提供了一个空视图。

1 个答案:

答案 0 :(得分:0)

经过漫长的休息并回到问题后,我设法解决了问题。

对于任何可能遇到类似问题的人: 我过多地使用过一种关系。

我的视图显示软件类型的内容。 多个软件包 (field_included_software)中引用了软件用户个人资料有一个参考字段( field_software_pack)到1 软件包

要过滤内容类型软件的视图,首先需要建立与引用软件软件包的关系。

  • 通过field_included_software
  • 引用内容的Content实体的桥梁

然后,它需要与用户个人资料的另一个关系,引用用户拥有的软件包

  • 通过field_software_pack
  • 引用内容的User实体的桥接器

要获取已登录用户的用户ID,仅将结果限制为用户软件包中的软件,则需要使用上下文过滤器。

  • 用户:Uid

上下文过滤器设置为从PHP代码提供默认值:

$uid = $GLOBALS['user']->uid;
return $uid;

上下文过滤器的关系设置为用户引用。

所有关系都必须设置为必需。

一旦我像这样配置了我的视图,一切都按计划进行。