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