มีวิธีที่ยอดเยี่ยมในการทำสิ่งนี้โดยใช้เอกสารที่ไม่มีเอกสาร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% ตามโมดูลการกำหนดค่าการค้นหาที่ดีเยี่ยม
ภาษาของผู้ใช้กับเนื้อหา
บางไซต์อาจมีการตรวจจับภาษาที่กำหนดค่าให้แสดงอินเทอร์เฟซในภาษาที่ผู้ใช้ต้องการในขณะที่เนื้อหาของหน้าจะแสดงตาม URL หรือภาษาของเนื้อหา
ในกรณีดังกล่าวให้ลองเปลี่ยนใหม่
$language = i18n_language_interface();
กับ
$language = i18n_language_content();