В каталоге CRM не работает фильтр по артикулу. Ниже решение для коробки с правкой ядра Если править ядро не хотите, то можно добавить артикул в наименование: [*]можно обработчиком на события OnBeforeIBlockElementAdd, OnBeforeIBlockElementUpdate. [*]если товары из 1С льются, то лучше в настройках модуля на стороне 1С через Свой Алгоритм |
/bitrix/components/bitrix/catalog.product.search/class.php
скопировать в папку /local/components/bitrix/catalog.product.search/ весь компонент
метод getMixedList
стр. 402 заменяем выборку элементов на такое, где CML2_ARTICLE - наш код свойства
$obElement = new \CIBlockElement; if(!empty($_REQUEST['QUERY']) && ($_REQUEST['caller']=='crm_entity_product_list')){ $arNewFilter = [ "LOGIC"=>"OR", $arElementFilter, ["IBLOCK_ID"=>$arElementFilter["IBLOCK_ID"],"%PROPERTY_CML2_ARTICLE"=>$_REQUEST['QUERY'],'ACTIVE'=>"Y"] ]; } else{ $arNewFilter = $arElementFilter; } $rsElement = $obElement->GetList($arOrder, $arNewFilter, false, false, $arSelectedFields); while ($arElement = $rsElement->Fetch()){ $arElement["TYPE"] = "E"; $arResult[] = $arElement; } unset($arElement, $rsElement, $obElement); |
2. для поиска напрямую в списке товаров во вкладе
/bitrix/modules/catalog/lib/v2/Integration/UI/EntitySelector/ProductProvider
метод getProductsBySearchString
примерно стр. 335
немного меняем код
if ($searchString !== '') { $simpleProductFilterTemp = [ 'LOGIC' => 'OR', '*SEARCHABLE_CONTENT' => $searchString, 'PRODUCT_BARCODE' => $searchString . '%', ]; if($iblockInfo->getProductIblockId() == 25){ //вместо 25 ваш iblockId $simpleProductFilterTemp["%PROPERTY_CML2_ARTICLE"]=$searchString; // CML2_ARTICLE - ваш код свойства } $simpleProductFilter = [$simpleProductFilterTemp]; if ($iblockInfo->canHaveSku()) { $productFilterTemp = [ 'LOGIC' => 'OR', '*SEARCHABLE_CONTENT' => $searchString, '=ID' => \CIBlockElement::SubQuery('PROPERTY_' . $iblockInfo->getSkuPropertyId(), [ 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R', 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'IBLOCK_ID' => $iblockInfo->getSkuIblockId(), '*SEARCHABLE_CONTENT' => $searchString, ]), 'PRODUCT_BARCODE' => $searchString . '%', ]; if($iblockInfo->getProductIblockId() == 25){ //вместо 25 ваш iblockId $productFilterTemp["%PROPERTY_CML2_ARTICLE"]=$searchString; // CML2_ARTICLE - ваш код свойства } $productFilter[] = $productFilterTemp; $offerFilter = $simpleProductFilter; } else { $productFilter[] = $simpleProductFilter; } } |