Рассмотрим частную задачу:
Необходимо реализовать пример связанных списков.
Первый список формируется именами секций информационного блока, второй список формируется названиями элементов выбранной секции в первом списке в рамках одной формы.
[spoiler]
Описание решения:
Обновление второго списка в зависимости от выбранного значения первого будем осуществлять аяксом
1 В папке test в файле index.php описываем все необходимые js функции
2 Формируем первый список состоящий из имен секций определенного информационного блока
3 Размещаем на форме таблицу в которой будет осуществляться вывод списков
4 Создаем в папке test файл ajax.php в котором будет осуществляться выборка и подготовка вывода
5 Размещаем два файла в одну директорию - test
Данный пример может быть использован, как при кастомизации шаблонов компонентов, так и при реализации частной логики.
Необходимо реализовать пример связанных списков.
Первый список формируется именами секций информационного блока, второй список формируется названиями элементов выбранной секции в первом списке в рамках одной формы.
[spoiler]
Описание решения:
Обновление второго списка в зависимости от выбранного значения первого будем осуществлять аяксом
1 В папке test в файле index.php описываем все необходимые js функции
<script language="javascript"> var request; var dest; function processStateChange(){ if (request.readyState == 4){ contentDiv = document.getElementById(dest); if (request.status == 200){ response = request.responseText; contentDiv.innerHTML = response; } else { contentDiv.innerHTML = "Error: Status "+request.status; } } } function loadHTML(URL, destination){ dest = destination; if (window.XMLHttpRequest){ request = new XMLHttpRequest(); request.onreadystatechange = processStateChange; request.open("GET", URL, true); request.send(null); } else if (window.ActiveXObject){ request = new ActiveXObject("Microsoft.XMLHTTP"); if (request) { request.onreadystatechange = processStateChange; request.open("GET", URL, true); request.send(); } } } </script> |
2 Формируем первый список состоящий из имен секций определенного информационного блока
<?CModule::IncludeModule("iblock"); $IBLOCK_ID=30; $str = ""; $str .= "<select name=\"section\" onchange=\"loadHTML('/test/ajax.php?id='+this.options[this.selectedIndex].value,'label');\" >"; $str .="<option>Select</option>"; $arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y'); $db_list = CIBlockSection::GetList(Array("NAME"=>"ASC"), $arFilter, true); while($ar_result = $db_list->GetNext()) { $str .= "<option value=\"".$ar_result['ID'] ."\">".$ar_result['NAME']."</option>"; } $str .= "</select>"; ?> |
3 Размещаем на форме таблицу в которой будет осуществляться вывод списков
<form> <table border ="0"> <tr> <td><?=$str?></td><td><div id="label"><select name="element"> <option value="empty">empty</option></select><div/></td> </tr> <tr> <td><input type="submit" value="Search"></td><td></td> </tr> </table> </form> |
4 Создаем в папке test файл ajax.php в котором будет осуществляться выборка и подготовка вывода
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?> <?CModule::IncludeModule("iblock");?> <? $IBLOCK_ID=30; $arSelect = Array("ID", "NAME","IBLOCK_SECTION_ID"); $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "SECTION_ID"=>$_GET["id"]); $res = CIBlockElement::GetList(Array("NAME"=>"ASC"), $arFilter, false, false, $arSelect); $arResult = "<select name=\"element\">"; $arResult .="<option value=\"empty\">All</option>"; while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); $arResult .= "<option value=".$arFields ['ID'].">".$arFields ['NAME']."</option>"; } $arResult .="</select>"; echo $arResult; ?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?> |
5 Размещаем два файла в одну директорию - test
Данный пример может быть использован, как при кастомизации шаблонов компонентов, так и при реализации частной логики.