Поиск по артикулу с обновлением поискового индекса
// у товара смотрим его ТП и берем артикулы, вносим их в поле, чтобы искалось по Артикулу ТП AddEventHandler("catalog", "OnProductAdd","addIDsFromSKUs"); AddEventHandler("catalog", "OnProductUpdate","addIDsFromSKUs"); function addIDsFromSKUs($id, $arFields) { $TARGET_IBLOCK_ID = 2; $artnumbers = ""; if (CModule::IncludeModule('catalog') && CModule::IncludeModule('iblock')) { $arProductInfo = CCatalogSKU::GetProductInfo($id); if (is_array($arProductInfo) && $arProductInfo["IBLOCK_ID"]==$TARGET_IBLOCK_ID ) { $arOffersInfo = CCatalogSKU::GetInfoByProductIBlock($arProductInfo['IBLOCK_ID']); $arFilter = array( 'IBLOCK_ID' => $arOffersInfo['IBLOCK_ID'], "PROPERTY_CML2_LINK" => $arProductInfo['ID'], //"!ID" => $id, ); $arSelect = Array("PROPERTY_ARTNUMBER"); $obOffersList = CIBlockElement::GetList(array("SORT"=>"ASC"), $arFilter, false, false, $arSelect); while ($arOffers = $obOffersList->Fetch()) { $artnumbers .= $arOffers["PROPERTY_ARTNUMBER_VALUE"]. ' '; } $PROPERTY_CODE = "SKU_ARTNUMBERS"; $PROPERTY_VALUE = $artnumbers; $el_id = $arProductInfo['ID']; $iblock_id = $arProductInfo["IBLOCK_ID"]; $prop[$PROPERTY_CODE] = array('VALUE'=>array('TYPE'=>'TEXT', 'TEXT'=>$PROPERTY_VALUE)); CIBlockElement::SetPropertyValuesEx($el_id, $iblock_id, $prop); $res = CIBlockElement::GetByID($el_id); $ar_res = $res->GetNext(); //переиндексируем элемент, чтобы находился в поиске CSearch::Index( "iblock", $el_id, Array( "DATE_CHANGE"=>$ar_res["DATE_CHANGE"], "TITLE"=>$ar_res["NAME"], "SITE_ID"=>array('s1'), "PARAM1"=>'catalog',//$arFields["IBLOCK_TYPE_ID"], "PARAM2"=>'2', //$arFields['IBLOCK_ID'], "PERMISSIONS"=>array("2"), "URL"=>str_replace("#ID#", $ar_res["ID"], $ar_res["DETAIL_PAGE_URL"]), "BODY"=>$ar_res["DETAIL_TEXT"].' '.$artnumbers, "TAGS"=>$artnumbers, ), true ); } } } AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "addIDsFromElementSKUs"); AddEventHandler("iblock", "OnAfterIBlockElementAdd", "addIDsFromElementSKUs"); function addIDsFromElementSKUs(&$arFields) { if ($arFields['IBLOCK_ID']==2 ) { $arOffersInfo = CCatalogSKU::GetInfoByProductIBlock($arFields['ID']); $arFilter = array( 'IBLOCK_ID' => $arOffersInfo['IBLOCK_ID'], "PROPERTY_CML2_LINK" => $arFields['ID'], //"!ID" => $id, ); $arSelect = Array("PROPERTY_ARTNUMBER"); $obOffersList = CIBlockElement::GetList(array("SORT"=>"ASC"), $arFilter, false, false, $arSelect); while ($arOffers = $obOffersList->Fetch()) { $artnumbers .= $arOffers["PROPERTY_ARTNUMBER_VALUE"]. ' '; } $PROPERTY_CODE = "SKU_ARTNUMBERS"; $PROPERTY_VALUE = $artnumbers; $el_id = $arFields['ID']; $iblock_id = $arFields["IBLOCK_ID"]; $prop[$PROPERTY_CODE] = array('VALUE'=>array('TYPE'=>'TEXT', 'TEXT'=>$PROPERTY_VALUE)); CIBlockElement::SetPropertyValuesEx($el_id, $iblock_id, $prop); //переиндексируем элемент, чтобы находился в поиске CSearch::Index( "iblock", $el_id, Array( "DATE_CHANGE"=>$arFields["DATE_CHANGE"], "TITLE"=>$arFields["NAME"], "SITE_ID"=>array('s1'), "PARAM1"=>'catalog',//$arFields["IBLOCK_TYPE_ID"], "PARAM2"=>'2', //$arFields['IBLOCK_ID'], "PERMISSIONS"=>array("2"), "URL"=>str_replace("#ID#", $arFields["ID"], $arFields["URL"]), "BODY"=>$arFields["DETAIL_TEXT"].' '.$artnumbers, "TAGS"=>$artnumbers, ), true ); } } |