如何在 Drupal 7 视图中使用当前用户作为相关字段?
Posted
技术标签:
【中文标题】如何在 Drupal 7 视图中使用当前用户作为相关字段?【英文标题】:How to use current user as related field in Drupal 7 Views? 【发布时间】:2012-04-11 04:05:03 【问题描述】:当用户注册时,他们会通过用户个人资料关联到一个或多个位置。位置是自定义内容类型。我在用户配置文件中有一个自定义字段,定义了与该位置的关系。
我有一个用户类型的视图,它返回未经身份验证的用户,并且仅限于提升角色的用户。我想添加一个过滤器,该过滤器只返回关联位置值与请求视图的当前用户的一个或多个位置值匹配的未经身份验证的用户。
我可以按关联位置进行过滤,但我无法将该值与当前用户的值相关联。如果我可以将当前用户 uid 添加到关系区域而不仅仅是上下文过滤器区域,我觉得我可能能够做到这一点。我可以在不使用自定义过滤器或关系的情况下做到这一点吗?
编辑:
可能会有一些混乱,所以这可能有助于澄清。
User -> Profile -> Location
是数据关联链。我只想显示位置值与当前登录用户匹配的用户。
User (any) -> Profile (Student) -> Location(s) == User (current) -> Profile (admin) -> Location(s)
我可以编写 SQL 来执行此操作,但不清楚是否可以单独使用视图来执行此操作,或者我是否需要自定义关系或过滤器。
【问题讨论】:
【参考方案1】:在视图中执行此操作的唯一方法如下:
-
查看使用用户类型
将关系添加到 Profile2 类型(在我的情况下为“学生”)
添加 profile:student:location 类型的上下文过滤器
选择“提供默认值”
类型:“php 代码”
使用以下代码:
global $user;
$profile = profile2_load_by_user($user->uid,'facilitator');
if (!$profile) return '';
if (!isset($profile->field_location['und'])) return '';
$locations='';
foreach ($profile->field_location['und'] as $location)
$locations.=','.$location['nid'];
return substr($locations,1);
在“更多”下,将“允许多个值”设置为 TRUE
保存上下文过滤器
以这种方式使用 PHP,您可以加载当前用户并获取相关值以进行过滤。这在许多其他上下文和情况下可能很有用。
【讨论】:
以上是关于如何在 Drupal 7 视图中使用当前用户作为相关字段?的主要内容,如果未能解决你的问题,请参考以下文章
Drupal 7:如何根据当前页面内容过滤视图内容(带有实体引用字段)