0
27.04.201706:5627.04.2017 06:56:24
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 формы с
на явный путь до страницы
то же самое делаем в скрипте:
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"]?>" />
<?}
} |
Дело в том что шаблон пытается запихать в скрытые поля все пришедшие в форму посторонние данные, соответственно, на странице фильтрации в форме вы получите задублированные поля в виде скрытого и внешнего, соответственно при попытке отключить какой-либо свой параметр он всё равно уйдёт в отбор, так как есть скрытое поле-двойник с тем же именем.
На это всё, ваш фильтр будет учитывать любые ваши доработки и корректно их отображать.