Дополнительные поля в фильтре списка пользователей в админке 1С-Битрикс
Что уже есть без правок кода
В административном разделе «Пользователи» доступен не полный список реквизитов профиля в качестве условий отбора. Для свойств профиля с префиксом UF параметры фильтра чаще всего включают прямо в карточке настройки поля, минуя кастом страницы админки.
Стандартные колонки вроде даты регистрации или текстовых полей профиля иногда нужно добавлять программно. Надёжный приём не трогать исходник в модуле: перенести содержимое /bitrix/modules/main/admin/user_admin.php под проект (например в /bitrix/php_interface/include/) и подключать её из /bitrix/admin/user_admin.php, сохраняя дифф версии платформы.
Переадресация на копию
В начале копии страницы закомментируйте относительные подключения и задайте путь к прологу и языковым строкам через DOCUMENT_ROOT; языковые сообщения должны браться из того же имени файла, что использует модуль main в дистрибутиве — иначе пропадут штатные подписи.
// В /bitrix/php_interface/include/user_admin.php
/* require_once(dirname(__FILE__)."/../include/prolog_admin_before.php"); */
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
/* IncludeModuleLangFile(__FILE__); */
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/user_admin.php");
// В /bitrix/admin/user_admin.php — на копию
/* require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/user_admin.php"); */
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/user_admin.php");Откройте список пользователей после правок и убедитесь, что интерфейс совпадает с предыдущим поведением: значит вход и права сохранены.
Связать поля фильтра, подписи и текст
В копии ищете три точки синхронизации: перечень имён параметров фильтра, массив условий отбора (в коде исторически именуется через CheckFilter и $arFilter) и массив подписей переключаемых колонок $arFindFields. Последний и блок разметки с полями ввода должны идти в одном и том же порядке строк.
На примере диапазона по дате регистрации и текстового поля организации задаются уникальные имена параметров вида find_*, они же связываются с ключами DATE_REGISTER_1, DATE_REGISTER_2 и WORK_COMPANY условной выборки.
$arFilterFields = [
// …
"find_signup_begin",
"find_signup_end",
"find_employer_name",
];
if (CheckFilter($arFilterFields)) {
$arFilter = [
"ID" => $find_id,
// …
"DATE_REGISTER_1" => $find_signup_begin,
"DATE_REGISTER_2" => $find_signup_end,
"WORK_COMPANY" => $find_employer_name,
];
}
$arFindFields = [
GetMessage('MAIN_FLT_USER_ID'),
// …
GetMessage('MAIN_FLT_CUSTOM_SIGNUP_RANGE'),
GetMessage('MAIN_FLT_CUSTOM_WORKPLACE'),
];
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/user_admin.php");
$MESS["MAIN_F_CUSTOM_SIGNUP"] = "Период регистрации";
$MESS["MAIN_FLT_CUSTOM_SIGNUP_RANGE"] = "Период регистрации";
$MESS["MAIN_F_CUSTOM_WORKPLACE"] = "Компания";
$MESS["MAIN_FLT_CUSTOM_WORKPLACE"] = "Компания";В шаблоне строк фильтра выведите ячейки в том же порядке; для календаря подходит вызов CalendarPeriod, для строки допускаются подсказки по булевым операторам через ShowFilterLogicHelp.
<tr>
<td><?echo GetMessage("MAIN_F_CUSTOM_SIGNUP")?>:</td>
<td><?echo CalendarPeriod("find_signup_begin", htmlspecialcharsbx($find_signup_begin), "find_signup_end", htmlspecialcharsbx($find_signup_end), "find_form","Y")?></td>
</tr>
<tr>
<td><?echo GetMessage("MAIN_F_CUSTOM_WORKPLACE")?></td>
<td><input type="text" name="find_employer_name" value="<?echo htmlspecialcharsbx($find_employer_name)?>" size="47"><?=ShowFilterLogicHelp()?></td>
</tr>На практике
В интерфейсе списка нажмите «+» в фильтре и включите новые условия. После апдейта платформы сравнивайте дистрибутивный user_admin.php с вашей копией: при необходимости перенесите добавления в изменённую версию ядра заново.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии