Умный фильтр Битрикса не поддерживает фильтрацию по складам (потому как работает только со свойствами элементов). Следовательно, чтобы добавить в возможность фильтровать товар по наличию на складах, нужно добавить соответствующие свойства в карточку элемента. Для этого напишем обработчик в init.php, который при изменении количества товара на складе будет проставлять нужные свойства в карточку элемента.
Не единожды поступала задача вывести фильтр с многоуровневой структурой. Здесь будет показана одна реализация на основе свойств инфоблока. Вторая реализация выглядит как фильтр, на самом деле является выводом catalog.section.list, закомуфлированным под фильтр и подающим в ajax данные для фильтрации catalog.section либо по свойствам, либо по разделам. Эта реализация основана на интуитивно понятной структуре разделов инфоблока и является ее отображенинм. Она накладывает определенные ограничения на структуру разделов и выводит только два уровня. На момент написания реализацию можно посмотреть здесь: http://locationhunters.ru/catalog/
Умный фильтр обладает бОльшими возможностями и выглядит для заказчика более предпочтительным, чем выше описанный пример. Естественно, что все зависит от конкретной задачи в рамках которой разработчик делает свой выбор. Для описаной здесь реализации использован следующий подход: многоуровневость заложена в
1. Скопировать стандартный шаблон компонента bitrix.system.auth.registration в папку шаблона сайта 2. В этом шаблоне разместить примерно следующий код:
На неделе аж 2 раза случилась одна и та же задачка у несвязанных клиентов. Точно надо записать. В умном фильтре появились пустые свойства, т.е. чекбокс есть, а надпись рядом отсутствует, а еще и не один пустой, а несколько. Как известно умный фильтр собирает данные свойств помеченные как участвующие в умном фильтре для текущего раздела инфоблока.
В catalog.element открываем script.js и находим функцию window.JCCatalogElement.prototype.ChangeInfo = function() . Добавляем после строки this.offerNum = index; простенький js - например, document.getElementById('quick_or').value=this.offerNum; а в код страницы добавляем скрытый input c id="quick_or". Получаем номер торгового предложения в массиве $arResult[OFFERS]. А эта строчка eventData.newId = this.offers[this.offerNum].ID; даст нам реальный ID торгового предложения
Этот вариант подойдет для готовой корзины Битрикса - вместо переадресации на оформление заказа мы будем собирать данные и создавать заказ средствами API (а не компонентов).