0

我有一个用 drupal 构建的 wiki,有一个分类类别工作组,分配给用户和文章。我正在使用带有 facet api 的 apache solr 搜索模块,我的最终目标是设置搜索,以便默认情况下当用户搜索文章时,只显示来自他们工作组的文章。

也就是说,当他们从搜索框中启动搜索时,他们应该得到与 for /search/site/hello?f[0]=im_field_kb_workgroups%3A4529(其中 4529 是一个工作组 ID)相同的结果,而不仅仅是/search/site/hello(当前行为)用户仍然应该被允许在他们想要的时候在其他工作组方面进行搜索, 通过删除 facet 块中的复选框。

我几乎是通过破解 apachesolr 模块来完成这项工作的(我知道不推荐,但我真的希望它能工作)。在函数中apachesolr_search_custom_page_search_form_submit,我有:

  // Get the workgroup id
  global $user;
  $account = user_load($user->uid);
  $user_kb_wg_fieldinfo = field_get_items('user', $account, 'field_kb_workgroups');
  $user_kb_wg_tid= '';
  if ($user_kb_wg_fieldinfo) {
    $user_kb_wg_tid = $user_kb_wg_fieldinfo[0]['tid'];
  }

  // Add the solr filter for this workgroup facet so that by default, search results are
  // fetched only from that workgroup.
  if ($user_kb_wg_tid === '4529') {
    $get['f[0]'] = 'im_field_kb_workgroups:4529';
  }

这完成了工作,但问题是这依赖于 apachesolr 搜索表单。我有用户通过从 wiki 外部的站点搜索来访问 wiki,其中 wiki 搜索表单只是一个指向 KB 域和路径的简单 POST 表单/search因此,这仅在人们从 wiki 内部进行搜索时才有效,我会在其中向他们展示 apachesolr 搜索表单。

我调查了其他一些选择:

在我的自定义模块中,我实现了这个钩子(现在没有用户工作组检查,用于测试):

apachesolr 过滤分类 有大用 有大大用

function kb_hacks_apachesolr_query_prepare($query) {
  $query->addFilter('im_field_kb_workgroups', '4529');
}

这会过滤所有地方的搜索结果,但过滤器会一直应用,用户无法取消选择此过滤器或其他过滤器。(事实上 ,其他过滤器仅在将过滤器作为 GET 参数传递时出现,如上面的 f[0])

我还玩过 url_inbound_alter 挂钩,但无法弄清楚如何将 solr 查询参数作为 GET 传递。以下没有工作。

function kb_hacks_url_inbound_alter(&$path, $original_path, $path_language) {
  if ($path == 'search/site/hello') {
    $_GET['f[0]'] = "im_field_kb_workgroups:4529";
    //$_GET['f[0]'] = "im_field_kb_workgroups%3A4529";
    //$path = 'search/site/hello?f[0]=im_field_kb_workgroups%3A4529;
  }
}

有没有办法从此挂钩设置 GET 参数?但即使这有效,我仍然必须弄清楚如何仅在默认情况下(提交搜索表单时)执行此操作,而不是在取消选择过滤器本身时执行此操作。有没有办法检测构面块中的复选框更改?

也许还有另一种方法可以做到这一点?过去两天我一直被困在这里,非常感谢我能得到的任何帮助。谢谢!

获取问题和答案的更新

1 个回答

0

您可以将关系添加到分类术语“工作组”,并为当前用户使用上下文过滤器。在上下文过滤器部分,您可以更改过滤器不存在时的行为。






来自  https://stackoverflow.com/questions/26892715/drupal-how-to-restrict-apachesolr-search-results-by-user-article-facets