Yandex Metrika
sanches.free

Дополнительные поля в фильтре списка пользователей в админке 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 дней гарантии