如何在Drupal 7 Views中将当前用户用作相关字段?

时间:2012-04-11 04:05:03

标签: drupal-7 drupal-views

当用户注册时,他们通过用户个人资料关联到一个或多个位置。位置是自定义内容类型。我在用户个人资料中有一个自定义字段,用于定义与此位置的关系。

我有一个用户类型视图,它返回未经身份验证的用户,并且仅限于提升角色用户。我想添加一个过滤器,它只返回未经过身份验证的用户,这些用户的关联位置值与请求该视图的当前用户的一个或多个位置值匹配。

我可以按相关位置进行过滤,但我无法将该值与当前用户的值相关联。如果我可以将当​​前用户uid添加到关系区域而不仅仅是上下文过滤器区域,我觉得我可以这样做。我可以在不使用自定义过滤器或关系的情况下执行此操作吗?

修改

可能会有一些混乱,所以这可能有助于澄清。

User -> Profile -> Location是数据关联链。我想只显示其位置值与当前登录用户的位置值匹配的用户。

User (any) -> Profile (Student) -> Location(s) == User (current) -> Profile (admin) -> Location(s)

我可以编写SQL来执行此操作但不清楚是否可以单独使用视图,或者我是否需要自定义关系或过滤器。

1 个答案:

答案 0 :(得分:0)

在视图中执行此操作的唯一方法如下:

  1. 查看使用用户类型
  2. 将关系添加到Profile2类型(在我的情况下为'学生')
  3. 添加类型档案的上下文过滤器:student:location
  4. 选择“提供默认值”
  5. 类型:“php code”
  6. 使用以下代码:

    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);
    
  7. 在“更多”下,将“允许多个值”设置为TRUE
  8. 保存您的上下文过滤器
  9. 以这种方式使用PHP,您可以加载当前用户并获取要过滤的关联值。这在许多其他环境和环境中可能很有用。