Вход / Регистрация 0
г. Красноярск
Дубровинского 110, оф. 503

Кастомизация умного фильтра

1. Копируем штатный шаблон нужного нам формата (горизонтальный, вертикальный), переименовываем.
2. Запускаем компонент с новым шаблоном, открываем страницу и смотрим html-код. Нас интересует структура блока с каким-либо свойством, копируем его. После открываем шаблон, и в любом месте добавляем свой блок с произвольным html содержимым. Получиться примерно следующее:

<div class="bx_filter_parameters_box custom_block active">
   <span class="bx_filter_container_modef"></span>
   <div class="bx_filter_parameters_box_title" data-role="prop_angle" onclick="smartFilter.hideFilterProps(this)">Произвольный раздел</div>
      <div class="bx_filter_block" data-role="bx_filter_block">
         <div class="bx_filter_parameters_box_container">
            <div class="bx-filter-parameters-box-container-block">
                     ...Здесь произвольное содержимое...
            </div>
         </div>
         <div class="clb"></div>
      </div>
</div>
Теперь у нас есть блок который органично вписывается в структуру родного шаблона. Заполняем его по своему усмотрению, можно, например, вставить туда список разделов. Обработку, естественно, пишем сами, главное не забыть чтоб на каждое изменение элементов формы в вашем блоке срабатывала конструкция вида:
smartFilter.click($(this)[0]);
Всё, теперь у вас при изменении  значений должна всплывать подсказка сколько элементов выбрано.
3. Все значения вснесённые вами в блок придут в виде request-a в компонент, чтобы туда не лезть, обработайте эти параметры на странице перед вызовом компонента умного фильтра и внесите в фильтр который будет использован этим компонентом. Внесённые вами изменения будут подхвачены и дополнены свойствами умного фильтра.
4. В шаблоне компонента замените параметр action формы с
$arResult['ACTION_FORM']
на явный путь до страницы
/filter_path/
то же самое делаем в скрипте:
BX.ajax.loadJSON(
       this.ajaxURL,
меняем на
BX.ajax.loadJSON(
            '/filter_path/',
5. Опять идём в шаблон: в самом начале формы находим код


<?foreach($arResult["HIDDEN"] as $arItem){?>
      <input type="hidden" name="<?echo $arItem["CONTROL_NAME"]?>" id="<?echo $arItem["CONTROL_ID"]?>" value="<?echo $arItem["HTML_VALUE"]?>" />
   <?}
и меняем его на
<?foreach($arResult["HIDDEN"] as $arItem){
            if(
               strpos($arItem["CONTROL_NAME"], 'custom_prop1')===false
               && strpos($arItem["CONTROL_NAME"], 'custom_prop2')===false
               && strpos($arItem["CONTROL_NAME"], 'custom_prop3')===false
               && strpos($arItem["CONTROL_NAME"], 'custom_prop4')===false
            ){?>
               <input type="hidden" name="<?echo $arItem["CONTROL_NAME"]?>" id="<?echo $arItem["CONTROL_ID"]?>" value="<?echo $arItem["HTML_VALUE"]?>" />
            <?}
         }
Дело в том что шаблон пытается запихать в скрытые поля все пришедшие в форму посторонние данные, соответственно, на странице фильтрации в форме вы получите задублированные поля в виде скрытого и внешнего, соответственно при попытке отключить какой-либо свой параметр он всё равно уйдёт в отбор, так как есть скрытое поле-двойник с тем же именем.

На это всё, ваш фильтр будет учитывать любые ваши доработки и корректно их отображать.