Есть стандартная форма добавления элементов в Инфоблок.
В ней есть возможность выбирать раздел инфоблока.
Проблема заключается в том, что разделов и подразделов слишком много и их неудобно искать прокручивая выпадающий список.
В настройках инфоблока есть нужный функционал - "Интерфейс привязки элемента к разделам: ВЫПАДАЮЩИЕ СПИСКИ"
т.е. при выборе раздела в первом списке во втором списке select можно выбрать его подразделы. Получается каскад выпадающих списков.
Но если добавлять элементы Инфоблока с публичной части при помощи компонента iblock.element.add.form такого не предусмотренно. Там получается все в одном списке.
За вывод списка разделов инфоблока отвечает как я понимаю следующий код.
[CODE]case "L":
if ($arResult["PROPERTY_LIST_FULL"][$propertyID]["LIST_TYPE"] == "C")
$type = $arResult["PROPERTY_LIST_FULL"][$propertyID]["MULTIPLE"] == "Y" ? "checkbox" : "radio";
else
$type = $arResult["PROPERTY_LIST_FULL"][$propertyID]["MULTIPLE"] == "Y" ? "multiselect" : "dropdown";
switch ($type):
case "checkbox":
case "radio":
//echo "<pre>"; print_r($arResult["PROPERTY_LIST_FULL"][$propertyID]); echo "</pre>";
foreach ($arResult["PROPERTY_LIST_FULL"][$propertyID]["ENUM"] as $key => $arEnum)
{
$checked = false;
if ($arParams["ID"] > 0 || count($arResult["ERRORS"]) > 0)
{
if (is_array($arResult["ELEMENT_PROPERTIES"][$propertyID]))
{
foreach ($arResult["ELEMENT_PROPERTIES"][$propertyID] as $arElEnum)
{
if ($arElEnum["VALUE"] == $key) {$checked = true; break;}
}
}
}
else
{
if ($arEnum["DEF"] == "Y") $checked = true;
}
?>
<input type="<?=$type?>" name="PROPERTY[<?=$propertyID?>]<?=$type == "checkbox" ? "[".$key."]" : ""?>" value="<?=$key?>" id="property_<?=$key?>"<?=$checked ? " checked=\"checked\"" : ""?> /><label for="property_<?=$key?>"><?=$arEnum["VALUE"]?></label><br />
<?
}
break;
case "dropdown":
case "multiselect":
?>
<select name="PROPERTY[<?=$propertyID?>]<?=$type=="multiselect" ? "[]\" size=\"".$arResult["PROPERTY_LIST_FULL"][$propertyID]["ROW_COUNT"]."\" multiple=\"multiple" : ""?>">
<?
if (intval($propertyID) > 0) $sKey = "ELEMENT_PROPERTIES";
else $sKey = "ELEMENT";
foreach ($arResult["PROPERTY_LIST_FULL"][$propertyID]["ENUM"] as $key => $arEnum)
{
$checked = false;
if ($arParams["ID"] > 0 || count($arResult["ERRORS"]) > 0)
{
foreach ($arResult[$sKey][$propertyID] as $elKey => $arElEnum)
{
if ($key == $arElEnum["VALUE"]) {$checked = true; break;}
}
}
else
{
if ($arEnum["DEF"] == "Y") $checked = true;
}
?>
<option value="<?=$key?>" <?=$checked ? " selected=\"selected\"" : ""?>><?=$arEnum["VALUE"]?></option>
<?
}
?>
</select>
[/CODE]а именно нижняя его часть между тегами select.
То есть любые свойства которые выводяться под кодом типа свойств инфоблока "L — Список" будут выводиться по данному коду.
Я не пойму вот что - как прописать каскад выпадающих списков в коде шаблона? Под каким кодом типа свойств инфоблока?
И вообще возможно ли вывести каскад выпадающих списков затронув только шаблон компонента.
В ней есть возможность выбирать раздел инфоблока.
Проблема заключается в том, что разделов и подразделов слишком много и их неудобно искать прокручивая выпадающий список.
В настройках инфоблока есть нужный функционал - "Интерфейс привязки элемента к разделам: ВЫПАДАЮЩИЕ СПИСКИ"
т.е. при выборе раздела в первом списке во втором списке select можно выбрать его подразделы. Получается каскад выпадающих списков.
Но если добавлять элементы Инфоблока с публичной части при помощи компонента iblock.element.add.form такого не предусмотренно. Там получается все в одном списке.
За вывод списка разделов инфоблока отвечает как я понимаю следующий код.
[CODE]case "L":
if ($arResult["PROPERTY_LIST_FULL"][$propertyID]["LIST_TYPE"] == "C")
$type = $arResult["PROPERTY_LIST_FULL"][$propertyID]["MULTIPLE"] == "Y" ? "checkbox" : "radio";
else
$type = $arResult["PROPERTY_LIST_FULL"][$propertyID]["MULTIPLE"] == "Y" ? "multiselect" : "dropdown";
switch ($type):
case "checkbox":
case "radio":
//echo "<pre>"; print_r($arResult["PROPERTY_LIST_FULL"][$propertyID]); echo "</pre>";
foreach ($arResult["PROPERTY_LIST_FULL"][$propertyID]["ENUM"] as $key => $arEnum)
{
$checked = false;
if ($arParams["ID"] > 0 || count($arResult["ERRORS"]) > 0)
{
if (is_array($arResult["ELEMENT_PROPERTIES"][$propertyID]))
{
foreach ($arResult["ELEMENT_PROPERTIES"][$propertyID] as $arElEnum)
{
if ($arElEnum["VALUE"] == $key) {$checked = true; break;}
}
}
}
else
{
if ($arEnum["DEF"] == "Y") $checked = true;
}
?>
<input type="<?=$type?>" name="PROPERTY[<?=$propertyID?>]<?=$type == "checkbox" ? "[".$key."]" : ""?>" value="<?=$key?>" id="property_<?=$key?>"<?=$checked ? " checked=\"checked\"" : ""?> /><label for="property_<?=$key?>"><?=$arEnum["VALUE"]?></label><br />
<?
}
break;
case "dropdown":
case "multiselect":
?>
<select name="PROPERTY[<?=$propertyID?>]<?=$type=="multiselect" ? "[]\" size=\"".$arResult["PROPERTY_LIST_FULL"][$propertyID]["ROW_COUNT"]."\" multiple=\"multiple" : ""?>">
<?
if (intval($propertyID) > 0) $sKey = "ELEMENT_PROPERTIES";
else $sKey = "ELEMENT";
foreach ($arResult["PROPERTY_LIST_FULL"][$propertyID]["ENUM"] as $key => $arEnum)
{
$checked = false;
if ($arParams["ID"] > 0 || count($arResult["ERRORS"]) > 0)
{
foreach ($arResult[$sKey][$propertyID] as $elKey => $arElEnum)
{
if ($key == $arElEnum["VALUE"]) {$checked = true; break;}
}
}
else
{
if ($arEnum["DEF"] == "Y") $checked = true;
}
?>
<option value="<?=$key?>" <?=$checked ? " selected=\"selected\"" : ""?>><?=$arEnum["VALUE"]?></option>
<?
}
?>
</select>
[/CODE]а именно нижняя его часть между тегами select.
То есть любые свойства которые выводяться под кодом типа свойств инфоблока "L — Список" будут выводиться по данному коду.
Я не пойму вот что - как прописать каскад выпадающих списков в коде шаблона? Под каким кодом типа свойств инфоблока?
И вообще возможно ли вывести каскад выпадающих списков затронув только шаблон компонента.