현재 활성화 된 언어 만 검색


23

Drupal 7의 기본 검색 결과를 제한하여 현재 언어의 노드 만 가져 오려면 어떻게해야합니까?

내 웹 사이트에는 세 가지 언어 스위처가 있습니다. 사용자는 사이트를 볼 때 사용하려는 언어를 선택합니다. 그가 검색하면 결과 페이지에 다른 언어의 결과가 표시됩니다. 현재는 3 개의 사용 가능한 언어 만 있지만 6 개 이상으로 확장 할 계획입니다.

답변:


2

전 세계 $language를 사용하여 자신이 사용하는 언어를 알 수 있습니다. 뷰에서 "content : language-> 현재 사용자 언어"를 사용하여 필터링 할 수 있습니다.


3
어떻게 도움이 되나요? 검색 페이지를 노드로 바꿀 수 있습니까? 이것이 단점이 있습니까?
점퍼

25

분명히 문서화되지 않은 것을 사용하여이를 수행하는 정말 우아한 방법이 있습니다 hook_query_node_access_alter().

function yourmodule_query_node_access_alter(QueryAlterableInterface $query) {
  $search = FALSE;
  $node = FALSE;

  // Even though we know the node alias is going to be "n", by checking for the
  // search_index table we make sure we're on the search page. Omitting this step will
  // break the default admin/content page.
  foreach ($query->getTables() as $alias => $table) {
    if ($table['table'] == 'search_index') {
      $search = $alias;
    }
    elseif ($table['table'] == 'node') {
      $node = $alias;
    }
  }

  // Make sure we're on the search page.
  if ($node && $search) {
    $db_and = db_and();
    // I guess you *could* use global $language here instead but this is safer.
    $language = i18n_language_interface();
    $lang = $language->language;

    $db_and->condition($node . '.language', $lang, '=');
    $query->condition($db_and);
  }
}

참고 :이 코드는 우수한 검색 구성 모듈을 기준으로 100 % 입니다.

사용자 대 콘텐츠 언어

일부 사이트에는 사용자가 선호하는 언어로 인터페이스를 표시하도록 언어 감지 기능이 구성되어 있지만 페이지 컨텐츠는 URL 또는 컨텐츠 언어를 기반으로 표시됩니다.

이 경우 교체를 고려하십시오

$language = i18n_language_interface();

$language = i18n_language_content();

완벽하게 작동하지만 뷰 모듈에서 생성 된 쿼리 또는 기본 "search / node / %"가 아닌 기반 drupal 쿼리와 같은 사이트의 모든 쿼리에 영향을 미칩니 까?
mohamad salama

@mohamadsalama 이것은 노드 액세스에 영향을 미치는 모든 검색어에 영향을 미칩니다. 다시 말해, 고급 설정 (헤드 상단에서 확인되지 않은 상태)에서 노드 액세스 확인을 특별히 비활성화하지 않는 한 대부분의 뷰 쿼리에 영향을 미칩니다.
Alex Weber

이것은 문서화되지 않은 후크가 아닙니다. 실제로 태그는 'node_access'인 hook_query_TAG_alter () 후크입니다. 내 코드는 쿼리에 이미 언어 조건이 없는지 확인하지만 그렇지 않은 경우 상당히 유사합니다.
John Fiala

4

동일한 요구 사항이 있었으며 Custom Search Internationalization 이라는 하위 모듈이 포함 된 Custom 검색 모듈을 사용했습니다 . " 모든 언어 또는 현재 언어로만 콘텐츠 검색 및 모든 레이블 및 선택기 번역 처리 "(이 모듈은 다른 유용한 정보도 제공합니다. 맞춤 검색 블록과 같은 기능). 완벽하게 작동합니다.


0

검색 코어가이를 지원하는지 확실하지 않습니다.

i18nluceneapi 프로젝트를 보았지만 현재 버전 7을 지원하지 않습니다.

searchapi를 사용 하고 있으며 언어 :)를 작성합니다. 귀하의 경우에 사용할 수 있으며 검색 페이지에서 패싯 및 기본 필터를 만들 수 있습니다.


0

Display suite 모듈을 사용하여 View Mode-> Language 옵션을 선택하면 검색 결과가 현재 사이트 언어로 된 현재 언어로 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.