Chỉ tìm kiếm ngôn ngữ hiện đang hoạt động


23

Làm cách nào tôi có thể hạn chế kết quả từ một tìm kiếm mặc định trong Drupal 7, để chỉ mang các nút trong ngôn ngữ hiện tại?

Trang web của tôi có một trình chuyển đổi ba ngôn ngữ; người dùng chọn ngôn ngữ anh ta muốn sử dụng khi xem trang web. Nếu anh ta tìm kiếm một cái gì đó, trang kết quả mang lại kết quả từ các ngôn ngữ khác. Hôm nay tôi chỉ có 3 ngôn ngữ được kích hoạt, nhưng chúng tôi dự định mở rộng ngôn ngữ này lên 6 ngôn ngữ trở lên.

Câu trả lời:


2

Bạn có thể sử dụng toàn cầu $languageđể biết bạn đang ở ngôn ngữ nào. Trong Chế độ xem, bạn có thể lọc bằng "nội dung: ngôn ngữ -> ngôn ngữ người dùng hiện tại."


3
Điều này giúp gì? bạn có thể thay thế trang tìm kiếm bằng một nút không? Điều này có bất kỳ nhược điểm?
người nhảy

25

Có một cách thực sự tao nhã để làm điều này bằng cách sử dụng không rõ ràng 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);
  }
}

Lưu ý: mã này là 100% dựa trên mô-đun Cấu hình Tìm kiếm tuyệt vời .

Ngôn ngữ của người dùng và nội dung

Một số trang web có thể được phát hiện ngôn ngữ được định cấu hình để hiển thị giao diện bằng ngôn ngữ ưa thích của người dùng, trong khi nội dung trang được hiển thị dựa trên URL hoặc ngôn ngữ nội dung.

Trong trường hợp đó, hãy xem xét thay thế

$language = i18n_language_interface();

với

$language = i18n_language_content();

Hoạt động hoàn hảo, nhưng nó sẽ ảnh hưởng đến bất kỳ truy vấn nào trên trang web, như truy vấn được tạo từ mô-đun lượt xem hoặc bất kỳ truy vấn drupal dựa trên nào thay vì "tìm kiếm / nút /%" mặc định?
mohamad salama

@mohamadsalama điều này sẽ ảnh hưởng đến tất cả các truy vấn tìm kiếm ảnh hưởng đến truy cập nút; nói cách khác, hầu hết các truy vấn lượt xem sẽ bị ảnh hưởng trừ khi bạn đặc biệt vô hiệu hóa kiểm tra truy cập nút trong cài đặt nâng cao (ngoài đỉnh đầu & chưa được xác nhận).
Alex Weber

Đây không phải là một hook hook không có giấy tờ - thực sự là hook hook_queryiah_alter (), trong đó tag là 'node_access'. Mã riêng của tôi cũng kiểm tra để đảm bảo rằng không có điều kiện ngôn ngữ trong truy vấn, nhưng nếu không thì khá giống nhau.
John Fiala

4

Tôi có cùng yêu cầu và tôi đã sử dụng mô-đun tìm kiếm Tùy chỉnh , bao gồm một mô hình con được gọi là Quốc tế hóa Tìm kiếm Tùy chỉnh : " nội dung tìm kiếm từ tất cả hoặc chỉ ngôn ngữ hiện tại và tất cả xử lý dịch nhãn và bộ chọn " (lưu ý mô-đun này cũng cung cấp một số hữu ích khác các tính năng như khối tìm kiếm tùy chỉnh). Hoạt động hoàn hảo.


0

Tôi không chắc lõi tìm kiếm hỗ trợ nó.

Tôi thấy dự án i18nluceneapi nhưng hiện tại nó không hỗ trợ phiên bản 7.

Tôi đang sử dụng searchapi và tạo ngôn ngữ khía cạnh :). Nó có thể sử dụng cho trường hợp của bạn, tạo các khía cạnh và bộ lọc mặc định trên trang tìm kiếm.


0

Bạn có thể sử dụng mô-đun bộ Hiển thị nơi bạn có thể chọn tùy chọn Chế độ xem-> Ngôn ngữ cung cấp kết quả tìm kiếm bằng ngôn ngữ hiện tại bằng ngôn ngữ trang web hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.