Добрый день. Я начинающий...
Имеется инфоблок, содержащий разделы (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-ек).