从视图返回TRUE\u php筛选器未按预期工作
我已经在一个视图中编写了一个全局PHP过滤器,我希望在满足条件时返回值为TRUE,并且当从视图返回TRUE\u php筛选器未按预期工作,php,drupal,view,Php,Drupal,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 = '
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\u uid
正将创建节点的人的uid
返回到从db\u查询获得的实体id
在我的测试中,我有12行,每行都有一个行\u item\u id
。$node\u uid
有6个可能的结果,如果我使用drupal\u set\u消息查看foreach中的4个节点id
,我会看到它们。在我的测试用例中,uid为5,应该匹配3次。我应该在最终结果中只看到3行
问题是,由于与if语句匹配且应返回TRUE
而应删除的9行实际上是显示的行,而应通过if语句测试且应显示的3行是从输出中删除的行。这几乎就像返回值被反转一样
当if语句通过时,我所做的一切就好像返回值不正确一样
如果node\u id
不等于uid
返回TRUE
,这些行就不会出现在我的表中
任何人都可以提供一些关于可能出现的错误以及如何调试此筛选器的建议吗?当筛选器显示TRUE时,它会过滤掉,好的。所以,你应该
if ($node_uid == $uid) {
return TRUE;
}
我很确定不能在views\u php
过滤器中使用foreach
语句,因为过滤器的结果应该只应用于一行和一行。有点像“要么全有,要么什么都没有”
我建议编辑视图并将字段Content:Author uid添加到视图中,然后调整视图\u php
过滤器,如下所示:
global $user;
$uid = $user->uid;
$node_uid = $row->uid;
if ($node_uid != $uid) {
return TRUE;
}
注意:变量$row->uid
只有在将内容:Author uid字段添加到视图本身后才可用。并且,您可以选择从视图中隐藏author uid的值,这样就不会有人看到它:
希望这能有所帮助……我不清楚您想做什么-返回TRUE会阻止其他人被处理,因此您根本不会返回节点uid。但是,发表评论的原因是,您可以用一条SQL语句执行上述操作,而且可能应该这样做。但您可能可以执行更高级别的操作,一次返回9/3节点。因此,您可以发布调用代码,即构建阵列的内容,因为在那里处理可能会更好。我还将进一步了解您正在尝试做什么。正如Robbie所说,现在还不清楚您在这里尝试做什么,发布调用代码以及查询表中的一些示例行应该会有所帮助。需要两个等号而不是一个等号<代码>如果($node_uid==$uid){
我讨厌错过那些东西……发生的频率也比我想象的要高