it-swarm.it

Cerca solo per la lingua attualmente attiva

Come posso limitare i risultati di una ricerca predefinita in Drupal 7, per portare solo i nodi che sono nella lingua corrente?

Il mio sito Web ha un selettore di tre lingue; l'utente sceglie quale lingua desidera utilizzare durante la visualizzazione del sito. Se cerca qualcosa, la pagina dei risultati porta risultati da altre lingue. Oggi ho solo 3 lingue abilitate, ma prevediamo di estenderlo a 6 o più.

22
Israel Rodriguez

Puoi usare il globale $language per sapere in quale lingua sei. In Views, puoi filtrare usando "content: language -> lingua dell'utente corrente".

2
Ahmed

C'è un modo davvero elegante per farlo usando l'apparentemente non documentato 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);
  }
}

Nota: questo codice è basato al 100% sul modulo eccellente Search Config .

Lingua dell'utente vs Contenuto

Alcuni siti potrebbero avere il rilevamento della lingua configurato per mostrare l'interfaccia nella lingua preferita dell'utente, mentre il contenuto della pagina viene mostrato in base all'URL o alla lingua del contenuto.

In tal caso, considerare la sostituzione

$language = i18n_language_interface();

con

$language = i18n_language_content();
25
Alex Weber

Avevo gli stessi requisiti e ho usato il modulo Ricerca personalizzata , che include un sottomodulo chiamato Internazionalizzazione della ricerca personalizzata : "= cerca solo contenuti da tutta o la lingua corrente e tutta la gestione della traduzione di etichette e selettori "(nota che questo modulo fornisce anche molte altre utili funzioni come blocchi di ricerca personalizzati). Funziona perfettamente.

4
Kojo

È possibile utilizzare il modulo Suite di visualizzazione in cui è possibile scegliere l'opzione Visualizza modalità-> Lingua che fornisce i risultati della ricerca nella lingua corrente che si trova nella lingua corrente del sito.

0
Akshay Sawant

Non sono sicuro che il core di ricerca lo supporti.

Vedo il progetto i18nluceneapi ma al momento non supporta la versione 7.

Sto usando searchapi e creo sfaccettature Lingua :). Può utilizzare per il tuo caso, creare sfaccettature e filtro predefinito nella pagina di ricerca.

0
Sang Le Thanh