2009-07-01 113 views
0

我看着DP 6搜索API,并没有看到一个钩子,它会让我在搜索键传递到搜索模块执行搜索之前更改搜索键。 我想对用户输入的字符串进行关键字扩展。例如,如果用户输入'foo',我想执行搜索'foo'和'bar'。最终应该有这些映射的UI,但对于快速原型,我可以对字符串进行硬编码。Drupal搜索行为

你会从哪里开始放这些代码?我错过了搜索API中的钩子吗?


UPDATE:
Synonyms模块做这行的分类术语。我仍然可能需要为全文搜索条件执行此操作。有什么建议么?

回答

2

在这种情况下使用的钩子是hook_search_preprocess。它允许您在搜索完成之前编辑用户输入的密钥。有益的是,它这是为索引的文本做这个,所以你也获得了这些文字的索引扩展的优势。

0

我没有试过,但阅读我认为你可以你的模块中实现hook__search(),做到keword扩张那里,然后做与扩展密钥的do__search()的文档后。

从外观上看,你也必须做hook__update__index()

+0

这对我来说并不完全确定。我假设Drupal调用自己为所有模块执行_search(),那么我不会搜索两次吗?我可以想象,我可以调用do_search只为我想要以编程方式添加的键。由于将会OR'd,我可以合并结果集。对于一个简单的问题,这仍然是一个复杂的解决方案。我需要做的是'重写'do_search()方法,但我不知道如何。 – cdonner 2009-07-02 02:15:48

+0

是的,我没有阅读足够的关于钩子搜索预处理的文档,认为它只是用于索引。 – 2009-07-06 16:36:57