Добрый день. Я начинающий...
Имеется инфоблок, содержащий разделы (SECTION_ID). В этих разделах находятся элементы. Верхний уровень инфоблока тоже содержит элементы.
Мне нужно реализовать поиск элементов по заданным свойствам. Делаю с помощью комплексной компоненты bitrix:news.
Поиск элементов по их свойствам осуществляется с помощью фильтра, который входит в bitrix:news.
Вот файл template, хранящийся в catalog.filter
Когда я задаю свойства:
Выводятся они в виде текстового поля (<input type="text").
Мне нужно реализовать свойство SOURCE в виде выпадающего списка с помощью select.
В template я реализовал вывод списка в виде
Как связать этот вывод с фильтром? Чтобы фильтровал значения списка и выводил соответствующие элементы.
Кстати, в настройках инфоблока тип СПИСОК, но при этом значения списка не заданы вручную. Т.е. есть SOURCE в свойствах, имеет тип СПИСОК, а какие значения этого списка - не указано. При этом сами значения SOURCE имеются в элементах (они загружались в инфоблок с помощью специального загрузчика после распарсивания xml-ек).
Имеется инфоблок, содержащий разделы (SECTION_ID). В этих разделах находятся элементы. Верхний уровень инфоблока тоже содержит элементы.
Мне нужно реализовать поиск элементов по заданным свойствам. Делаю с помощью комплексной компоненты bitrix:news.
Код |
---|
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Поиск по фильтру"); ?><?$APPLICATION->IncludeComponent("bitrix:news", "ips", Array( "IBLOCK_TYPE" => "publications", "IBLOCK_ID" => "63", "NEWS_COUNT" => "20", "USE_SEARCH" => "N", "USE_RSS" => "N", "USE_RATING" => "N", "USE_CATEGORIES" => "N", "USE_REVIEW" => "N", "USE_FILTER" => "Y", //"FILTER_NAME" => "", "FILTER_FIELD_CODE" => array( 0 => "NAME", 1 => "PREVIEW_TEXT", 2 => "SECTION_ID", 3 => "", ), "FILTER_PROPERTY_CODE" => array( 0 => "SOURCE", 1 => "PAGER", 2 => "MAT" ), "SORT_BY1" => "ACTIVE_FROM", "SORT_ORDER1" => "DESC", "SORT_BY2" => "SORT", "SORT_ORDER2" => "ASC", "CHECK_DATES" => "Y", "SEF_MODE" => "N", "SEF_FOLDER" => "/kodeks/ips/", "AJAX_MODE" => "N", "AJAX_OPTION_SHADOW" => "Y", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "Y", "AJAX_OPTION_HISTORY" => "N", "CACHE_TYPE" => "N", "CACHE_TIME" => "3600", "CACHE_FILTER" => "N", "DISPLAY_PANEL" => "N", "SET_TITLE" => "Y", "INCLUDE_IBLOCK_INTO_CHAIN" => "Y", "ADD_SECTIONS_CHAIN" => "Y", "USE_PERMISSIONS" => "N", "PREVIEW_TRUNCATE_LEN" => "", "LIST_ACTIVE_DATE_FORMAT" => "d.m.Y", "LIST_FIELD_CODE" => array( 0 => "", 1 => "", 2 => "", ), "LIST_PROPERTY_CODE" => array( 0 => "SOURCE", ), "HIDE_LINK_WHEN_NO_DETAIL" => "N", "DISPLAY_NAME" => "Y", "META_KEYWORDS" => "-", "META_DESCRIPTION" => "-", "DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y", "DETAIL_FIELD_CODE" => array( 0 => "", 1 => "", 2 => "", ), "DETAIL_PROPERTY_CODE" => array( 0 => "", 1 => "", 2 => "", ), "DETAIL_DISPLAY_TOP_PAGER" => "N", "DETAIL_DISPLAY_BOTTOM_PAGER" => "Y", "DETAIL_PAGER_TITLE" => "Страница", "DETAIL_PAGER_TEMPLATE" => "", "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", "DISPLAY_DATE" => "Y", "DISPLAY_PICTURE" => "Y", "DISPLAY_PREVIEW_TEXT" => "Y", "VARIABLE_ALIASES" => array( "SECTION_ID" => "SECTION_ID", "ELEMENT_ID" => "ELEMENT_ID", ) ) ); ?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?> |
Поиск элементов по их свойствам осуществляется с помощью фильтра, который входит в bitrix:news.
Вот файл template, хранящийся в catalog.filter
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <fo rm name="<?echo $arResult["FILTER_NAME"]."_form"?>" action="<?echo $arResult["FORM_ACTION"]?>" method="get"> <?foreach($arResult["ITEMS"] as $arItem): if(array_key_exists("HIDDEN", $arItem)): echo $arItem["INPUT"]; endif; endforeach;?> <table class="data-table" cellspacing="5" cellpadding="2"> <thead> <tr> <td colspan="2" align="center"><?echo "<b>"."Поисковая система по свойствам элементов"."</b>"?></td> </tr> </thead> <tbody> <? $strIBlock_ID = 63; CModule::IncludeModule("iblock"); $sListSource = ""; $arFilter = Array("IBLOCK_ID"=>$strIBlock_ID); $aGroup = Array("PROPERTY_SOURCE"); $res = CIBlockElement::GetList(Array("PROPERTY_SOURCE"=>"ASC"), $arFilter, $aGroup, false, false); while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); if (trim($arFields['PROPERTY_SOURCE_VALUE']) == "") continue; $sel = ""; if(in_array($arFields['PROPERTY_SOURCE_VALUE'], $_POST['source'])) $sel = " selected"; $sListSource .= "<option".$sel.">".$arFields['PROPERTY_SOURCE_VALUE']."</option>"; } ?> <select size="10" name="source[]" multiple="multiple"> <?=$sListSource;?> </select> <?foreach($arResult["ITEMS"] as $arItem):?> <?if(!array_key_exists("HIDDEN", $arItem)):?> <tr> <td valign="top"><b><?=$arItem["NAME"]?>:<?echo "<br><br>"?></b></td> <td valign="top"><?=$arItem["INPUT"]; echo "<br><br>"?></td> </tr> <?endif?> <?endforeach;?> </tbody> <tfoot> <tr> <td colspan="2"> <input type="s ubmit" name="set_filter" value="Поиск" /><input type="hidden" name="set_filter" value="Y" /> <input type="s ubmit" name="del_filter" value="Очистить" /></td> </tr> </tfoot> </table> </form> |
Код |
---|
"FILTER_PROPERTY_CODE" => array( 0 => "SOURCE", 1 => "PAGER", 2 => "MAT", |
Мне нужно реализовать свойство SOURCE в виде выпадающего списка с помощью select.
В template я реализовал вывод списка в виде
Код |
---|
CIBlockElement::GetList |
Кстати, в настройках инфоблока тип СПИСОК, но при этом значения списка не заданы вручную. Т.е. есть SOURCE в свойствах, имеет тип СПИСОК, а какие значения этого списка - не указано. При этом сами значения SOURCE имеются в элементах (они загружались в инфоблок с помощью специального загрузчика после распарсивания xml-ек).