Sadece aktif dili ara


23

Yalnızca geçerli dilde bulunan düğümleri getirmek için sonuçları Drupal 7'deki varsayılan bir aramadan nasıl sınırlayabilirim?

Web sitemin üç dil değiştiricisi var; kullanıcı, siteyi görüntülerken hangi dili kullanmak istediğini seçer. Bir şey ararsa, sonuç sayfası diğer dillerden sonuç getirir. Bugün sadece 3 etkin dili var, ancak bunu 6 ya da daha fazlasına genişletmeyi planlıyoruz.

Yanıtlar:


2

Global'i $languagehangi dilde olduğunuzu bilmek için kullanabilirsiniz . Görünümler'de, "content: language -> geçerli kullanıcı dili" ni kullanarak filtre uygulayabilirsiniz.


3
bu nasıl yardımcı olur? Arama sayfasını düğümle değiştirir misiniz? Bunun bir sakıncası var mı?
atlamacı

25

Belli ki belgelenmemiş kullanarak bunu yapmanın gerçekten şık bir yolu var 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);
  }
}

Not: Bu kod, Mükemmel Arama Yapılandırması modülüne göre% 100'dür .

Kullanıcının vs İçerik dili

Bazı siteler, sayfa içeriği URL'ye veya içerik diline göre gösterilirken, kullanıcının tercih ettiği dilde arayüzü gösterecek şekilde yapılandırılmış bir dil algılamasına sahip olabilir.

Bu durumda, değiştirmeyi düşünün

$language = i18n_language_interface();

ile

$language = i18n_language_content();

Mükemmel çalışır, ancak görünüm modülünden oluşturulan sorgu veya varsayılan "search / node /%" yerine herhangi bir temel drupal sorgusu gibi sitedeki herhangi bir sorguyu etkiler mi?
mohamad salama

@mohamadsalama, düğüm erişimini etkileyen tüm arama sorgularını etkileyecektir; Başka bir deyişle, gelişmiş ayarlarda (erişim başımın üstünde ve onaylanmamış) düğüm erişim kontrollerini özellikle devre dışı bırakmadığınız sürece çoğu görünüm sorgusu etkilenmelidir.
Alex Weber

Bu belgelenmemiş bir kanca değil - gerçekte hook_query_TAG_alter () kancası, burada etiket 'node_access'. Kendi kodum, ayrıca, sorguda zaten bir dil koşulu bulunmadığından emin olmak için denetler, ancak aksi halde oldukça benzerdir.
John Fiala

4

Aynı gereksinimleri karşıladım ve Özel Arama Uluslararasılaştırması adı verilen bir alt modül içeren Özel arama modülünü kullandım : " yalnızca tüm veya geçerli dilden içerik ara ve tüm etiket ve seçicilerin çeviri işlemesi " (bu modülün ayrıca birkaç yararlı yardımcı olduğunu da unutmayın) özel arama blokları gibi özellikler). Mükemmel çalışıyor.


0

Arama çekirdeğinin desteklediğinden emin değilim.

İ18nluceneapi projesini görüyorum ama şu anda sürüm 7'yi desteklemiyor.

Searchapi kullanıyorum ve faset dili oluşturuyorum :). Davanız için kullanabilir, arama sayfasında faset ve varsayılan filtre oluşturabilirsiniz.


0

Arama sonuçlarını geçerli site dilinde geçerli dilde gösteren Görünüm Modu-> Dil seçeneğini seçebileceğiniz Ekran paketi modülünü kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.