Как в фильтр 1С Битрикс вывести значения свойства определенного раздела, элементов?

Создали быстрый фильтр по товарам на главной странице, фильтр показывает все значения выбранных свойств. Как отфильтровать вывод значений свойств по определенному разделу?

if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
//Параметры
$podborParams = array(
	"URL"=>"/catalog/accumulators/",
	"filter_name"=>"arTires2Filter",
	"IBLOCK_ID"=>118,
	"SECTION_ID"=>12372,
	"PARAMS"=>array(
		"EMK"=>array("CODE"=>"EMKOST_ACH"), //Емкость Ач
		"POL"=>array("CODE"=>"POLYARNOST"), //Полярность
		"TYP"=>array("CODE"=>"TIP_KORPUSA"), //Тип корпуса
		"WID"=>array("CODE"=>"SHIRINA_MM"),//Ширина
		"HEI"=>array("CODE"=>"VYSOTA_MM"),//Высота
		"LEN"=>array("CODE"=>"DLINA_MM"),//Длина
		"PRO"=>array("CODE"=>"BREND_AKB"),//Бренд
		"TECH"=>array("CODE"=>"TEKHNOLOGIYA"),//Технология
		"HEAD"=>array("CODE"=>"TIP_KRYSHKI"),//Тип крышки
		"VOLT"=>array("CODE"=>"NAPRYAZHENIE_V"), //Напряжение
		"BURT"=>array("CODE"=>"NIZHNIY_BURT"), //Нижний бурт
		"TYPR"=>array("CODE"=>"TIPORAZMER"), //Типоразмер
	),
	"SMART_URL_PATH" => "#SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/apply",
);
//strtolower($podborParams['PARAMS']['']['CODE']);
$podborParams["PARAMS2"] = $podborParams["PARAMS"];
$property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$podborParams["IBLOCK_ID"], "SECTION_ID"=>$podborParams["SECTION_ID"]));
while($enum_fields = $property_enums->GetNext())
{
	foreach($podborParams["PARAMS"] as $k=>$v){
		if($v && $enum_fields["PROPERTY_CODE"] == $v["CODE"]){
			//_pre($enum_fields);
			$podborParams["PARAMS"][$k]["VALUES"][] = $enum_fields["VALUE"];//$key)
			$podborParams["PARAMS"][$k]["~VALUES"][] = abs(crc32($enum_fields["ID"]));
			$podborParams["PARAMS"][$k]["EXTERNAL_ID"][] = $enum_fields["EXTERNAL_ID"];
			$podborParams["PARAMS"][$k]["ID"] = $enum_fields["PROPERTY_ID"];
			$podborParams["PARAMS2"][$k]["VALUES"][] = strtolower(urlencode($enum_fields["VALUE"]));//$key)
			$podborParams["PARAMS2"][$k]["ID"] = $enum_fields["PROPERTY_ID"];
		}
	}
}
//_pre($podborParams["PARAMS"]);
/*Формируем массив ID подразделов раздела - Аккумуляторы*/
$arFilter = Array('IBLOCK_ID'=>$podborParams["IBLOCK_ID"], 'SECTION_ID'=>$podborParams["SECTION_ID"], 'GLOBAL_ACTIVE'=>'Y');
$db_list = CIBlockSection::GetList(Array(), $arFilter, true);
while($ar_result = $db_list->GetNext())
{
    $arrayID[] = $ar_result['ID'];
}
/* Бренд АКБ */
/* Формируем массив активных элементов */
$arSelect = Array("ID", "PROPERTY_BREND_AKB");
$arFilter = Array("IBLOCK_ID"=>$podborParams["IBLOCK_ID"],'ACTIVE'=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
/* Получаем их бренды */
while($ob = $res->GetNextElement()){
	if(!in_array($ob->fields['PROPERTY_BREND_AKB_VALUE'], $arProps)){
		$arProps[] = $ob->fields['PROPERTY_BREND_AKB_VALUE'];
	}
}
foreach($podborParams["PARAMS"]["PRO"]["VALUES"] as $k=>$type){
	if(!in_array($type, $arProps)){
		unset($podborParams["PARAMS"]["PRO"]["VALUES"][$k]);
		unset($podborParams["PARAMS"]["PRO"]["~VALUES"][$k]);
	}
}
/* Технология */
/* Формируем массив активных элементов */
$arSelect = Array("ID", "PROPERTY_TEKHNOLOGIYA");
$arFilter = Array("IBLOCK_ID"=>$podborParams["IBLOCK_ID"], 'ACTIVE'=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
/* Получаем список*/
while($ob = $res->GetNextElement()){
	if(!in_array($ob->fields['PROPERTY_TEKHNOLOGIYA_VALUE'], $arProps)){
		$arProps[] = $ob->fields['PROPERTY_TEKHNOLOGIYA_VALUE'];
	}
}
foreach($podborParams["PARAMS"]["TECH"]["VALUES"] as $k=>$type){
	if(!in_array($type, $arProps)){
		unset($podborParams["PARAMS"]["TECH"]["VALUES"][$k]);
		unset($podborParams["PARAMS"]["TECH"]["~VALUES"][$k]);
	}
}
//echo '<!-- <pre>'.print_r($podborParams['PARAMS']['PRO'],1).'</pre> -->';
// -- конец правок
$properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$podborParams["IBLOCK_ID"]));
while ($prop_fields = $properties->GetNext())
{
	foreach($podborParams["PARAMS"] as $k=>$v){
		if($v && $prop_fields["CODE"]==$v["CODE"]){
			$podborParams["PARAMS"][$k]["ID"] = $prop_fields["ID"];
		}
	}
}


<div class="bx_filter_parameters_box_title icons_fa">
											<div class="bx_filter_podbor_title">Бренд аккумулятора</div>
										</div>
										<div class="bx_filter_block ">
											<div class="bx_filter_parameters_box_container">
												<div class="rows cars-list-mark">
													<div class="select">
														<select name="<?=strtolower($podborParams['PARAMS']['PRO']['CODE'])?>_is">
															<option value="" selected="selected">&mdash;</option>
															<?asort($podborParams["PARAMS"]["PRO"]["VALUES"]); foreach($podborParams["PARAMS"]["PRO"]["VALUES"] as $k=>$type){?>
															<option value="<?=strtolower($podborParams["PARAMS"]["PRO"]["VALUES"][$k])?>" ><?=$type?></option><?}?>
														</select>
													</div>
												</div>
											</div>

	<div class="bx_filter_podbor_title">Технология</div>
												</div>
												<div class="bx_filter_block limited_block" style="max-height: 143px; overflow-y: auto;">
													<div class="bx_filter_parameters_box_container ">
														<?foreach($podborParams["PARAMS"]["TECH"]["VALUES"] as $k=>$type){?>
														<input type="checkbox" value="" name="<?=strtolower($podborParams['PARAMS']['TECH']['CODE'])?>_<?=urldecode($podborParams["PARAMS"]["TECH"]["EXTERNAL_ID"][$k])?>" id="<?=$podborParams["filter_name"]?>_<?=$podborParams["PARAMS"]["TECH"]["ID"]?>_<?=$podborParams["PARAMS"]["TECH"]["~VALUES"][$k]?>"/>
														<label class="bx_filter_param_label" for="<?=$podborParams["filter_name"]?>_<?=$podborParams["PARAMS"]["TECH"]["ID"]?>_<?=$podborParams["PARAMS"]["TECH"]["~VALUES"][$k]?>">
															<span class="bx_filter_input_checkbox">
																<span class="bx_filter_param_text bx_filter_param_text222" title="Технология"><?=$type?></span>
															</span>
														</label>
														<?}?>
													</div>
													<div class="clb"></div>
												</div>
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 1
/* Бренд АКБ */
/* Формируем массив активных элементов */
$arSelect = Array("ID", "PROPERTY_BREND_AKB");
$arFilter = Array("IBLOCK_ID"=>$podborParams["IBLOCK_ID"],'ACTIVE'=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);

Добавьте в $arFilter фильтрацию по подразделам, Вы их там выше по коду собрали. И сделайте группировку по 'PROPERTY_BREND_AKB', это сделает ненужным in_array().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы