Как убрать код категории из выпадающих списков GLPI 11

В GLPI 11 каждая категория с заполненным полем code отображается в выпадающих списках с кодом, приклеенным к названию, - визуальный шум, который специалист расшифровывает в каждой заявке. Модуль Essentials от NexTool очищает текст при отрисовке, не удаляя code из базы и не редактируя ядро, и охватывает как заявки, так и новую систему форм.

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

Вы открываете выпадающий список категорий, чтобы зарегистрировать заявку в GLPI 11, и вместо чистого названия видите такой блок: «Ошибка при использовании автоматизации - 337.ТИП:INC;Группа:АВТОМАТИЗАЦИЯ;Срочность:Очень высокая». То, что должно быть просто названием категории, превратилось в строку метаданных, которую специалисту приходится каждый раз расшифровывать. Это не дефект вашей среды: это сам GLPI приклеивает поле code категории во всех выпадающих списках.

Проблема

У каждой категории ITIL в GLPI есть необязательное поле code. Оно существует не просто так: нумерация процессов, ключ маршрутизации для бизнес-правил, параметр интеграции с ERP или внешней системой заявок. Проблема не в том, что поле заполнено, а в том, где оно отображается. Когда у категории есть code, ядро GLPI приклеивает это значение к названию во всех выпадающих списках интерфейса, используя разделитель - . Служебная информация просачивается на экран того, кто хочет просто выбрать «Сеть» или «Принтер».

На практике чем более структурирован ваш code, тем хуже. Команды, которые хранят в поле метаданные (тип заявки, ответственную группу, рекомендуемую срочность), получают выпадающие списки, где настоящее название категории - наименьшая часть текста. Взгляд читает слева направо, сначала натыкается на код и замедляется. На небольших экранах текст обрезается посреди кода - и тогда даже название не видно целиком.

Два очевидных выхода не подходят. Редактирование ядра GLPI, чтобы убрать склейку, работает до следующего обновления, когда файл перезаписывается и проблема возвращается. Удаление поля code очищает экран, но ломает всё, что от него зависело, - правила, интеграции, отчёты. Вы бы променяли визуальное неудобство на функциональный сбой.

Как это решает Essentials

Модуль Essentials устраняет симптом в правильном месте: при отрисовке, а не в данных. Он не трогает базу и не редактирует ядро. Вместо этого он оборачивает глобальные шаблонные функции Select2, которые использует GLPI (window.templateResult и window.templateSelection), и очищает текст в источнике, до того как он попадёт в DOM. Поле code остаётся в базе нетронутым; оно лишь перестаёт отображаться в интерфейсе.

  • Очищает название и подсказку - убирает суффикс - CÓDIGO как из текста варианта, так и из атрибута title (всплывающей подсказки при наведении мыши), в списке и в уже выбранном значении.
  • Охватывает оба места, где появляется категория - классический выпадающий список заявки, изменения и проблемы (itilcategories_id) и вопросы выбора категории в новой системе форм GLPI 11 (Glpi\Form).
  • Ничего не удаляет - code остаётся доступным для бизнес-правил, интеграций и отчётов. Это чисто визуальное исправление.
  • Включается и выключается по функциям - исправление - это отдельный переключатель на вкладке «Функции»; включение или выключение действует сразу, без переустановки модуля.
  • Переживает обновления - поскольку всё работает через плагин, обновление GLPI не отменяет исправление.

Деталь, которая отличает безопасное исправление от ломающего всё остальное

Здесь пригождается опыт эксплуатации GLPI в продуктивной среде. Первая версия исправления делала очевидное: очищала текст любого выпадающего списка Select2 с шаблоном « - что-то». Всё казалось правильным, пока клиент не сообщил, что названия групп обрезались - «N1 - Поддержка» превращалась в «N1», «N2 - Инфраструктура» - в «N2». Разделитель - законно встречается во многих названиях; очищать по шаблону текста наивно. Исправление стало ограничиваться идентичностью поля, а не видом текста.

Для заявки это просто: оно срабатывает, только когда <select> называется itilcategories_id. В новой системе форм тоньше, потому что вопрос использует общее имя вроде answers_5[items_id], подходящее для любого элемента (категория, местоположение, поставщик). Подсказка - в соседнем <input hidden>, который объявляет тип. Модуль очищает текст, только когда этот соседний элемент указывает ITILCategory:

<!-- Ticket: the fix runs because the name is exactly itilcategories_id -->
<select name="itilcategories_id">
  <option value="12"
    title="Error using automation - 337.TYPE:INC;Group:AUTOMATION">
    Error using automation - 337.TYPE:INC;Group:AUTOMATION
  </option>
</select>

<!-- Form (Glpi\Form): only cleans if the sibling hidden is ITILCategory -->
<select name="answers_5[items_id]"> ... </select>
<input type="hidden" name="answers_5[itemtype]" value="ITILCategory">

<!-- Group: different name and no ITILCategory hidden -->
<!-- the legitimate " - " is PRESERVED -->
<select name="groups_id">
  <option>N1 - Support</option>
</select>

Такие решения появляются только при сопровождении: «быстрое» решение ломает пограничный случай, который не покрывает ни один синтетический тест, но который есть почти в каждой реальной среде с группами, названными по линиям поддержки.

До и после, по контекстам

ГдеНативный GLPI (до)С Essentials (после)
Выпадающий список в заявкеОшибка при использовании автоматизации - 337.ТИП:INC;...Ошибка при использовании автоматизации
Вопрос категории в формеСеть - NET.02;Группа:INFRAСеть
Подсказка (title) элементаПоказывает полный кодПоказывает только название
Выпадающий список групп (напр., N1 - Поддержка)N1 - ПоддержкаN1 - Поддержка (без изменений)
Поле code в базеЗаполненоЗаполнено (никогда не изменяется)

Как включить

  1. Установите плагин NexTool в свой GLPI 11 (если его ещё нет).
  2. Перейдите в Настройка > NexTool > Модули и активируйте модуль Essentials.
  3. Откройте Настроить и перейдите на вкладку Функции.
  4. Убедитесь, что Скрывать код категории в выпадающих списках включено - после установки эта функция уже активна по умолчанию.

Исправление начинает действовать при следующем открытии выпадающего списка категорий. Не нужно ни перезапускать службу, ни очищать кеш: JS-ресурс несёт метку версии, которая меняется автоматически при включении или выключении функции, так что браузер всегда загружает правильную версию.

Кому подходит (и когда не использовать)

Имеет смысл для любой команды, которая заполняет поле code у категорий ITIL - для внутренней нумерации, маршрутизации правилами или интеграции, - и чьи специалисты или конечные пользователи ежедневно выбирают категорию. Чем больше людей создают заявки, тем заметнее выигрыш в ясности.

Разницы не будет, если у ваших категорий code не заполнен: без приклеенного кода очищать нечего. А если вы хотите, чтобы код отображался на экране, - некоторые команды используют его как быструю справку на стойке обслуживания, - просто оставьте функцию выключенной. Именно поэтому исправление необязательное.

Совместимость

  • GLPI: 11.0 или выше
  • Модуль: Essentials (ключ essentials) - бесплатный тариф (FREE)
  • Плагин: NexTool 6.3.0 или выше
  • Охват: заявки, изменения и проблемы, а также новая система форм (Glpi\Form)

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

Essentials входит в NexTool - экосистему модулей, расширяющую GLPI без доработки ядра. Модуль бесплатный и уже есть в каталоге. Если нужна помощь с установкой или оценкой других исправлений, свяжитесь с командой.


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

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

У каждой категории ITIL есть необязательное поле code. Когда оно заполнено, GLPI приклеивает это значение к названию во всех выпадающих списках, используя разделитель " - ". Это нативное поведение ядра, а не ошибка вашей среды.

Нет. Модуль меняет только то, что отображается на экране, перехватывая отрисовку Select2. Поле code остаётся в базе нетронутым и по-прежнему доступно для правил, интеграций и отчётов.

Нет. Очистка ограничена идентичностью поля (name itilcategories_id или, в формах, скрытый input с itemtype ITILCategory), а не шаблоном текста. Названия с законным " - ", например группы по линиям поддержки, остаются нетронутыми.

Да. Помимо заявок, изменений и проблем, оно охватывает вопросы выбора категории в Glpi\Form, определяя скрытый input, который объявляет itemtype ITILCategory рядом с вопросом.

Нет. Исправление действует уже при следующем открытии выпадающего списка категорий. JS-ресурс использует метку версии, которая меняется при включении или выключении функции, поэтому браузер всегда загружает правильную версию.

Да, он бесплатный (FREE). Входит в плагин NexTool (6.3.0 или выше) и совместим с GLPI 11.0 или выше.

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