Свой гаджет рабочего стола - файлы, параметры, вывод
Добавляем свой блок на рабочий стол административного раздела: состав файлов, описание, параметры, персональные настройки и аккуратный вывод данных.
Что нужно знать заранее
Гаджет - это блок на стартовой странице административного раздела. Сотрудник сам добавляет его на свой рабочий стол, двигает и настраивает, а разработчик готовит только содержимое блока.
Гаджет описывается набором файлов в своей папке, а не вызовом на странице. Отдельного шаблона у него нет: разметка живёт прямо в исполняемом файле рядом с кодом выборки данных.
У параметров гаджета два уровня: общие и персональные настройки. Общие одинаковы для всех, а персональные каждый сотрудник задаёт себе, и это главное отличие гаджета от обычного компонента.
Шаги
- Придумать, какие данные сотрудник хочет видеть сразу после входа в админку.
- Создать папку гаджета в каталоге гаджетов, имя папки только строчными буквами.
- Описать гаджет и его параметры двумя служебными файлами внутри этой папки.
- Написать вывод в исполняемом файле и обязательно обернуть выборку данных кэшем.
- Добавить гаджет на рабочий стол и проверить его персональные настройки у сотрудника.
Решение
Раскладываем файлы гаджета:
/bitrix/gadgets/vendor.orders/ ← имя папки строго строчными буквами├── .description.php ← название, описание, значок, группа├── .parameters.php ← общие и персональные параметры├── index.php ← код и разметка блока, шаблона нет└── lang/ru/.description.php ← переводы названий и подписейСвоя папка живёт рядом со штатными гаджетами, но не внутри них. Системные гаджеты не правят: обновление продукта возвращает их файлы в исходное состояние вместе с вашими изменениями.
Описываем гаджет:
$arDescription = [ 'NAME' => GetMessage('VENDOR_ORDERS_NAME'), 'DESCRIPTION' => GetMessage('VENDOR_ORDERS_DESC'), 'ICON' => '/bitrix/gadgets/vendor.orders/icon.gif', 'GROUP' => ['ID' => 'sale'], // раздел, в котором гаджет виден при добавлении];Описание - это то, что сотрудник видит при добавлении блока. Понятное название и верная группа экономят время: в списке гаджетов легко потеряться даже на пустом проекте.
Объявляем параметры двух уровней:
$arParameters = [ 'PARAMETERS' => [ 'PERIOD' => ['NAME' => 'Период, дней', 'TYPE' => 'STRING', 'DEFAULT' => '1'], ], 'USER_PARAMETERS' => [ 'SHOW_SUM' => ['NAME' => 'Показывать сумму', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y'], ],];Общий параметр задаёт администратор для всех, персональный - каждый сотрудник для себя. Разделение полезное: период считают одинаковым, а показ денег менеджеру и кладовщику нужен разный.
Пишем вывод и бережём скорость:
// index.php - разметка и код в одном файле$cache = \Bitrix\Main\Data\Cache::createInstance();if ($cache->initCache(300, 'gadget_orders_' . $arGadgetParams['PERIOD'], '/gadgets')) { ['count' => $count, 'sum' => $sum] = $cache->getVars();} elseif ($cache->startDataCache()) { [$count, $sum] = countOrdersForPeriod((int)$arGadgetParams['PERIOD']); $cache->endDataCache(['count' => $count, 'sum' => $sum]);}echo '<div class="vendor-orders">Заказов: ' . (int)$count . '</div>';Рабочий стол собирается при каждом входе в административный раздел. Тяжёлый запрос в гаджете растягивает вход для всех сотрудников сразу, поэтому выборку кэшируют на несколько минут.
Кладём гаджет в репозиторий проекта:
git add -f bitrix/gadgets/vendor.orders# каталог платформы обычно не версионируется, а свой гаджет потерять легкоСвой гаджет живёт в каталоге платформы и легко теряется при переносе. Его либо добавляют в репозиторий принудительно, либо переносят вместе со списком своих доработок проекта.
Типичные проблемы
Гаджет не появляется в списке добавления.
Имя папки содержит заглавные буквы либо в ней отсутствует файл описания. Папку называют строчными буквами, а описание кладут рядом с исполняемым файлом.
Вход в админку стал заметно медленнее.
Гаджет выполняет тяжёлую выборку при каждой сборке рабочего стола админки. Данные кэшируют на несколько минут прямо внутри кода гаджета.
После обновления продукта гаджет исчез.
Файлы лежали в каталоге платформы и не попали в репозиторий проекта. Свои гаджеты добавляют в репозиторий принудительно и переносят вместе с кодом.
Настройка сотрудника меняется у всех сразу.
Параметр объявлен общим вместо персонального набора настроек. Персональные параметры описывают отдельным набором в файле настроек гаджета.
Правки штатного гаджета откатились после обновления.
Изменялись файлы системных гаджетов платформы, а не своя копия. Свой гаджет делают копией в отдельной папке, а системные не трогают.
Частые вопросы
Чем гаджет отличается от компонента?
У гаджета нет шаблона, разметка лежит в исполняемом файле, и он помнит персональные настройки сотрудника. Компонент ставят на страницу, гаджет - на рабочий стол админки.
Можно ли показать гаджет не всем?
Да, права проверяют внутри самого гаджета и выводят пустой блок или сообщение. Список гаджетов при добавлении общий для всех администраторов.
Что разумно выводить в гаджете?
Короткие числа и списки: новые заказы, остатки на исходе, ошибки обмена. Большие таблицы и отчёты делают отдельной страницей.
Как обновить содержимое без перезагрузки страницы?
Запросом к своему адресу из кода гаджета по таймеру. Делают это редко: рабочий стол не предназначен для монитора в реальном времени.
Работают ли гаджеты в младших редакциях?
Сам механизм рабочего стола есть, а отдельные штатные гаджеты зависят от установленных модулей. Свой гаджет работает там, где есть его данные.
Смежное
- Страницы в админке - оглавление подтемы
- Своя страница в админке: список, форма, пункт меню - куда ведёт ссылка из гаджета
- Форма в админке: вкладки, проверка значений, тулбар - страницы правки данных
- Отчёты по заказам: агрегаты, группировка, выгрузка - откуда брать числа для блока
- Кэширование своей выборки: ключ, теги, сброс - кэш внутри гаджета
- Роли менеджеров: что видит и что может в админке - кому показывать данные
- Административный интерфейс - устройство интерфейса целиком
- Своя кнопка на панели управления - быстрый доступ к своей странице с витрины