Свой фильтр в админке (CAdminFilter)

Фильтр создаётся через объект CAdminFilter().

$table_id = 'table_id';
$oFilter = new CAdminFilter(
    $table_id."_filter",
    ['ИД', 'Активно'] // пункты меню, которые можно выбирать для фильтрации
);
?>

<!-- Создание формы -->
<form name="find_form" method="get" action="<?echo $APPLICATION->GetCurPage();?>">
    <?$oFilter->Begin();?>

    <?
    $oFilter->Buttons(['table_id' => $table_id, 'url' => $APPLICATION->GetCurPage(), 'form' => 'find_form']);
    $oFilter->End();
    ?>
</form>

В результате сгенерируется примерно следующий фильтр.

Bitrix. CAdminFilter

Теперь надо указать поля фильтра. Пример создания двух полей:

<!-- Текстовое поле "ИД" -->
<tr>
    <td>ИД:</td>
    <td><input type="text" name="id" value="<?echo htmlspecialchars($_GET['id'])?>"></td>
</tr>

<!-- Выпадающий список "Активно" -->
<tr>
<td>Активно</td>
    <td>
    <?
    $arr = array(
        'reference' => ['Да', 'Нет'],
        'reference_id' => ['Y', 'N']
    );
    echo SelectBoxFromArray('active', $arr, $_GET['active'], GetMessage("POST_ALL"), "");
    ?>
    </td>
</tr>

В результате будет сгенерирована следующая форма:

Bitrix. CAdminFilter

Также надо убедиться, что есть метод $lAdmin->CheckListMode() перед подключением файла «prolog_admin_after.php», чтобы можно было фильтровать данные через Ajax.

// режим вывода (для Ajax)
$lAdmin->CheckListMode();

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

Теперь при фильтрации, через Ajax будут передаваться выбранные данные в фильтре, которые можно использовать при выборки записи. Таблица с данными автоматически обновится.

Выводить сообщение с ошибкой

Выводить сообщение с ошибкой можно через метод AddFilterError().

$lAdmin->AddFilterError('Текст ошибки фильтра');

В результате покажется следующее сообщение.

Bitrix. AddFilterError

Все сообщения с ошибкой сохраняются в свойство $lAdmin->arFilterErrors.

$lAdmin->arFilterErrors; // Array ( [0] => Текст ошибки фильтра )