Заготовку можно скачать отсюда.
Собственно не станем вдаваться в то, как этот фильтр будет выглядеть. Рассмотрим механику его работы.
Что должен делать фильтр? Правильно! Фильтровать информацию по различным параметрам.
Схема работы будет следующая:
Сама форма фильтра только отправляет POST запрос с параметрами фильтрации, а компонент вывода — на основе этих параметров выводит именно ту информацию, которая нам требуется.
component.php компонента вывода будет выглядеть примерно так:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true){ die(); } CModule::IncludeModule("iblock"); $filter = array("IBLOCK_ID"=>/*ID инфоблока из которого нужно получить информацию*/, "ACTIVE"=>"Y"); $arResult = array(); /* * если в реквесте есть фильтрация */ if (!empty($_REQUEST['filter'])){ /* здесь добавляем в массив $filter параметры фильтрации из реквеста * пример: *if ((!empty($_REQUEST['filter']['PRICE_FROM']))AND(!empty($_REQUEST['filter']['PRICE_TO']))){ * $filter['>=PROPERTY_PRICE'] = $_REQUEST['filter']['PRICE_FROM']; * $filter['<=PROPERTY_PRICE'] = $_REQUEST['filter']['PRICE_TO']; * } */ } /* * теперь выводим элементы инфоблока на основе фильтрационного массива $filter */ $arSelect = array(/*поля для вывода*/); $res = CIBlockElement::GetList(Array(/*сортировка*/), $filter, false, false, $arSelect); while($ob = $res->GetNext()){ // здесь обрабатываем наши данные для $arResult $arResult['ITEMS'][] = $ob; } //подключаем шаблон компонента $this->IncludeComponentTemplate(); ?>
В компонент вывода также можно добавить кэширование, но я не стал добавлять его в заготовку (вдруг кэширование вам не требуется?). Тоже самое касается параметров компонента — вполне можно вынести ID инфоблока в $arParams, но нужно ли это — решать Вам.
Заготовка шаблона вывода (template.php) будет выглядеть примерно так:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?> <?foreach ($arResult['ITEMS'] as $item):?> <!--вёрстка элемента инфоблока--> <?endforeach;?>
Спасибо за внимание!