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

Поиск по доп. свойству ЦЕНА

00 голосов
1
Добрый день! Подскажите каким образом организовать поиск по дополнительному свойству ЦЕНА. Дополнительное свойство создано в инф.блоке. Причём необходимо сделать два поля "ОТ" и "ДО"
спросил 01 Июнь, 15 от аноним

1 Ответ

00 голосов
$arFilter = array(
    "IBLOCK_ID" => $IBLOCK_ID,
    "INCLUDE_SUBSECTIONS" => "Y",
    "<PROPERTY_PRICE" => 50000,
    ">PROPERTY_PRICE" => 500,
);
ответил 01 Июнь, 15 от root (25,590 баллов)
Я подключил каталог, имеется вот такая конструкция, но я не совсем понимаю куда ваш код нужно вставить.

<?$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"
            ),
        )
    )
);?>
Похоже ответа так не дождусь. Где именно нужно прописывать массив, в каком файле?
https://dev.1c-bitrix.ru/user_help/content/iblock/components_2/catalog/catalog.php
Смотрите всё, что связано со словом FILTER, массив передаётся через параметр FILTER_NAME.
Я так понял, что фильтрация возможна с помощью дополнительного запроса и вызова функции 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

Передача данных

$s= array(
    "<PROPERTY_PRICE" => intval($_GET['price_do']),
    ">PROPERTY_PRICE" => intval($_GET['price_ot'])
);

И соответственно весь код который был в первом посте!
Ваш код выглядит верно, но как всегда могут быть какие-то нюансы, которые всё меняют.         "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;

$s=array("<PROPERTY_PRICE" => $do,">PROPERTY_PRICE" => $ot);


?>

<?$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_NOTES" => "",
        "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("KOMNAT","OT_METRO_VID","LIFT","TYP_DOMA"),
        "FILTER_PRICE_CODE" => array(),
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "AJAX_OPTION_ADDITIONAL" => "",
        "SEF_FOLDER" => "/catalogue/",
        "SEF_URL_TEMPLATES" => Array(
            "sections" => "",
            "section" => "#SECTION_CODE#/",
            "element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
            "compare" => "compare.php?action=#ACTION_CODE#"
        ),
        "VARIABLE_ALIASES" => Array(
            "section" => Array(),
            "element" => Array(),
            "compare" => Array(
                "ACTION_CODE" => "action"
            ),
            "sections" => Array(),
        )
    )
);?>  





А это получаемый GET азпрос при нажатие на кнопку фильтр.

?price_ot=2000&price_do=2000&s_pf[KOMNAT]=&s_pf[OT_METRO_VID]=&s_pf[LIFT]=&s_pf[TYP_DOMA]=&set_filter=Фильтр&set_filter=Y

Не совсем понимаю зачем передавать изначально массив, если он берётся из GET запроса?

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

0 голосов
1 ответ
спросил 20 Июль, 15 от Rattlesneyk (140 баллов)
0 голосов
1 ответ
0 голосов
2 ответов
0 голосов
1 ответ