現在アクティブな言語のみを検索します


23

Drupal 7のデフォルト検索の結果を制限して、現在の言語のノードのみを取得するにはどうすればよいですか?

私のウェブサイトには3つの言語スイッチャーがあります。ユーザーは、サイトを表示するときに使用する言語を選択します。彼が何かを検索すると、結果ページに他の言語の結果が表示されます。現在、有効な言語は3つだけですが、これを6つ以上に拡張する予定です。

回答:


2

グローバル$languageを使用して、自分の言語を知ることができます。ビューでは、「content:language-> current user 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();

完璧に動作しますが、viewsモジュールから生成されたクエリや、デフォルトの「search / node /%」ではなくベースのdrupalクエリなど、サイト上のクエリに影響しますか?
モハマドサラマ14

@mohamadsalamaこれは、ノードアクセスに影響するすべての検索クエリに影響します。言い換えると、高度な設定でノードアクセスチェックを明確に無効にしない限り、ほとんどのビュークエリが影響を受けるはずです(私の頭上で未確認)。
アレックスウェーバー14

これは文書化されていないフックではありません。実際にはhook_query_TAG_alter()フックであり、タグは「node_access」です。私自身のコードは、クエリに言語条件がまだないことも確認しますが、それ以外は非常に似ています。
ジョンフィアラ

4

同じ要件があり、Custom Search Internationalizationというサブモジュールを含むカスタム検索モジュールを使用しました:「すべてまたは現在の言語のみからのコンテンツの検索、およびすべてのラベルとセレクターの翻訳処理」カスタム検索ブロックなどの機能)。完全に動作します。


0

検索コアがそれをサポートしているかどうかはわかりません。

プロジェクトi18nluceneapiが表示されますが、現時点ではバージョン7をサポートしていません

私はsearchapiを使用し、ファセット言語を作成しています:)。あなたのケースに使用し、ファセットを作成し、検索ページでデフォルトのフィルターを作成できます。


0

表示スイートモジュールを使用して、[表示モード]-> [言語]オプションを選択すると、現在のサイト言語の現在の言語で検索結果を表示できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.