Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!
Я так понял, что фильтрация возможна с помощью дополнительного запроса и вызова функции CIBlockElement::GetList() ,а как с помощью кода сделать выше? Я не могу отправить параметр "<PROPERTY_PRICE"=>1000000 в стандартный компонент каталога, или это не возможно?
Нет, компонент каталога вызовет GetList сам, вы должны 1) задать переменную с фильтром $arFilter; 2) передать её имя параметром FILTER_NAME к компоненту каталога.
<?$APPLICATION->IncludeComponent(
"bitrix:catalog",
"",
Array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "99",
...
"USE_FILTER" => "Y",
"FILTER_NAME" => "arFilter",
)
);?>
У меня в массиве "FILTER_NAME" передаётся параметр "s". получается примерно следующий GET запрос: s_pf[PRICE]=&s_pf[KOMNAT]=&s_pf[OT_METRO_VID] . Конструкция типа :
<?
$s= array("<PROPERTY_PRICE" => 50000);?>
Не работает. В админе создано одно свойство PRICE, в шаблоне вывода фильтра я добавил два текстовых поля с параметрами price_ot и price_do, вот эти два параметра мне нужно передать дополнительно уже к тем фильтрам которые есть на странице.
В итоге получается запрос &price_ot=500&price_do=1000&s_pf[СВОЙСТВО1]=123&s_pf[Свойство2]=12345
И соответственно весь код который был в первом посте!
Ваш код выглядит верно, но как всегда могут быть какие-то нюансы, которые всё меняют. "USE_FILTER" => "Y" вы добавили в параметр вызова компонента? И попробуйте отключите (для теста) кеширование компонента, на всякий случай...
Кэш выключен по умолчанию.
Вот весь код на странице
<?
if(isset($_GET['price_ot']) and !empty($_GET['price_ot']))$ot=intval($_GET['price_ot']); else $ot=false;
if(isset($_GET['price_do']) and !empty($_GET['price_do']))$do=intval($_GET['price_do']); else $do=false;
<?$APPLICATION->IncludeComponent(
"bitrix:catalog",
".default",
Array(
"AJAX_MODE" => "N",
"SEF_MODE" => "Y",
"IBLOCK_TYPE" => "catalogue",
"IBLOCK_ID" => "1",
"USE_FILTER" => "Y",
"USE_COMPARE" => "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("PRICE", "OT_METRO", "METRO"),
"INCLUDE_SUBSECTIONS" => "Y",
"LIST_META_KEYWORDS" => "-",
"LIST_META_DESCRIPTION" => "-",
"LIST_BROWSER_TITLE" => "-",
"DETAIL_PROPERTY_CODE" => array("ULICA", "ON_MAIN", "INSTOCK", "KVARTIRI"),
"DETAIL_META_KEYWORDS" => "-",
"DETAIL_META_DESCRIPTION" => "-",
"DETAIL_BROWSER_TITLE" => "TITLE",
"BASKET_URL" => "/personal/basket.php",
"ACTION_VARIABLE" => "action",
"PRODUCT_ID_VARIABLE" => "id",
"SECTION_ID_VARIABLE" => "SECTION_ID",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"CACHE_FILTER" => "N",
"CACHE_GROUPS" => "Y",
"SET_TITLE" => "Y",
"SET_STATUS_404" => "Y",
"PRICE_CODE" => array(),
"USE_PRICE_COUNT" => "N",
"SHOW_PRICE_COUNT" => "1",
"PRICE_VAT_INCLUDE" => "Y",
"PRICE_VAT_SHOW_VALUE" => "N",
"LINK_IBLOCK_TYPE" => "catalogue",
"LINK_IBLOCK_ID" => "1",
"LINK_PROPERTY_SID" => "",
"LINK_ELEMENTS_URL" => "link.php?PARENT_ELEMENT_ID=#ELEMENT_ID#",
"DISPLAY_TOP_PAGER" => "Y",
"DISPLAY_BOTTOM_PAGER" => "Y",
"PAGER_TITLE" => "Товары",
"PAGER_SHOW_ALWAYS" => "Y",
"PAGER_TEMPLATE" => "",
"PAGER_DESC_NUMBERING" => "N",
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
"PAGER_SHOW_ALL" => "Y",
"FILTER_NAME" => "s",
"FILTER_FIELD_CODE" => array(),
"FILTER_PROPERTY_CODE" => array("PRICE", "KOMNAT", "OT_METRO_VID", "LIFT", "TYP_DOMA"),
"FILTER_PRICE_CODE" => array(),
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"SEF_FOLDER" => "/catalogue/",
"SEF_URL_TEMPLATES" => Array(
"section" => "#SECTION_CODE#/",
"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
"compare" => "compare.php?action=#ACTION_CODE#"
),
"VARIABLE_ALIASES" => Array(
"sections" => Array(),
"section" => Array(),
"element" => Array(),
"compare" => Array(
"ACTION_CODE" => "action"
),
)
)
);?>