3

我在视图中编写了一个全局 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创建节点的人来说,从.nidentity_iddb_query

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

问题在于,因为匹配 if 语句并应返回而应消除的 9 行TRUE实际上是显示的行,而应通过 if 语句测试并应显示的 3 行是从输出中删除的行。这几乎就像返回值被反转了一样。

当 if 语句通过时,我所做的就好像返回值不正确。

我本来希望返回的情况node_id不等于uid返回TRUE并且这些行不会出现在我的表中。

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

4

2 回答 2

1

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

if ($node_uid == $uid) {
  return TRUE;
}
于 2012-10-04T08:32:42.303 回答
0

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

我建议编辑视图并将字段Content: Author uid添加到视图中,然后像这样调整您的views_php过滤器:

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

注意:您将Content: Author uid字段添加到视图本身$row->uid之前,该变量将不可用。而且,您可以选择从视图中隐藏作者 uid 的值,这样没人会看到它:

将作者 uid 添加到每一行,然后将其从视图中隐藏。

希望有帮助...

于 2013-04-19T07:07:37.813 回答