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