Drupal 7のデフォルト検索の結果を制限して、現在の言語のノードのみを取得するにはどうすればよいですか?
私のウェブサイトには3つの言語スイッチャーがあります。ユーザーは、サイトを表示するときに使用する言語を選択します。彼が何かを検索すると、結果ページに他の言語の結果が表示されます。現在、有効な言語は3つだけですが、これを6つ以上に拡張する予定です。
Drupal 7のデフォルト検索の結果を制限して、現在の言語のノードのみを取得するにはどうすればよいですか?
私のウェブサイトには3つの言語スイッチャーがあります。ユーザーは、サイトを表示するときに使用する言語を選択します。彼が何かを検索すると、結果ページに他の言語の結果が表示されます。現在、有効な言語は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を使用し、ファセット言語を作成しています:)。あなたのケースに使用し、ファセットを作成し、検索ページでデフォルトのフィルターを作成できます。
表示スイートモジュールを使用して、[表示モード]-> [言語]オプションを選択すると、現在のサイト言語の現在の言語で検索結果を表示できます。