Блог специалистов
24.11.2012

Как отфильтровать вывод catalog.section по значению свойства

Допустим есть нас каталог, где есть элементы со свойствами. Как вывести каталог, это все понятно. Но если нам потребуется вывести на отдельной странице только элементы какого-либо раздела, да еще и отфильтровать их по свойству.

Главное думать в првильном направлении. Нам нужно перед выводом инфоблока создать фильтр, а самому инфоблоку казать, чтобы он слушался нашего фильтра.

В коде это выглядит так:

<?
$arrFilter = array("PROPERTY_ТУТ-НАШЕ-СВОЙСТВО" => "ТУТ-ЗНАЧЕНИЕ-СВОЙСТВА-НАПРИМЕР-ЦВЕТ-БЕЛЫЙ-ИЛИ-Т.-П."); // это наш фильтр для выборки по свойству
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"template1",
   Array(
      "AJAX_MODE" => "N",
      "IBLOCK_TYPE" => "xmlcatalog",
      "IBLOCK_ID" => "14",
      "SECTION_ID" => "104",
      "SECTION_CODE" => "",
      "SECTION_USER_FIELDS" => array(),
      "ELEMENT_SORT_FIELD" => "sort",
      "ELEMENT_SORT_ORDER" => "asc",
      "FILTER_NAME" => "arrFilter", // вот тут мы оставляем так как есть "arrFilter", это указывает на то, что наш инфоблок будет обращать внимание на параметры для него заданные, а его самого мы написали впереди.       "INCLUDE_SUBSECTIONS" => "Y",
      "SHOW_ALL_WO_SECTION" => "N",
      "SECTION_URL" => "",
      ....... и т.д. и т.п.

)
);?>



Еще момент:

Не проверено, но если свойство предоставлено не в виде одной строки, а в виде списка, то нужно фильтр писать как VALUE, т.е. вот так:

$arrFilter = array("PROPERTY_ТУТ-НАШЕ-СВОЙСТВО_VALUE" => "ТУТ-ЗНАЧЕНИЕ-СВОЙСТВА-НАПРИМЕР-ЦВЕТ-БЕЛЫЙ-ИЛИ-Т.-П."); // это наш фильтр для выборки по свойству

Либо еще вот так:

<?
$GLOBALS['myAddFilter'] = array('PROPERTY_aktsii1' => '22');
$APPLICATION->IncludeComponent("bitrix:news.list", ".default", array(
"IBLOCK_TYPE" => "news",
"IBLOCK_ID" => "7",
"NEWS_COUNT" => "20",
"SORT_BY1" => "ACTIVE_FROM",
"SORT_ORDER1" => "DESC",
"SORT_BY2" => "SORT",
"SORT_ORDER2" => "ASC",
"FILTER_NAME" => "myAddFilter",
"FIELD_CODE" => array(

Фильтруем вывод news.list по ID элемента, на странице детального просмотра элемента, к которому они привязаны по свойству "Привяpка к элементам" с идентификатором BUY_WITH

<?
$GLOBALS['MyarrFilter']['ID'] = $arResult["PROPERTIES"]["BUY_WITH"]["VALUE"];
$APPLICATION->IncludeComponent("bitrix:catalog.section", "analog", array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "7",
"SECTION_ID" => "",
"SECTION_CODE" => "",....

Битрикс все лучше и лучше совершенствует нашу логику или пытается заставить нас думать как он :)


Количество показов: 20859




Возврат к списку