我该如何解决这个问题?

时间:2010-08-13 05:21:44

标签: php drupal drupal-views

  • List -> l_user我有一个List节点,其中包含用户参考字段(l_user)。
  • Story -> s-user然后,我有Story个节点,这些节点也有一个用户参考字段(s_user)。
  • ListStory之间没有直接联系。

我想向List添加一个视图,其中列出了引用list引用的同一用户的所有故事。基本上类似SELECT stories WHERE story.s_user = this list.l_userl_user的内容是此视图所在的列表中引用的用户。

到目前为止,视图正在按node:type story进行过滤,但我不确定要使用什么(参数/过滤器等)将story s_user链接到list l_user

这对于视图是否可行?

3 个答案:

答案 0 :(得分:5)

您可以使用Views参数执行此操作。您要做的是按用户过滤该列表,并让用户从您当前所在的节点(或更具体地说,节点的用户参考字段)进行过滤。所以你需要做的是提供一个参数,该参数的参数等于节点的用户引用字段。

为此,请正常设置视图,就像显示每个用户的节点一样。所以你可能有一个类似的观点:

  • 第1页(用户1)
  • 第2页(用户1)
  • 第3页(用户2)
  • 第4页(用户2)
  • 第5页(用户1)

用户是每个名为 Story用户参考的页面上的用户参考字段。

现在,在 Arguments 下为 Content:Story用户参考添加一个参数。现在,视图将仅显示由参数中指定的用户发布的节点。问题是,在一个块中,没有参数可以指定:您需要提供一个默认参数。

仍然在内容:故事用户参考的参数配置窗格中,选择提供默认参数 Action,如果参数不存在,则选择 。您将获得各种选项,但它们都不是您正在寻找的:当前节点的用户参考字段。

因此,您需要使用 PHP代码操作并使用以下代码:

$node = node_load(arg(1));
return $node->field_list_user[0]['uid'];

这将根据从当前页面路径检索到的节点ID加载节点,并返回节点的用户引用字段(将field_list_user更改为列表节点上的用户引用字段的名称)。

因此,如果我在节点17上,其用户引用字段指定用户4,则将传递给视图的参数为4.该视图将仅显示视图中具有也是4的用户引用的节点

保存视图,创建块显示,并将其放在任何您想要的位置。当您访问带有用户引用字段的节点页面时,该块将填充引用的用户节点。

答案 1 :(得分:3)

我建议从列表节点获取所有用户引用,并将它们传递给views参数。所以你的代码看起来像这样(未经测试):

$user_ids = array();
foreach ($list_node->l_user as $user_reference) {
  $user_ids[] = $user_reference['uid'];
}
$view = views_get_view('list_view');
return $view->preview('block_1', array(implode(',', $user_ids));

假设您有一个名为'list_view'的视图,其显示名为'block_1'(当您将鼠标悬停在显示屏上时,可以看到机器名称)。该显示需要是具有节点类型“故事”的过滤器的节点视图,并且内容user_l的参数设置为采用多个值。这段代码中几乎肯定存在一个错误,但我知道一般概念是有效的,因为我之前已经做了好几次。

答案 2 :(得分:2)

要解决此问题,您需要下载NodeReferrer。 http://drupal.org/project/nodereferrer

它为CCK的节点参考字段提供了一个计数器部分。

然后您可以在视图中调用“Node referrer”字段。