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

Поиск. Вывод списка инфоблоков в поле WHERE

00 голосов
2
В компоненте search.page в поле WHERE можно отметить и вывести типы инфоблоков. Нужно получить древовидную структуру, в которой под каждым типом будут выводиться его инфоблоки.
в компоненте тип инфоблока выводится в выпадашку таким образом: $arrDropdown[$code] = $arIBlockTypes[$part_id] 
где   $arIBlockTypes собирается гетлистом
Код
   $arIBlockTypes = array();
   if(CModule::IncludeModule("iblock"))
   {
      $rsIBlockType = CIBlockType::GetList(array("sort"=>"asc"), array("ACTIVE"=>"Y"));
      while($arIBlockType = $rsIBlockType->Fetch())
      {
         if($ar = CIBlockType::GetByIDLang($arIBlockType["ID"], LANGUAGE_ID))
         {
            $arIBlockTypes[$arIBlockType["ID"]] = $ar["~NAME"];                     

         }
      }
   }
 
$code приходит из параметров компонента. в параметрах прописано следующее

Код
"SHOW_WHERE" => array(
         "PARENT" => "VISUAL",
         "NAME" => GetMessage("SEARCH_SHOW_DROPDOWN"),
         "TYPE" => "CHECKBOX",
         "DEFAULT" => "Y",
         "REFRESH" => "Y",
      ),
      "arrWHERE" => array(
         "PARENT" => "VISUAL",
         "NAME" => GetMessage("SEARCH_WHERE_DROPDOWN"),
         "TYPE" => "LIST",
         "MULTIPLE" => "Y",
         "VALUES" => CSearchParameters::GetFilterDropDown(),
      ),
 
По CSearchParameters::GetFilterDropDown() документации не нашла.  Как создается этот набор? И где прописан GetFilterDropDown?
спросил 10 Сен, 13 от MaestroO (300 баллов)

2 Ответы

00 голосов
ап. очень срочно нужно.
DropDown собирается в модуле search в classes/general/comp_parameters.php
но после обновления все оно, как ни прискорбно, рухнет. есть ли способ обойти через компонент? и если есть - то поподробнее, пожалуйста. а если нет - то как научить модуль искать по кодам инфоблоков, а не типов?
ответил 10 Сен, 13 от MaestroO (300 баллов)
00 голосов
Вопрос закрываю. На случай, если кому понадобится:
в компоненте search.page после 165 строки
Код
$arrDropdown[$code] = $arIBlockTypes[$part_id];
втыкаем список принадлежащих типу инфоблоков

Код
while($arIBlock = $rsIBlock->Fetch()) {  $arrDropdown[$code."_".$arIBlock["ID"]] = " .. ".$arIBlock["NAME"]; }                                           

и в строке примерно 277 после

Код
            list($module_id, $part_id) = explode("_",$where,2);
добавляем разбивку для arrFilter по инфоблокам:
Код
if(preg_match("/[0-9]/i", $part_id)) list($part_id,$iblock_id) = explode("_",$part_id,2);
$arFilter["MODULE_ID"] = $module_id;
if(strlen($part_id)>0) $arFilter["PARAM1"] = $part_id;
if(strlen($iblock_id)>0) $arFilter["PARAM2"] = $iblock_id;
ответил 06 Дек, 13 от MaestroO (300 баллов)

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

0 голосов
6 ответов
спросил 11 Июль, 13 от Ukurka (120 баллов)
0 голосов
2 ответов
спросил 22 Апр, 14 от JAG (100 баллов)
0 голосов
8 ответов
спросил 11 Июнь, 13 от Nadejda (180 баллов)
0 голосов
0 ответов
спросил 19 Фев, 14 от preo (120 баллов)