Как закрыть на обслуживание только часть сайта

Пример, как закрыть на обслуживание только часть сайта, например ноды определенного типа. Создаем свой модуль, и внутри файла 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;
      }
    }
  }
}

Комментарии (0)