Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Фильтр со сложной логикой

00 голосов
3
Фильтр со сложной логикой.
Ребят, кому не сложно, накидайте ссылок.
Пока нашёл только по существу только в манах, но примеров использования в сети не могу найти.

И ещё, чтобы уже новую тему не создавать...

Как вывести всех производителей?
спросил 02 Авг, 13 от Skarler (280 баллов)

3 Ответы

00 голосов
Вы хотя бы изложили суть вашего фильтра и атрибуты по которым требуется фильтровать.
ответил 02 Авг, 13 от BeCool (420 баллов)
00 голосов
Вобще если это ваши посты http://dev.1c-bitrix.ru/community/forums/forum6/topic43599/
То у меня была похожая задача. 
Заключалась вот в чём, необходимо было в фильтр Добавлять Список Параметров дисков.
В разных каталогах дисков этих было разное количество в итоге я сделал так.
1. Добавил один фильтр для каталога.
2. В шаблоне компонента фильтра добавил result_modifier.php в нём делаю группировку по свойству по всем элементам для текущего каталога и забираю только те Параметры дисков которые есть в этом разделе.3. Подменяю select - тот что предоставляет нам фильтр на свой. 
Вот и всё
ответил 02 Окт, 13 от BeCool (420 баллов)
00 голосов
Вобще это довольно сложный процесс и просто так без усилий такое не сделать. Нашёл пример в одном из проектов. Объяснять ничего не буду сейчас 

result_modifier.php 
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (!empty($arResult) && CModule::IncludeModule('iblock')){
   $i=0;
   //Бегаем по свойствам
   foreach($arResult["arrProp"] as $arProp):
       $i++;
       if ($i==2):
           $arPropertyNames["f_models"][0]='<select id="'.$arResult["FILTER_NAME"].'_'."f_models".'" name="'.$arResult["FILTER_NAME"].'_pf['."f_models".']" style="width:100%">';
         $arPropertyNames["f_models"][0].="<option value=''>==не выбрано==</option>";
         $arPropertyNames["f_models"][0].="</select>";
       endif;
         $selected='';
        foreach($arResult["ITEMS"] as $arItem):
           if (strcmp(substr($arItem["INPUT_NAME"],19,strlen($arItem["INPUT_NAME"])-20),$arProp["CODE"])==0):
              $selected=$arItem["INPUT_VALUE"];
           endif;
        endforeach;
        if (strcmp($arProp["CODE"],'f_manufacturers')==0):
               if (strcmp($arProp["CODE"],'f_manufacturers')==0):
                   $arFilter = array(
               "IBLOCK_ID"=>'53',
               "ACTIVE"=>"Y",
               "IBLOCK_ACTIVE" => "Y",
               "PROPERTY"=>array('!f_manufacturers'=>false,'!f_year'=>false),
            );
            $arGroupBy = Array(strtoupper("PROPERTY_".$arProp["CODE"]));
            $arPropertyNames[$arProp["CODE"]][0]='<select id="'.$arResult["FILTER_NAME"].'_'.$arProp["CODE"].'" name="'.$arResult["FILTER_NAME"].'_pf['.$arProp["CODE"].']" style="width:100%" >';
            $arPropertyNames[$arProp["CODE"]][0].="<option value=''>==не выбрано==</option>";
            $db_list = CIBlockElement::GetList(Array(strtoupper("PROPERTY_".$arProp["CODE"])=>"ASC"),$arFilter,$arGroupBy);
            while($ob = $db_list->GetNextElement()){
            $arFields = $ob->GetFields();
            $valP=$arFields[strtoupper('PROPERTY_'.$arProp["CODE"].'_VALUE')];
                      if ($selected==$valP):
                         $arPropertyNames[$arProp["CODE"]][0].="<option value='".$valP."' selected>".$valP."</option>";
                      else: $arPropertyNames[$arProp["CODE"]][0].="<option value='".$valP."'>".$valP."</option>";
                      endif;
            }
            $arPropertyNames[$arProp["CODE"]][0].="</select>";
         endif;
      else:
         $arPropertyNames[$arProp["CODE"]][0]='<select id="'.$arResult["FILTER_NAME"].'_'.$arProp["CODE"].'" name="'.$arResult["FILTER_NAME"].'_pf['.$arProp["CODE"].']" style="width:100%">';
         $arPropertyNames[$arProp["CODE"]][0].="<option value=''>==не выбрано==</option>";
         $arPropertyNames[$arProp["CODE"]][0].="</select>";
       endif;
   endforeach;
   $arResult["newPropArray"]=$arPropertyNames;
}
?>
 
ответил 02 Янв, 14 от BeCool (420 баллов)

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

0 голосов
0 ответов
спросил 04 Май, 14 от ddvfty (440 баллов)
0 голосов
4 ответов
0 голосов
7 ответов
спросил 06 Июнь, 13 от TeoRex (280 баллов)
0 голосов
4 ответов
спросил 26 Янв, 14 от Kania (5,180 баллов)