我在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_id
从db_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
,这些行不会出现在我的表格中。
任何人都可以就可能出现的问题以及如何调试此过滤器提出任何建议吗?
答案 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的值,以便没有人看到它:
希望有帮助...