Рассмотрим частную задачу:
Необходимо реализовать пример связанных списков.
Первый список формируется именами секций информационного блока, второй список формируется названиями элементов выбранной секции в первом списке в рамках одной формы.
[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
Данный пример может быть использован, как при кастомизации шаблонов компонентов, так и при реализации частной логики.