Drupal 7의 기본 검색 결과를 제한하여 현재 언어의 노드 만 가져 오려면 어떻게해야합니까?
내 웹 사이트에는 세 가지 언어 스위처가 있습니다. 사용자는 사이트를 볼 때 사용하려는 언어를 선택합니다. 그가 검색하면 결과 페이지에 다른 언어의 결과가 표시됩니다. 현재는 3 개의 사용 가능한 언어 만 있지만 6 개 이상으로 확장 할 계획입니다.
Drupal 7의 기본 검색 결과를 제한하여 현재 언어의 노드 만 가져 오려면 어떻게해야합니까?
내 웹 사이트에는 세 가지 언어 스위처가 있습니다. 사용자는 사이트를 볼 때 사용하려는 언어를 선택합니다. 그가 검색하면 결과 페이지에 다른 언어의 결과가 표시됩니다. 현재는 3 개의 사용 가능한 언어 만 있지만 6 개 이상으로 확장 할 계획입니다.
답변:
분명히 문서화되지 않은 것을 사용하여이를 수행하는 정말 우아한 방법이 있습니다 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();
검색 코어가이를 지원하는지 확실하지 않습니다.
i18nluceneapi 프로젝트를 보았지만 현재 버전 7을 지원하지 않습니다.
searchapi를 사용 하고 있으며 언어 :)를 작성합니다. 귀하의 경우에 사용할 수 있으며 검색 페이지에서 패싯 및 기본 필터를 만들 수 있습니다.
Display suite 모듈을 사용하여 View Mode-> Language 옵션을 선택하면 검색 결과가 현재 사이트 언어로 된 현재 언어로 제공됩니다.