从 views_php 过滤器返回 TRUE 未按预期工作
Posted
技术标签:
【中文标题】从 views_php 过滤器返回 TRUE 未按预期工作【英文标题】:Return TRUE from a views_php filter is not working as expected 【发布时间】:2012-09-26 23:39:00 【问题描述】:我在视图中编写了一个全局 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
= 到从 db_query
获得的 entity_id
。
在我的测试中,我有 12 行,每行都有一个 line_item_id
。 $node_uid
有 6 个可能的结果,如果我使用 drupal_set_message
查看 foreach 内的 4 node_id
,我会看到它们。在我的测试用例中,我的 uid 为 5,这应该匹配 3 次。我应该在最终结果中只看到 3 行。
问题在于,因为与 if 语句匹配并应返回 TRUE
而应消除的 9 行实际上是显示的行,而应通过 if 语句测试并应显示的 3 行是被删除的行从输出。这几乎就像是返回值被颠倒了一样。
我所做的一切都好像 if 语句通过时返回值不正确。
我本来预计 node_id
不等于 uid
的情况会返回 TRUE
并且这些行不会出现在我的表中。
任何人都可以就可能出现的问题以及如何调试此过滤器提供任何建议吗?
【问题讨论】:
我不清楚您要做什么-“返回 TRUE”会阻止其他人被处理,因此您根本不会返回 node_uid。但是 - 评论的原因 - 是您可以使用一条 SQL 语句执行上述操作,并且可能应该这样做。但是您可能可以做到更高级别以一次性返回 9 / 3 个节点。那么您能否发布调用代码,即构建您的数组的内容,因为在那里处理可能会更好。我也会更多地了解你想要做什么。 正如 Robbie 所说,您在这里尝试做什么并不完全清楚,发布调用代码以及正在查询的表中的一些示例行应该会有所帮助。 【参考方案1】:当过滤器显示 TRUE 时,它会过滤掉,AFAIK。所以,你应该有
if ($node_uid == $uid)
return TRUE;
【讨论】:
需要两个等号而不是一个...if ($node_uid == $uid)
我讨厌错过那些东西……发生的频率也超出了我的想象。 ;)【参考方案2】:
我很确定您不能在 views_php
过滤器中使用 foreach
语句,因为过滤器的结果应该只应用于一行和一行。有点像“全有或全无”。
我建议编辑视图并将字段 Content: Author uid 添加到视图中,然后调整您的 views_php
过滤器,如下所示:
global $user;
$uid = $user->uid;
$node_uid = $row->uid;
if ($node_uid != $uid)
return TRUE;
注意:变量$row->uid
直到您将Content: Author uid 字段添加到视图本身后才可用。而且,您可以选择从视图中隐藏作者 uid 的值,这样没人会看到它:
希望对您有所帮助...
【讨论】:
以上是关于从 views_php 过滤器返回 TRUE 未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
无法从异步函数获取返回值,等待未按预期工作(Vue API 服务)