1

当用户注册时,他们通过用户配置文件关联到一个或多个位置。位置是自定义内容类型。我在用户配置文件中有一个自定义字段,定义了与该位置的关系。

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

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

编辑:

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

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

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

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

4

1 回答 1

0

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

  1. 查看使用用户类型
  2. 将关系添加到Profile2类型(在我的情况下为“学生”)
  3. 添加 profile:student:location 类型的上下文过滤器
  4. 选择“提供默认值”
  5. 类型:“php代码”
  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. 保存您的上下文过滤器

以这种方式使用 PHP,您可以加载当前用户并获取关联值以进行过滤。这在许多其他上下文和环境中可能很有用。

于 2012-04-17T21:54:42.747 回答