0

这是关于在客户门户网站上显示基于“组织”的“事件报告”。我们将在输入框中输入组织,然后单击“提交”。事故报告应仅针对该组织显示。

这种情况正在发生,但“登录”联系人 ID (c_id) 也作为过滤器传递给该事件报告。

是否可以删除对上述事件报告施加的 c_id 过滤器?如何从事件报告中删除此联系人 ID 过滤器?

有人建议使用 pre_report_get_data 挂钩,然后取消设置联系人 ID (c_id) 过滤器。但我无法弄清楚如何做到这一点。

有人可以给我一个代码片段来使用 pre_report_get_data 钩子删除 c_id 过滤器吗?或其他解决此问题的方法。

4

1 回答 1

0

将要编辑的报告复制到新版本,然后根据需要编辑报告的过滤器。您将无法直接编辑默认的预设报告,但通过副本,您可以对其进行完全编辑。

编辑

由于客户门户网站上的用户模型,联系人过滤器始终应用于客户门户网站过滤器。CP 期望网络上的用户是特定客户,并且应该只能访问特定于用户会话中特定联系人的联系人数据。这是一种安全机制,正在按预期工作。

如果目标是显示可能具有与其相关的联系人数据但应该向所有联系人公开的报告中的数据,那么您可能应该编写一个直接运行 ROQL 或 Analytics API 查询的自定义小部件,但要警惕潜在的如果实施不正确,则公开其他客户数据。

如果你想使用 pre_report_get_data 钩子,那么在 settings/hooks.php 文件中启用钩子非常简单。将钩子指向您希望钩子调用的模型和方法。然后,编辑传递的数据数组以从过滤器数组中取消设置 c_id,如另一篇文章中所述。

$rnHooks['pre_report_get'][] = array(
   'class' => 'filter_report',
   'function' => 'report_run',
   'filepath' => ''
); 

这告诉钩子引擎调用模型report_run()中的方法filter_report。这些通常是 CP 中的示例代码文件,因此您应该已经完成​​了大部分工作来实现该挂钩。

function report_run($hookData)
{
    if($hookData['data']['reportId'] == '100335') //Change the report ID to the report that you need to call  
    {
        unset($hookData['data']['filters']['c_id']); //you'll need to lookup the key of the filter in the report to figure out which one to unset
    }
}
于 2016-09-21T15:21:57.193 回答