Как настроить страницу входа GLPI с помощью CSS на уровне организации

Оформите страницу входа GLPI встроенным CSS на уровне организации, не редактируя ядро и не устанавливая плагин темы. Разбираем, где находятся реальные поля (enable_custom_css и custom_css_code), как перекрасить интерфейс через токены Tabler в GLPI 11, почему цвет требует !important и ловушку наследования, из-за которой тема страницы входа пропадает, если применить её не в той организации.

В этой статьеРазделов: 7

Оформление страницы входа GLPI — самый частый запрос по брендингу, который мы получаем при сопровождении, и почти все начинают неправильно: редактируют ядро или ставят плагин темы. Чистый путь в GLPI уже есть: CSS на уровне организации — встроенное поле, которое переживает обновления и позволяет откатиться за секунды. В этом руководстве показано, где находятся реальные поля (enable_custom_css и custom_css_code), почему цвет не применяется без !important, и ловушка наследования организаций, из-за которой тема страницы входа пропадает даже при сохранённом CSS.

Почему CSS организации (а не плагин темы или ядро)

Правка файлов ядра работает одну версию и ломается при следующем обновлении — патч теряется, и вы ищете, что изменилось. Плагин темы решает задачу, но привязывает внешний вид к циклу обновлений и совместимости плагина (при переходе на GLPI 11 сторонние темы сломались одними из первых). CSS на уровне организации — встроенная возможность, его можно версионировать в собственном процессе управления изменениями и откатить, вставив предыдущий CSS. Для фирменного стиля — цветов, логотипа, фона страницы входа — он даёт больше контроля, чем любой плагин, потому что вам доступен любой селектор интерфейса.

ПодходПереживает обновлениеОткатОбласть действия
Правка ядра (CSS/SCSS)Нет (патч теряется)Вручную и рискованноГлобально
Плагин темыЗависит от плагинаУдалить плагинГлобально
CSS на уровне организации (встроенный)ДаВставить предыдущий CSS и сохранитьПо организации, с наследованием

Где настраивать в GLPI

Откройте форму организации в Администрирование > Организации > [ваша организация] и найдите раздел настройки интерфейса. Важны два поля:

  • Enable CSS customization (enable_custom_css) — переключатель с наследованием (наследуется от родителя, или вы принудительно включаете/выключаете его в текущей организации).
  • Пользовательский CSS (custom_css_code) — редактор, куда вставляется CSS.

Первый подвох кроется здесь: пока enable_custom_css не включён, редактор заблокирован с предупреждением «Custom CSS is disabled», и ничего не применяется — вы вставляете CSS, сохраняете, перезагружаете, и «не работает». Сначала включите переключатель. Сохраните и перезагрузите страницу входа для проверки.

Готовый CSS: перекрасить страницу входа в цвета бренда

Фронтенд GLPI 11 использует Tabler (поверх Bootstrap 5), поэтому чистый способ перекрасить интерфейс — переопределить дизайн-токены --tblr-*, а не искать селектор за селектором. Пример ниже применяет фирменную палитру (красный и золотой), оформляет фон и охватывает разные классы body, которые страница входа использует в GLPI 10 и 11:

/* Brand login - paste into the entity's custom_css_code.
   GLPI 11 uses Tabler: override the --tblr-* tokens for the primary color. */
:root {
  --brand-500: #b11123;
  --brand-700: #7f0e18;
  --brand-gold: #d4a017;
  --tblr-primary: var(--brand-500);
  --tblr-primary-rgb: 177, 17, 35;
}

/* The login screen changes body class between versions - cover both. */
body.page-login,
body.welcome-anonymous,
body[class*="login"] {
  min-height: 100vh;
  background-color: #140104 !important;
  background-image:
    linear-gradient(145deg, rgba(16,0,0,.74) 2%, rgba(127,14,24,.56) 60%, rgba(212,160,23,.34) 100%),
    url("/front/logos/login-bg.jpg") !important; /* host locally, avoid an external URL */
  background-size: cover !important;
  background-position: center !important;
  background-attachment: fixed !important;
}

/* GLPI colors win by specificity: you need !important. */
body[class*="login"] .btn-primary {
  border: 1px solid var(--brand-gold) !important;
  background: linear-gradient(180deg, var(--brand-500), var(--brand-700)) !important;
  color: #fff !important;
}

/* The login footer is .copyright (not an obvious id/class). */
body[class*="login"] .copyright { color: #fff6da !important; }

/* fixed is heavy on mobile: switch to scroll on the phone. */
@media (max-width: 767.98px) {
  body[class*="login"] { background-attachment: scroll !important; }
}

Ловушка наследования: почему страница входа остаётся без темы

Вот деталь, которая проявляется только в эксплуатации: страница входа отображается до какой-либо аутентификации, поэтому активной организации в этот момент нет. Внешний вид до входа GLPI определяет по корневой организации (id 0). Если вы применили CSS в дочерней организации — например, в организации клиента, — внутренняя панель получит фирменный стиль, но страница входа останется стандартной, потому что она никогда «не заходит» в эту организацию. Практическое правило, которое мы приняли: тема страницы входа задаётся в корневой организации; оформление для конкретного клиента, которое должно появляться только после входа, можно оставить в дочерней организации с наследованием вниз. Поскольку у поля есть наследование, то, что задано в корне, распространяется на все дочерние организации, если какая-то из них не переопределит значение.

Чек-лист для продуктива

  1. Сохраните предыдущий CSS перед любым изменением (сохраните текст поля).
  2. Применяйте тему страницы входа в корневой организации; оформление после входа можно задать в дочерней организации.
  3. Включите enable_custom_css до вставки — иначе редактор заблокирован.
  4. Размещайте фоновое изображение локально (документ в GLPI или файл, отдаваемый самим хостом); внешний URL ломается из-за CSP, mixed content или недоступности.
  5. Тестируйте под профилем специалиста и инициатора, на компьютере и на мобильном устройстве.
  6. Проверьте контрастность формы и кнопки (доступность); держите откат наготове.

Практические ловушки

Три вещи отняли у нас время у клиентов и стали внутренним FAQ. Первая: цвет без !important не применяется — таблица стилей Tabler загружается с высокой специфичностью, и ваше переопределение должно её перебить. Вторая: фоновое изображение по внешнему URL ненадёжно; в среде со строгой Content-Security-Policy или без выхода в интернет фон просто не загружается, и страница входа остаётся чёрной — размещайте файл на самом сервере. Третья: не путайте настройку на уровне организации с глобальным CSS GLPI (Настройка > Общие); существуют оба, и их смешивание превращается в головную боль с приоритетами. Документируйте, какой слой отвечает за какое правило.

Следующий шаг

Стандартизация брендинга в GLPI — рутина нашей работы: от страницы входа до внутренней темы, с контролируемым откатом. Если вы хотите, чтобы среда вашего клиента выглядела в правильном фирменном стиле без вмешательства в ядро, свяжитесь с командой.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

В GLPI есть встроенное поле CSS на уровне организации. В Администрирование > Организации > [организация] включите «Enable CSS customization» (enable_custom_css) и вставьте CSS в редактор custom_css_code. Править ядро или ставить плагин темы не нужно. Для страницы входа применяйте CSS в корневой организации, потому что страница входа отображается до того, как появляется активная организация.

Нет. CSS на уровне организации встроен в GLPI 10 и 11. Он надёжнее плагина темы, потому что переживает обновления, позволяет откатиться вставкой предыдущего CSS и даёт доступ к любому селектору интерфейса, не завися от цикла обновлений стороннего плагина.

Три частые причины: не включено поле enable_custom_css (редактор заблокирован с сообщением «Custom CSS is disabled»); CSS применён в дочерней организации, а страница входа работает без активной организации и использует корневую; или правила цвета заданы без !important и проигрывают таблице стилей Tabler. Включите переключатель, используйте корневую организацию и добавьте !important.

Да. Поля enable_custom_css и custom_css_code есть в GLPI 10 и 11. В GLPI 11 фронтенд использует Tabler поверх Bootstrap 5, поэтому чистый способ перекрасить интерфейс — переопределить токены --tblr-* (например, --tblr-primary), а не искать селекторы по одному.

Да, через background-image в CSS организации. Но размещайте изображение локально (документ в GLPI или файл на самом хосте); внешний URL ненадёжен и может быть заблокирован Content-Security-Policy, mixed content или отсутствием выхода в интернет, и страница входа останется без фона.

Да. У поля enable_custom_css есть наследование: то, что задано в корневой организации, распространяется на все дочерние, если какая-то из них не переопределит значение. Поэтому тема страницы входа задаётся в корне (чтобы действовать до входа), а оформление для конкретного клиента может оставаться в дочерней организации и применяться после аутентификации.

Нужна помощь?