Документация для разработчиков
Темная тема

Кастомизация фильтров

Для обеспечения кастомизации фильтров в списках элементов сущностей 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-2024, «1С-Битрикс», 2024