Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Фильтрация по спецпредложениям

00 голосов
6
Недавно начал разбираться с битриксом и понадобилось сделать два каталога товаров: по всем товарам и только по спецпредложениям. Честно пытался понять, как работать с фильтрами, но не получилось =( Пожалуйста, пните меня в нужную сторону, желательно куском кода ^_^
спросил 17 Окт, 13 от Divinil (160 баллов)

6 Ответы

00 голосов
Судя по тому, что нарыл на форуме, нужно использовать FILTER_NAME в параметрах при подключении компонента. Но нижеприведенный код не срабатывает, даже если в качестве фильтра поставить просто $arrFilter = array("ID" => 17); :( Код для подключения каталога брал из демо-версии битрикса. Подскажите, пожалуйста, где что не так может быть?
Код
<?
$arrFilter=array("!PROPERTY_SPECIALOFFER"=>false);
$APPLICATION->IncludeComponent("bitrix:catalog", ".default", array(
   "IBLOCK_TYPE" => "products",
   "IBLOCK_ID" => "2",
   "BASKET_URL" => "",
   "ACTION_VARIABLE" => "action",
   "PRODUCT_ID_VARIABLE" => "id",
   "SECTION_ID_VARIABLE" => "SECTION_ID",
   "SEF_MODE" => "Y",
   "SEF_FOLDER" => "/products/",
   "AJAX_MODE" => "N",
   "AJAX_OPTION_SHADOW" => "Y",
   "AJAX_OPTION_JUMP" => "N",
   "AJAX_OPTION_STYLE" => "Y",
   "AJAX_OPTION_HISTORY" => "N",
   "CACHE_TYPE" => "N",
   "CACHE_TIME" => "36000000",
   "CACHE_FILTER" => "N",
   "CACHE_GROUPS" => "N",
   "DISPLAY_PANEL" => "N",
   "SET_TITLE" => "Y",
   "SET_STATUS_404" => "Y",
   "USE_FILTER" => "Y",
   "FILTER_NAME" => "arrFilter", 
   "USE_COMPARE" => "N",
   "PRICE_CODE" => array(
      0 => "PRICE",
   ),
   "USE_PRICE_COUNT" => "N",
   "SHOW_PRICE_COUNT" => "1",
   "PRICE_VAT_INCLUDE" => "N",
   "PRICE_VAT_SHOW_VALUE" => "N",
   "SHOW_TOP_ELEMENTS" => "N",
   "PAGE_ELEMENT_COUNT" => "10",
   "LINE_ELEMENT_COUNT" => "1",
   "ELEMENT_SORT_FIELD" => "sort",
   "ELEMENT_SORT_ORDER" => "asc",
   "LIST_PROPERTY_CODE" => array(
      0 => "PRICECURRENCY",
      1 => "",
   ),
   "INCLUDE_SUBSECTIONS" => "Y",
   "LIST_META_KEYWORDS" => "-",
   "LIST_META_DESCRIPTION" => "-",
   "LIST_BROWSER_TITLE" => "-",
   "DETAIL_PROPERTY_CODE" => array(
      0 => "SIZE",
      1 => "S_SIZE",
      2 => "ARTNUMBER",
      3 => "MATERIAL",
      4 => "MANUFACTURER",
      5 => "",
   ),
   "DETAIL_META_KEYWORDS" => "-",
   "DETAIL_META_DESCRIPTION" => "-",
   "DETAIL_BROWSER_TITLE" => "-",
   "DETAIL_SHOW_PICTURE" => "Y",
   "LINK_IBLOCK_TYPE" => "",
   "LINK_IBLOCK_ID" => "",
   "LINK_PROPERTY_SID" => "",
   "LINK_ELEMENTS_URL" => "link.php?PARENT_ELEMENT_ID=#ELEMENT_ID#",
   "DISPLAY_TOP_PAGER" => "N",
   "DISPLAY_BOTTOM_PAGER" => "Y",
   "PAGER_TITLE" => "Продукция",
   "PAGER_SHOW_ALWAYS" => "N",
   "PAGER_TEMPLATE" => "arrows",
   "PAGER_DESC_NUMBERING" => "N",
   "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000000",
   "PAGER_SHOW_ALL" => "N",
   "AJAX_OPTION_ADDITIONAL" => "",
   "SEF_URL_TEMPLATES" => array(
      "sections" => "",
      "section" => "#SECTION_ID#/",
      "element" => "#SECTION_ID#/#ELEMENT_ID#/",
      "compare" => "",
   )
   ),
   false
);?>
ответил 08 Ноя, 13 от Divinil (160 баллов)
00 голосов
Переменную с фильтром объявите как глобальную переменную:
$GLOBALS['arrFilter']=array("!PROPERTY_SPECIALOFFER"=>false);
ответил 14 Фев, 14 от Delp (7,220 баллов)
00 голосов
Пробовал (сейчас вот еще для верности разок попробовал...) - не работает =(
ответил 05 Июнь, 14 от Divinil (160 баллов)
00 голосов
Да, вы используете комплексный комопнент, который подключает на странице списка элементов компонент фильтрации, он очищает ваш фильтр и устанавливает свой.
Поэтому ручную установку фильтра нужно производить в файле section.php после компонента bitrix:catalog.filter.

Тогда примерно вот так вам надо будет устанавливать фильтр:
// проверяем создан ли глобальный массив с фильтром, если нет, то создадим
$GLOBALS[$arParams['FILTER_NAME']] = isset($GLOBALS[$arParams['FILTER_NAME']]) && is_array($GLOBALS[$arParams['FILTER_NAME']]) ? $GLOBALS[$arParams['FILTER_NAME']] : array();
// добавляем поля фильтрации
$GLOBALS[$arParams['FILTER_NAME']]['!PROPERTY_SPECIALOFFER'] = false;

либо вообще убрать компонент bitrix:catalog.filter, если вам он не нужен, тогда код установки фильтра можно оставить прежним
ответил 02 Окт, 14 от Delp (7,220 баллов)
00 голосов
файл section.php - это файл в шаблоне комплексного компонента
ответил 04 Фев, 15 от Delp (7,220 баллов)
00 голосов
Спасибо, заработало! =)
ответил 17 Май, 15 от Divinil (160 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 22 Фев, 18 от аноним
0 голосов
2 ответов
спросил 03 Май, 14 от KeiDen (400 баллов)
0 голосов
2 ответов
спросил 02 Май, 14 от Mexx (140 баллов)
0 голосов
3 ответов
0 голосов
4 ответов
спросил 07 Фев, 14 от Kiuas (640 баллов)