it-swarm-id.com

Cari hanya untuk bahasa yang saat ini aktif

Bagaimana saya bisa membatasi hasil dari pencarian default di Drupal 7, hanya untuk membawa node yang ada dalam bahasa saat ini?

Situs web saya memiliki pengalih tiga bahasa; pengguna memilih bahasa apa yang ingin dia gunakan saat melihat situs. Jika dia mencari sesuatu, halaman hasil membawa hasil dari bahasa lain. Hari ini saya hanya memiliki 3 bahasa yang diaktifkan, tetapi kami berencana untuk memperluas ini ke 6 atau lebih.

22
Israel Rodriguez

Anda dapat menggunakan global $language untuk mengetahui bahasa Anda. Di Tampilan, Anda dapat memfilter menggunakan "konten: bahasa -> bahasa pengguna saat ini."

2
Ahmed

Ada cara yang sangat elegan untuk melakukan ini menggunakan hook_query_node_access_alter() yang tampaknya tidak berdokumen::

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);
  }
}

Catatan: kode ini 100% berdasarkan pada modul unggulan Cari Konfigurasi .

Pengguna vs bahasa Konten

Beberapa situs mungkin memiliki deteksi bahasa yang dikonfigurasi untuk menunjukkan antarmuka dalam bahasa pilihan pengguna, sementara konten halaman ditampilkan berdasarkan URL atau bahasa konten.

Dalam hal ini, pertimbangkan untuk mengganti

$language = i18n_language_interface();

dengan

$language = i18n_language_content();
25
Alex Weber

Saya memiliki persyaratan yang sama, dan saya menggunakan modul Custom search , yang mencakup submodule bernama Internasionalisasi Custom Search : "= mencari konten dari semua atau hanya bahasa saat ini, dan semua penanganan terjemahan label dan pemilih "(perhatikan modul ini juga menyediakan beberapa fitur bermanfaat lainnya seperti blok pencarian kustom). Bekerja dengan sempurna.

4
Kojo

Anda dapat menggunakan modul Display suite di mana Anda dapat memilih opsi Lihat Mode-> Bahasa yang memberikan hasil pencarian dalam bahasa saat ini yang ada dalam bahasa situs saat ini.

0
Akshay Sawant

Saya tidak yakin inti pencarian mendukungnya.

Saya melihat proyek i18nluceneapi tetapi tidak mendukung versi 7 saat ini.

Saya menggunakan searchapi dan membuat faset Bahasa :). Ini dapat digunakan untuk kasus Anda, membuat aspek dan filter default pada halaman pencarian.

0
Sang Le Thanh