Шукати тільки для поточної мови


23

Як я можу обмежити результати пошуку за замовчуванням у Drupal 7, щоб отримати лише ті вузли, які є поточною мовою?

Мій сайт має три мови комутатор с; користувач вибирає, якою мовою він хоче користуватися під час перегляду сайту. Якщо він щось шукає, на сторінці результатів з’являються результати з інших мов. Сьогодні у мене є лише 3 ввімкнені мови, але ми плануємо розширити цю програму до 6 і більше.

Відповіді:


2

Ви можете використовувати глобальний, $languageщоб знати, на якій мові ви знаходитесь. У вікнах Перегляд можна фільтрувати, використовуючи "content: 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% по відношенню до відмінного Пошуку Config модуля.

Мова користувача щодо мови вмісту

На деяких сайтах може бути налаштовано функцію виявлення мови для відображення інтерфейсу на бажаній мові користувача, тоді як вміст сторінки відображається на основі URL-адреси або мови вмісту.

У такому випадку розгляньте можливість заміни

$language = i18n_language_interface();

з

$language = i18n_language_content();

Працює ідеально, але чи вплине це на будь-який запит на сайті, як-от запит, згенерований із модуля перегляду, або будь-який друпальський запит, а не "пошук / вузол /%" за замовчуванням?
саляма мохамада

@mohamadsalama це вплине на всі пошукові запити , які впливають на вузол доступу; Іншими словами, на більшість запитів перегляду має впливати, якщо ви спеціально не відключите перевірку доступу до вузлів у розширених налаштуваннях (вгорі голови та непідтверджені).
Alex Weber

Це не бездокументований гачок - це насправді гак_up_query_TAG_alter (), де тег є "node_access". Мій власний код також перевіряє, щоб у запиті вже не було мовної умови, але в іншому випадку це досить схоже.
Джон Фіала

4

У мене були ті ж вимоги, і я використовував модуль пошуку на замовлення , який включає підмодуль під назвою Інтернаціоналізація пошуку : " пошук вмісту лише з усієї мови чи поточної мови, а також з усіма операціями з перекладом міток та селекторів " (зверніть увагу, що цей модуль надає також кілька інших корисних функції , такі як спеціальний пошук блоки). Працює чудово.


0

Я не впевнений, що ядро ​​пошуку підтримує це.

Я бачу проекту i18nluceneapi але він оленяча шкіра підтримки версії 7 на даний момент.

Я використовую searchchapi та створюю грані Мова :). Він може використовуватись у вашому випадку, створювати грані та фільтр за замовчуванням на сторінці пошуку.


0

Ви можете використовувати модуль набору дисплеїв, де ви можете вибрати опцію Перегляд-> Мова, яка дає результати пошуку на поточній мові, що знаходиться на поточній мові сайту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.