从views_php过滤器返回TRUE不能按预期工作

时间:2012-09-26 23:39:01

标签: php drupal view

我在View中编写了一个全局PHP过滤器,我希望在满足条件时返回的值为TRUE,并且TRUE它应该从我的结果集中消除该行。视图在表格中显示其结果。

我的过滤器代码如下

global $user;
$uid = $user->uid;
$bid = db_query("SELECT entity_id FROM {field_data_field_bid_request_reference} WHERE field_bid_request_reference_line_item_id = '$row->line_item_id'");
foreach($bid as $value) {
    $node_uid = db_query("SELECT uid FROM {node} WHERE nid = '$value->entity_id'")->fetchField();
    if( $node_uid != $uid) {
       return TRUE;
    }
}

我得到的结果是我期望的if语句。 $node_uid正好返回我想要的,uid为创建具有nid =的节点的人entity_iddb_query获得。

在我的测试中,我有12行,每行有一个line_item_id$node_uid有6种可能的结果,如果我使用drupal_set_message来查看foreach中的4 node_id,我会看到它们。在我的测试用例中,我有一个5的uid,这应该匹配3次。我的最终结果中只能看到3行。

问题是因为它们与if语句匹配而应该被删除的9行应该返回TRUE实际上是显示的行,而且应该通过if语句测试失败的3应该显示的是从输出中删除。这几乎就像返回值相反。

我做什么就好像if语句通过时返回值不正确。

我原本预计node_id不等于uid的情况会返回TRUE,这些行不会出现在我的表格中。

任何人都可以就可能出现的问题以及如何调试此过滤器提出任何建议吗?

2 个答案:

答案 0 :(得分:1)

当过滤器显示TRUE时,它会过滤掉AFAIK。所以,你应该有

if ($node_uid == $uid) {
  return TRUE;
}

答案 1 :(得分:0)

我很确定你不能在foreach过滤器中使用views_php语句,只是因为过滤器的结果应该仅适用于一行和一行。有点像“全有或全无”。

我建议您修改视图并将字段内容:作者uid 添加到视图中,然后像这样调整views_php过滤器:

global $user;
$uid = $user->uid;
$node_uid = $row->uid;
if ($node_uid != $uid) {
  return TRUE;
}

注意:在之后内容:作者uid 字段添加到视图本身之前,变量$row->uid将不可用。并且,您可以选择从视图中隐藏作者uid的值,以便没有人看到它:

Adding the author uid to each row and then hiding it from the view.

希望有帮助...