Select  вместо chekbox в умном фильтре 1С-битрикс

Рассмотрим как можно сделать выпадающий список свойств в умном фильтре Битрикс, вместо стандартного chekbox. Нужно это дастаточно редко однако случается.

 

В начале было вот так:

 

Станет вот так:

select  вместо chekbox

Для начала копируем шаблон стандартного smart.filter в папку со своим шаблоном сайта и подключаем его в шаблоне комплексного компонента каталога, заменив соответствующую строку в файле section.php.

 

Далее открываете шаблон компонента умного фильтра smart.filter . Для этого заходите в свой шаблон, например, /bitrix/templates/.default/components/bitrix/catalog.smart.fitr/myfilter и изменяете следующие файлы:

 

В файле script.js изменяете 2 метода click и reload:
Метод clickSelect() на этот :

JCSmartFilter.prototype.clickSelect = function(select)
{
if(this.timer)
clearTimeout(this.timer);
this.timer = setTimeout(BX.delegate(function(){
this.reloadSelect(select);
}, this), 1000);
}

Метод Метод reloadSelect():

JCSmartFilter.prototype.reloadSelect = function(select)
{
this.position = BX.pos(select, true);
this.form = BX.findParent(select, {'tag':'form'});
if(this.form)
{
var values = new Array;
values[0] = {name: 'ajax', value: 'y'};
this.gatherInputsValues(values, BX.findChildren(this.form, {'tag':'select'}, true));
BX.ajax.loadJSON(
this.ajaxURL,
this.values2post(values),
BX.delegate(this.postHandler, this)
);
}
}  

В файле template.php находим часть которая выводит инпуты с чекбоксами, примерно 147-я строка и полностью заменяем на:

<div>
<select id="<?=$arItem['CODE']; ?>" name="" onChange="smartFilter.clickSelect(this)" >
<option id="not-value" value="" >- - - -</option>
<?foreach($arItem["VALUES"] as $val => $ar) { ?>
<option <?echo $ar["CHECKED"]? 'selected="selected"': ''?> id="<?echo $ar["CONTROL_NAME"]?>" <?if ($ar["DISABLED"]){ ?>disabled<? } ?> value="Y" ><?echo $ar["VALUE"];?></option>
<? } //end foreach property values ?>
</select>
</div>

И в самый конец template.php вставляем скрипт который поможет стандартному AJAX  понять какие параметры ему предаются.  Для каждого списка обработчик свой:

<script>
$(document).ready(function(){
<? //Формируем дополнительные jquery обработчики для select-ов
foreach($arResult["ITEMS"] as $key=>$arItem) {
if(!empty($arItem["VALUES"]) && !isset($arItem["PRICE"])) {
?>
//Проставляем name select-ам с уже выбранными свойствами
setTimeout(function(){
var SelectOption = $("#<?=$arItem['CODE']; ?> option:selected").attr('id');
$("#<?=$arItem['CODE']; ?>").attr('name',SelectOption);
},1500);
//заполнение name с реакцией на change
$("#<?=$arItem['CODE']; ?>").on('change', function(){
var SelectOption = $("#<?=$arItem['CODE']; ?> option:selected").attr('id');
$("#<?=$arItem['CODE']; ?>").attr('name',SelectOption);
});
<?
}
}?>
});
</script>

В общем-то все, стилизовать внешний вид вы всегда сможете под себя. Написано на основе нескольких тем на форуме http://dev.1c-bitrix.ru/community/forums/

Еще в записках:
Все заметки
Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей

Зарегистрироваться Войти
Напомнить пароль

Быстрая регистрация через соц.сеть:
Игорь
к сожалению не работает :(
Михаил Базаров
Цитата
Игорь пишет:
к сожалению не работает
Только что проверил- все работает, в тексте опечаток нет
Дмитрий
Спасибо!
Валентин
Доброго времени суток! Все сделал как Вы написали! Но вышла нехорошая штука: при добавлении компонента  в select  ниже появляется дополнительный select. В итоге у меня на одно свойство имеются два селекта с одинаковыми компонентами. Как быть??? Заранее очень благодарен!
Guest
Добрый день!
Есть ли способ переделать поля аналогично в input?
Михаил Базаров
Цитата
Guest пишет:
Добрый день!
Есть ли способ переделать поля аналогично в input?
Пока не приходилось сталкиваться с такой задачкой. но чем-то сверхсложным быть не должно.
Guest
Спасибо за инфу, хотелось бы увидеть урок по переносу умного фильтра на главную страницу
Михаил Базаров
Цитата
Guest пишет:
Спасибо за инфу, хотелось бы увидеть урок по переносу умного фильтра на главную страницу
Умный фильтр работает только когда находится перед компанентом catalog.section сам по себе он не действует. Что бы вывести на главную надо работать с обычным "тупым" фильтром
Марина
Добрый день!

Спасибо Вам за Вашу работу здесь. Для  меня, как новичка в Bitrix, очень много полезного!

Буду признательна за ответ: можно ли штатными средствами Bitrix Управление сайтом сделать такую выборку по товарам. Если нет, то каким образом не штатными внутри системы?

http://www.inwool.de/alpakadecken

Спасибо.
Александр Христич
Михаил, здравствуйте!
Не работает умный фильтр для не авторизованных пользователей, как это можно исправить?
Случайные заметки из блога
Табы из свойств инфоблока в Битрикс

Думаю все знают что такое табы или вкладки. Расскажу как на ...

Подключение SSL на Битрикс виртуальная машина

Для некоторых сервисов, типа Яндекс Касса, требуется наличие...

Дополнительные картинки в списке элементов каталога битрикс

Очень редко, но бывают ситуации, когда надо вывести дополнительные...

Умный фильтр на главной странице Битрикс

Достаточно редкая но востребованная задачка- это вывести компонент...

Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс

Достаточно часто, при проверке параметров системы, в Битрикс,...

Ускорение сайта Битрикс на ubuntu server, Memcached.

До сегодняшнего дня арендовал виртуальный сервер в Германии ...

Свежие комментарии в блоге
Самодельная форма добавления элемента на API Битрикс

Здравствуйте! А вот вопрос как пользователю в месте с элементом создать раздел в котором он будет на...

25.07.2017 / Александр Иванов
Очистка корзины битрикс одним нажатием

[url=/blog-note/1412/]Очистка корзины битрикс одним нажатием[/url] В стандартной корзине Битрикс...

24.07.2017 / Михаил Базаров
Материалы по теме в новостях Битрикс, с картинкой, названием и текстом анонса.

[QUOTE][USER=1631]Интересующийся многим[/USER] пишет: Михаил, добрый день! что-то ссылка [url]http...

22.07.2017 / Михаил Базаров
Всплывающее окно с формой обратной связи Битрикс

Подскажите почему может не работать скрипт  BX.ajax.onload_943827 = function() {           setTime...

19.07.2017 / Рима Уколова
Вывести товары из того же раздела в карточке товара

Михаил, скажите пожалуйста, этот метод еще актуален? Никак не могу передать ни id ни символьный код,...

19.07.2017 / Алексей Сель

© 2011—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой.
Политика конфеденциальности

x
Как к Вам обращаться? *
Ваша электронная почта: *
Доп. материалы (логотип, тех. задание):
 
Обзор
Текст сообщения:

Нажимая на кнопку "Отправить", Вы соглашаетесь на обработку Ваших персональных данных согласно политике конфеденциальности. Ознакомиться с которой, можно в нижнем правом углу сайта