2010-06-16 42 views
2

背景:我有一个复杂的搜索表单,用于存储查询并将其散列在缓存中。一旦设置了缓存,我就会重定向到类似于/searchresults/e6c86fadc7e4b7a2d068932efc9cc358的地方,最后一个很长的字符串就是我的查询的md5哈希值。我需要为观点提出一个新的观点,以便知道散列的优点。Drupal Views api,添加简单的参数处理程序

所有这些捣乱的原因是因为我的原始搜索表单是复杂的方式,并且有许多参数可以考虑将它们全部放入路径中,并期望使用普通视图参数进行过滤。

现在我的问题。我一直在阅读views 2文档,但没有弄清楚如何完成这个自定义参数。在我看来,这似乎并不像我认为的那样艰难。除了关于veiws api的任何知识外,似乎我所需要的只是一个回调函数,它将从路径中获取参数,因为它只是参数,并返回要过滤的节点ID列表。

任何人都可以指向我的解决方案或给我一些示例代码?

感谢您的帮助!你们很棒。

PS。我非常肯定,我的设计是最好的,我可以提出,让我们不要放弃我的问题,并且如果我们能够帮助它,就交叉检查我的设计逻辑。

回答

1

这并不像您想要的那样容易。

在视图中,参数用于返回对象,fx用户,节点,术语,自定义对象。所以你可以制作一些自定义代码来获取“查询对象”。那只是第一步。然后您需要从查询对象中获取信息。您可以尝试与节点建立自定义关系绑定,或者构建您自己的过滤器以使所需的SQL成为可能。这很快就会变成令人困惑的时刻。

相反,我建议您使用hook_views_query_alter,这将允许您更改查询。由于您已经拥有SQL,因此只需检查散列,如果存在,请更改查询。应该是一件非常简单的事情。唯一有点棘手的是,你必须使用视图使用的查询对象来进行查询,但这并不难。

+0

感谢您的回复。实际上,只花了我几个小时才得出这些意见,我认为我正在完成我所需要的。我决不会掌握它,但它的工作原理! 如果我能及时得到你的回复,你可能救了我一两个小时......哦,好吧。 :) – Icode4food 2010-06-17 12:57:03