Похожие элементы каталога по свойствам (в карточке товара)
<?//Получаем свойства товара по которым будем искать похожие товары (в component_epilog.php)
$GLOBALS["VJWEB"]["POHOZHIE"] = array();
//Получаем в ручную добавленные похожие товары
if($arResult["PROPERTIES"]["POHOZHIE"]["VALUE"])
{
$GLOBALS["VJWEB"]["POHOZHIE"]["ID"] = array();
foreach($arResult["PROPERTIES"]["POHOZHIE"]["VALUE"] as $kID => $vID)
{
$GLOBALS["VJWEB"]["POHOZHIE"]["ID"][] = $vID;
}
}
$GLOBALS["VJWEB"]["POHOZHIE"] += ["!ID" => $arResult["ID"]]; //Добавляем ID товара , что бы исключить его в выдоче
//Передаем свойства в глобальный массив
if(!empty($arResult["PROPERTIES"]["price"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["price" => $arResult["PROPERTIES"]["price"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["plochad_kvartiry"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["plochad_kvartiry" => $arResult["PROPERTIES"]["plochad_kvartiry"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["MNG_RAZMERV"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["MNG_RAZMERV" => $arResult["PROPERTIES"]["MNG_RAZMERV"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["otdelka"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["otdelka" => $arResult["PROPERTIES"]["otdelka"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["rajon"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["rajon" => $arResult["PROPERTIES"]["rajon"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["vid_na_more"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["vid_na_more" => $arResult["PROPERTIES"]["vid_na_more"]["VALUE"]];
if(!empty($arResult["PROPERTIES"]["rasstoyanie_do_morya"]["VALUE"]))$GLOBALS["VJWEB"]["POHOZHIE"]+= ["rasstoyanie_do_morya" => $arResult["PROPERTIES"]["rasstoyanie_do_morya"]["VALUE"]];
"FILTER_NAME" => "arrFilter",
<?// Формируем массив arrFilterPohozh для фильтрации элементов
$GLOBALS["arrFilterPohozh"] = ["!ID" => $GLOBALS["VJWEB"]["POHOZHIE"]["!ID"]]; //Добавляем исключение
$GLOBALS["arrFilterPohozh"] += ["ID" => $GLOBALS["VJWEB"]["POHOZHIE"]["ID"]]; //Добавляем полученные в ручную похожие товары
//Отбираем товары по похожим свойствам
$arSFil = Array("ID", "NAME", "PROPERTY_price", "PROPERTY_plochad_kvartiry", "PROPERTY_MNG_RAZMERV", "PROPERTY_otdelka", "PROPERTY_rajon", "PROPERTY_vid_na_more", "PROPERTY_rasstoyanie_do_morya");
$arFFil = Array("IBLOCK_ID"=> 2,
"ACTIVE_DATE"=>"Y",
"ACTIVE"=>"Y",
"IBLOCK_ACTIVE"=>"Y",
"SECTION_GLOBAL"=>"Y",
"CHECK_PERMISSIONS"=>"Y",
array(array( "LOGIC" => "AND",
array("!ID" => $GLOBALS["VJWEB"]["POHOZHIE"]["!ID"]),
array("!PROPERTY_photo" => false),//не отбираем элементы без фото
array("!PROPERTY_status_VALUE" => "Продано"),//не отбираем элементы со свойством "Продано"
array( "LOGIC" => "OR",
array("PROPERTY_price" => $GLOBALS["VJWEB"]["POHOZHIE"]["price"]),
array("PROPERTY_plochad_kvartiry" => $GLOBALS["VJWEB"]["POHOZHIE"]["plochad_kvartiry"]),
array("PROPERTY_MNG_RAZMERV" => $GLOBALS["VJWEB"]["POHOZHIE"]["MNG_RAZMERV"]),
array("PROPERTY_vid_na_more" => $GLOBALS["VJWEB"]["POHOZHIE"]["vid_na_more"]),
array("PROPERTY_rajon" => $GLOBALS["VJWEB"]["POHOZHIE"]["rajon"]),
array("PROPERTY_rasstoyanie_do_morya" => $GLOBALS["VJWEB"]["POHOZHIE"]["rasstoyanie_do_morya"]),
array("PROPERTY_otdelka" => $GLOBALS["VJWEB"]["POHOZHIE"]["otdelka"])))));
$resFil = CIBlockElement::GetList(Array(), $arFFil, false, false, $arSFil);
while($obFil = $resFil->GetNextElement()){
$arFielFil = $obFil->GetFields();
$arResult['Filter'][] = $arFielFil;
}
//Формируем массив по наибольшему кол-ву сходств по свойствам
foreach($arResult['Filter'] as $kIt=>$vIt)
{
$x=0;
foreach(array_change_key_case($GLOBALS["VJWEB"]["POHOZHIE"], CASE_UPPER) as $kPOH=>$vPOH)
{
if ($vIt["PROPERTY_".$kPOH."_VALUE"] == $vPOH)
{
$x++;
}
}
$count_id[$vIt['ID']] = $x;
}
arsort($count_id); //Сортируем от большего кол-ва свойств к меньшему
//Обрезаем сверху 9 элементов, включая отобранные в ручную
if ($GLOBALS["arrFilterPohozh"]["ID"]){
$x = 9 - count($GLOBALS["arrFilterPohozh"]["ID"]);
$small_count_id = array_slice($count_id, 0, $x, TRUE);
}
else $small_count_id = array_slice($count_id, 0, 9, TRUE);
foreach($small_count_id as $k=>$v)
{
$GLOBALS["arrFilterPohozh"]["ID"][] = $k;
}
/*END*/?>