Выбор зоны поиска по инфоблоку для компонента search.page

В базовой версии есть возможность выбора типа инфоблоков для поиска, но нет возможности указать конкретный.

В компонент, а лучше его копию в своем пространстве имен, вносим

Файл result_modifier.php нужного шаблона:

$ElemIDS=array();
$IBLOCKIDS=array();
foreach ($arResult["SEARCH"] as $key=>$value){
   array_push($ElemIDS,$value["ITEM_ID"]);
}
$arSelect = Array("IBLOCK_ID");
$arFilter = Array("ID"=>$ElemIDS);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while ($ob = $res->GetNextElement()) {
   $arFields = $ob->GetFields();
   array_push($IBLOCKIDS,$arFields["IBLOCK_ID"]);
}
$IBLOCKIDS=array_unique($IBLOCKIDS);
foreach ($IBLOCKIDS as $key=>$value){
   $res = CIBlock::GetList(
      Array(),
      Array(
         'TYPE'=>'1c_catalog',
         'SITE_ID'=>SITE_ID,
         'ACTIVE'=>'Y',
         "ID"=>$value
      ), true
   );
   $ar_res = $res->Fetch();
   $arResult["IBLOCKS"][$value]=$ar_res['NAME'];
}

В файл самого шаблона template.php:

<?if($arParams["SHOW_WHERE"]):?>
   <select class="form-control col-sm-12" name="IBLOCK" onchange="submit();">
      <option value="0">Без ограничения</option>
      <?foreach ($arResult["IBLOCKS"]as $key=>$value):?>
         <option value="<?=$key?>" <?if ($_REQUEST["IBLOCK"]==$key)echo "selected"?>>Показать результат из раздела &quot;<?=$value?>&quot;</option>
      <?endforeach?>
   </select>
<?endif;?>

В файл самого компонента:

перед

$exFILTER = CSearchParameters::ConvertParamsToFilter($arParams, "arrFILTER");

строку

if ($_REQUEST["IBLOCK"])$arParams["arrFILTER_iblock_1c_catalog"]=$_REQUEST["IBLOCK"];

Наслаждаемся.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *