Кастомизация фильтров
Для обеспечения кастомизации фильтров в списках элементов сущностей CRM инстанс класса \Bitrix\Crm\Filter\Factory был вынесен в Service\Container.
Как в предыдущих примерах необходимо подменить инстанс этого класса.
use Bitrix\Crm\Service;
use Bitrix\Main\DI;
use Bitrix\Crm\Filter;
$filterFactory = new class extends Filter\Factory {
};
DI\ServiceLocator::getInstance()->addInstance(
'crm.filter.factory',
$filterFactory
);
Например, есть необходимость модифицировать фильтр для списка сделок.
Для этого достаточно переопределить провайдера сделок и/или фильтр и реализовать там свою логику.
use Bitrix\Crm\Service;
use Bitrix\Crm\Filter;
use Bitrix\Main;
class MyFilterFactory extends Filter\Factory
{
public function getDataProvider(Main\Filter\EntitySettings $settings): Main\Filter\DataProvider
{
if ($settings instanceof Filter\DealSettings)
{
return new class($settings) extends Filter\DealDataProvider
{
// some custom info about fields
};
}
return parent::getDataProvider($settings);
}
public function createFilter(
$ID,
Main\Filter\DataProvider $entityDataProvider,
array $extraDataProviders = null,
array $params = null
): Filter\Filter
{
if ($entityDataProvider instanceof Filter\DealDataProvider)
{
return new class ($ID, $entityDataProvider, (array)$extraDataProviders, (array)$params) extends Filter\Filter {
// some custom logic
};
}
return parent::createFilter($ID, $entityDataProvider, (array)$extraDataProviders, (array)$params);
}
}
© «Битрикс», 2001-2025, «1С-Битрикс», 2025