- Модуль: salescenter
- Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/searchproductaction.php
- Класс: BitrixSalesCenterControllerSearchProductAction
- Вызов: SearchProductAction::provideData
public function provideData($searchQuery, array $options = null, MainUIPageNavigation $pageNavigation = null)
{
$result = [];
MainLoader::includeModule('iblock');
MainLoader::includeModule('catalog');
$filter = array(
"CHECK_PERMISSIONS" => "N",
"ACTIVE" => "Y",
"?NAME" => $searchQuery
);
$catalogIblockId = MainConfigOption::get('crm', 'default_product_catalog_id');
if ((int)$catalogIblockId > 0)
{
$filter['IBLOCK_ID'] = (int)$catalogIblockId;
}
$catalogData = CIBlockElement::GetList(
[],
$filter,
false,
['nTopCount' => 20],
['ID', 'NAME']
);
$products = [];
while ($product = $catalogData->Fetch())
{
$products[$product['ID']] = [
'NAME' => $product['NAME'],
'ID' => $product['ID'],
];
}
if (!empty($products))
{
$productOffersMap = CCatalogSKU::getOffersList(
array_keys($products),
0,
['ACTIVE' => 'Y'],
['NAME', 'ID']
);
$skuIblockList = [];
if (is_array($productOffersMap))
{
foreach ($productOffersMap as $productId => $offersList)
{
if (empty($productId))
continue;
unset($products[$productId]);
foreach ($offersList as $item)
{
$skuIblockList[$item['IBLOCK_ID']][$item['ID']] = [];
$products[$item['ID']] = [
'NAME' => $item['NAME'],
'ID' => $item['ID'],
];
}
}
}
if (!empty($skuIblockList))
{
foreach ($skuIblockList as $iblockId=>$skuMap)
{
if (!is_array($skuMap))
continue;
CIblockElement::GetPropertyValuesArray(
$skuMap, $iblockId, ['ID' => array_keys($skuMap)]
);
foreach ($skuMap as $elementId=>$properties)
{
if (!is_array($properties))
continue;
$formatedProperties = [];
foreach ($properties as $property)
{
if ($property['CODE'] === 'CML2_LINK' || (empty($property['VALUE']) && $property['VALUE'] !== 0))
continue;
$formatedProperties[] = htmlspecialcharsbx($property['NAME']).": ".htmlspecialcharsbx($property['VALUE']);
}
$products[$elementId]['PROPERTIES'] = $formatedProperties;
}
}
}
}
if (!empty($products))
{
$productIds = array_column($products, 'ID');
$measureRatios = MeasureRatioTable::getCurrentRatio($productIds);
foreach ($products as $product)
{
if (
!empty($options['restrictedSearchIds'])
&& is_array($options['restrictedSearchIds'])
&& in_array($product['ID'], $options['restrictedSearchIds'])
)
{
continue;
}
$resultItem = new MainSearchResultItem(
$product['NAME'], '', (int)$product['ID']
);
if (!empty($product['PROPERTIES']) && is_array($product['PROPERTIES']))
{
$resultItem->setSubTitle(implode(', ',$product['PROPERTIES']));
}
$resultItem->setAttribute('measureRatio', $measureRatios[(int)$product['ID']]);
$result[] = $resultItem;
}
}
return $result;
}