На странице расположен фильтр по свойствам.
Внизу список связанных элементов, которые и фильтруются.
Для разных страниц, элементы различны и свойства у них также различны, хотелось бы выводить поля фильтра только по тем свойствам, у которых есть значения.
Никак не получается реализовать.
Надеюсь на Вашу помощь.
Часть кода компонента
Часть шаблона вывода фильтра
Нужно делать дополнительный запрос перед выводом полей фильтра, но как это сделать не могу сообразить.
Заранее спасибо за варианты!
Внизу список связанных элементов, которые и фильтруются.
Для разных страниц, элементы различны и свойства у них также различны, хотелось бы выводить поля фильтра только по тем свойствам, у которых есть значения.
Никак не получается реализовать.
Надеюсь на Вашу помощь.
Часть кода компонента
Код |
---|
foreach($arResult["arrProp"] as $prop_id=>$arProp) { $res = ""; $arResult["arrInputNames"][$FILTER_NAME."_pf"]=true; switch ($arProp["PROPERTY_TYPE"]) { case "L": $name = $FILTER_NAME."_pf[".$arProp["CODE"]."]"; $value = $arrPFV[$arProp["CODE"]]; $res = '<select'; if ($arProp["MULTIPLE"]=="Y") $res .= ' multiple name="'.$name.'[]"'; else $res .= ' name="'.$name.'"'; $res .= ' size="'.$arParams["LIST_HEIGHT"].'">'; $res .= '<option value="">'.GetMessage("IBLOCK_ALL").'</option>'; foreach($arProp["VALUE_LIST"] as $key=>$val) { $res .= '<option'; if($key==$arrPFV[$arProp["CODE"]]) $res .= ' selected'; $res .= ' value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).'</option>'; } $res .= '</select>'; if ($arProp["MULTIPLE"]=="Y") { if (is_array($value) && count($value)>0) ${$FILTER_NAME}["PROPERTY"][$arProp["CODE"]] = $value; } else { if (strlen($value)>0) ${$FILTER_NAME}["PROPERTY"][$arProp["CODE"]] = $value; } break; } if(res) $arResult["ITEMS"][] = array("NAME" => htmlspecialchars($arProp["NAME"]), "INPUT" => $res); |
Часть шаблона вывода фильтра
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <form name="<?=$arResult["FILTER_NAME"]."_form"?>" action="" method="get"> <?foreach($arResult["ITEMS"] as $arItem): if(array_key_exists("HIDDEN", $arItem)): echo $arItem["INPUT"]; endif; endforeach;?> <table class="data-table" cellspacing="0" cellpadding="2"> <thead> <tr> <td colspan="2" align="center"><?=GetMessage("IBLOCK_FILTER_TITLE")?></td> </tr> </thead> <tbody> <?foreach($arResult["ITEMS"] as $arItem):?> <?if(!array_key_exists("HIDDEN", $arItem)):?> <tr> <td valign="top"><?=$arItem["NAME"]?>:</td> <td valign="top"><?=$arItem["INPUT"]?></td> </tr> <?endif?> <?endforeach;?> </tbody> |
Нужно делать дополнительный запрос перед выводом полей фильтра, но как это сделать не могу сообразить.
Заранее спасибо за варианты!