Пример, как закрыть на обслуживание только часть сайта, например ноды определенного типа. Создаем свой модуль, и внутри файла module_name.module имплементируем хук hook_menu_site_status_alter:
/**
* Implements hook_menu_site_status_alter()
*/
function example_menu_site_status_alter(&$menu_site_status, $path) {
if ($node = menu_get_object()) {
if ($node->type == 'article') {
// Если пользователь имеет разрешение использовать сайт в режиме обслуживания,
// то показываем ему сообщение, что сайт в режиме обсуживания, иначе меняем статус на "оффлайн".
if (user_access('access site in maintenance mode')) {
if (user_access('administer site configuration') && $path != 'admin/config/development/maintenance') {
drupal_set_message(t('Operating in maintenance mode. <a href="@url">Go online.</a>', array('@url' => url('admin/config/development/maintenance'))), 'status', FALSE);
}
else {
drupal_set_message(t('Operating in maintenance mode.'), 'status', FALSE);
}
}
else {
$menu_site_status = MENU_SITE_OFFLINE;
}
}
}
}