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

Создание динамического Select

00 голосов
2
Пытаюсь сделать выбор из инфоблоков.
есть инфоблок "Страны" в нем разделы "Города" и элементы "отели"

Нашел в сети скрипт, и переделал под битрикс. На практике скрипт не работает. Где ошибка(и)? Помогите исправить.

Код
<?
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("content-type: application/x-javascript; charset=windows-1251");
    $data=$_GET['data'];
    $val=$_GET['val'];
  
    if ($data=='country') { 
         echo "<select name='country' onChange=\"dochange('sity', this.value), dochange('hotels', this.value)\">\n";
         echo "<option value=''>-----Выбрать-----</option>\n";
$resCountry = CIBlock::GetList(Array(),Array('TYPE'=>'country','ACTIVE'=>'Y',));

         while($ar_res = $resCountry->Fetch()){
              echo "<option value=\"$ar_res['IBLOCK_ID']\">$ar_res['NAME']</option> \n";
     }
         }
 
if ($data=='sity') {
         echo "<select name='sity' multiple>\n";
$resSity = CIBlockSection::GetList(Array(), Array("IBLOCK_ID"=>IntVal($val)));
         while($ar_result = $db_list->GetNext())  
       {    echo "<option value=\"$ar_result['ID']\">$ar_result['NAME']</option> \n";  }
              
     }
         }
  
   
 
else if ($data=='hotel') {
         echo "<select name='hotel' multiple>\n";
$res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IntVal($val), "ACTIVE"=>"Y");
while($ar_fields = $res->GetNext())
{  
echo "<option value=\"$ar_fields['ID']\">$ar_fields['NAME']</option> \n";
}                                
    } 
  echo "</select>\n"; 
?>


и сам код страницы:

Код
<script language=Javascript>

function Inint_AJAX() {
  try { return new ActiveXObject(\"Msxml2.XMLHTTP\");  } catch(e) {} //IE
  try { return new ActiveXObject(\"Microsoft.XMLHTTP\"); } catch(e) {} //IE
  try { return new XMLHttpRequest();          } catch(e) {} //Native Javascript
  alert(\"XMLHttpRequest not supported\");
  return null;
};

function dochange(src, val) {
    var req = Inint_AJAX();
    req.onreadystatechange = function () { 
         if (req.readyState==4) {
              if (req.status==200) {
                   document.getElementById(src).innerHTML=req.responseText; //
              } 
         }
    };
    req.open(\"GET\", \"/selector.php?data=\"+src+\"&val=\"+val); //
    req.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded;charset=windows-1251\"); // set Header
    req.send(null); //
}

window.onLoad=dochange('country', -1); 
</script>
 <form name="searchbofar" action="/ofc" method="get">
<input name="action" type="hidden" value="index" /> 
<select name="country" id="country"> 
<option value="">Выберите страну</option></select> 
<select name="sity" id="sity"> 
<option value="">Выберите город</option></select> 
<select name="hotel" id="hotel"> 
<option value="">Выберите отель</option></select> 
</form>
спросил 10 Май, 13 от EMkill (120 баллов)

2 Ответы

00 голосов
Пролог битрикса не подключен.
В вашем случае, видимо, нужно делать так:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

Модуль инфоблоков не подключен.
CModule::IncludeModule('iblock');

В первом вызове CIBlock::GetList() треш в $arFilter:
Upd: вот здесь прогнал, прошу прощения.
ответил 10 Май, 13 от Ly (4,580 баллов)
00 голосов
Цитата
Евгений Торшин пишет:
$resSity = CIBlockSection::GetList(Array(), Array("IBLOCK_ID"=>IntVal($val)));
while($ar_result = $db_list->GetNext())

Вот здесь ещё фигня. Вы делаете выборку в переменную $resSity, а фетчите $db_list
ответил 11 Май, 13 от Ly (4,580 баллов)

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

0 голосов
3 ответов
спросил 08 Март, 14 от InFroO (160 баллов)
0 голосов
0 ответов
0 голосов
7 ответов
спросил 13 Янв, 13 от Storitell (340 баллов)
+1 голос
2 ответов
+1 голос
2 ответов