2014-11-12 2 views
0

사용자 및 기사 모두에 할당 된 분류 범주 Workgroup을 사용하여 drupal로 작성된 위키가 있습니다. 나는 apache solr 검색 모듈을 facet api와 함께 사용하고 있으며 나의 최종 목표는 검색을 설정하여 사용자가 기사를 검색 할 때 기본적으로인데, 작업 그룹의 기사 만 표시됩니다.Drupal : 사용자/기사 패싯별로 apachesolr 검색 결과를 제한하는 방법

즉, 검색 창에서 검색을 시작하면 /search/site/hello (현재 동작) 대신 /search/site/hello?f[0]=im_field_kb_workgroups%3A4529 (4529는 하나의 작업 그룹 ID 임)과 동일한 결과를 얻게됩니다. 사용자는 여전히 검색을 허용해야합니다 다른 작업 그룹 패싯을 원하는 경우 패싯 블록의 확인란을 제거하여 제거 할 수 있습니다.

나는 apacheolr 모듈을 해킹하여 거의 효과가있다. 기능 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 검색 양식에 의존하고 있다는 점이다. 위키 검색 사이트는 KB 도메인과 경로 /search을 가리키는 간단한 POST 양식 인 위키 외부 사이트에서 사용자를 검색하여 위키에 방문하게합니다. 그래서 사람들이 위키에서 검색 할 때만 작동합니다. 위키에서 apachesolr 검색 양식을 제시합니다.

내 사용자 지정 모듈에서

, 내가 (테스트를 위해, 지금은 사용자의 작업 그룹의 검사없이)이 훅을 구현 :

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

이 검색의 결과를 필터링

나는 몇 가지 다른 옵션을 조사 하였다 어디에서나 필터는 항상 적용되며 사용자는이 필터 나 다른 필터를 선택 취소하지 않아도됩니다. (사실, 다른 필터는 f [0]으로 위의 GET 매개 변수로 필터를 전달할 때만 나타납니다)

또한 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 매개 변수를 설정하는 방법이 있습니까? 그러나이 방법이 효과가 있었다고하더라도 필자는 기본적으로 (검색 양식을 제출할 때) 필터 자체가 선택 해제되지 않은 경우에만이 작업을 수행하는 방법을 찾아야합니다. 패싯 블록의 확인란 변경을 감지하는 방법이 있습니까?

어쩌면 다른 방법이 있을까요? 나는 지난 2 일 동안 여기에서 찔 렸고, 내가 얻을 수있는 어떤 도움이라도 정말로 바르게 평가할 것이다. 감사!

답변

0

분류 작업 용어 "작업 그룹"에 관계를 추가하고 현재 사용자에 대한 컨텍스트 필터를 사용할 수 있습니다. 문맥 필터 섹션에서 필터가없는 경우 동작을 변경할 수 있습니다.

+0

검색 결과를 표시하기 위해 뷰를 사용하지 않으므로 불행히도이를 시도 할 수 없습니다. apacheolr 모듈에 좋은 조회 지원이없는 것 같습니다. – halfwise7