我正在寻找一种方法从drupal 7中的用户搜索结果中排除管理员用户或用户1。
我希望这不会出于安全原因而出现。
答案 0 :(得分:2)
如果使用“视图”构建自定义搜索,则可以将过滤器设置为仅显示具有特定角色的用户。不要将过滤器暴露给用户。如果用户1具有“管理员”角色而其他人都有另一个(非管理员)角色,则在应用过滤器时,只有非管理员帐户才会在运行搜索时显示。
答案 1 :(得分:0)
您可以通过在template.php中插入以下内容来实现hook_preprocess_search_result()。请注意,您必须清除Drupal缓存以在Configuration - >中启用此功能。表现 - >清除缓存
function <themename>_preprocess_search_result(&$variables) {
global $language;
$display_result = true;
if( $variables['module'] == 'user' ) {
if( $variables['user']->uid == 1 || $variables['id'] == 1 ) {
$display_result = false;
$variables = array();
}
}
if( $display_result ) {
$result = $variables['result'];
$variables['url'] = check_url($result['link']);
$variables['title'] = check_plain($result['title']);
if (isset($result['language']) && $result['language'] != $language->language && $result['language'] != LANGUAGE_NONE) {
$variables['title_attributes_array']['xml:lang'] = $result['language'];
$variables['content_attributes_array']['xml:lang'] = $result['language'];
}
$info = array();
if (!empty($result['module'])) {
$info['module'] = check_plain($result['module']);
}
if (!empty($result['user'])) {
$info['user'] = $result['user'];
}
if (!empty($result['date'])) {
$info['date'] = format_date($result['date'], 'short');
}
if (isset($result['extra']) && is_array($result['extra'])) {
$info = array_merge($info, $result['extra']);
}
// Check for existence. User search does not include snippets.
$variables['snippet'] = isset($result['snippet']) ? $result['snippet'] : '';
// Provide separated and grouped meta information..
$variables['info_split'] = $info;
$variables['info'] = implode(' - ', $info);
$variables['theme_hook_suggestions'][] = 'search_result__' . $variables['module'];
}
}
另一种方法是search-result.tpl.php并检查$info_split
数组以检查搜索结果是否为用户1并且不显示任何输出。
不要忘记,您还需要阻止用户访问site.com/user/1,因为他们可以从此页面获得尽可能多的信息。