[QUOTE]Анатолий Ветринцев написал:
Пять лет прошло, может кому то поможет, сам запарился пока искал. Стандартный метод спутывал элементы с разделами.
Написал свое короткое пользовательское свойство.
Мне просто нужна была ссылка на любой раздел любого ИБ (даже своего) чтобы подтянуть в шаблоне соответствующую ссылку и вывести ее.
По сути оно хранит число, но дает удобный интерфейс для выбора. и работает в множественном режиме.
Вставляете этот код (или инклудите) в bitrix/php_interface/init.php и в списке типов свойств ИБ появляется "Ссылка на раздел" :
[CODE]AddEventHandler("iblock", "OnIBlockPropertyBuildList", array("CUserTypeSectionLink", "GetUserTypeDescription"));
class CUserTypeSectionLink
{ ....[/CODE][/QUOTE]
Спасибо огромное, годы идут, пользователи сами прокачивают битрикс, предложу свой вариант данного кода, удобная иерархия разделов в списке четыре уровня вложенности если у вас больше уровней можно добавлять хоть до бесконечности, если меньше то лишний можно убрать:
[QUOTE]public function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
$arFilter = array(
'ACTIVE' => 'Y',
'IBLOCK_ID' => ИД инфоблока каталога,
'GLOBAL_ACTIVE'=>'Y',
);
$arSelect = array('IBLOCK_ID','ID','NAME','DEPTH_LEVEL','IBLOCK_SECTION_ID');
$arOrder = array('DEPTH_LEVEL'=>'ASC','SORT'=>'ASC');
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);
$sectionLinc = array();
$arResult['ROOT'] = array();
$sectionLinc[0] = &$arResult['ROOT'];
while($arSection = $rsSections->GetNext()) {
$sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']] = $arSection;
$sectionLinc[$arSection['ID']] = &$sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']];
}
$optionsHTML='<option value="">( не выбрано )</option>';
foreach($sectionLinc[0]['CHILD'] as $ib){
$optionsHTML .= '<option value="' . $ib['ID'] . '"' . ($value["VALUE"] == $ib['ID'] ? ' selected' : '') . '> <b>[' . $ib['ID'] . ']</b> ' . $ib['NAME'] . '</option>'; //Первый уровень
if(isset($ib['CHILD']) && !empty($ib['CHILD'])){
foreach($ib['CHILD'] as $ibfCH){
$optionsHTML .= '<option value="' . $ibfCH['ID'] . '"' . ($value["VALUE"] == $ibfCH['ID'] ? ' selected' : '') . '> <b> . [' . $ibfCH['ID'] . ']</b> ' . $ibfCH['NAME'] . '</option>'; //Второй уровень
if(isset($ibfCH['CHILD']) && !empty($ibfCH['CHILD'])){
foreach($ibfCH['CHILD'] as $ibsCH){
$optionsHTML .= '<option value="' . $ibsCH['ID'] . '"' . ($value["VALUE"] == $ibsCH['ID'] ? ' selected' : '') . '> <b> . . [' . $ibsCH['ID'] . ']</b> ' . $ibsCH['NAME'] . '</option>'; //Третий уровень
if(isset($ibsCH['CHILD']) && !empty($ibsCH['CHILD'])){
foreach($ibsCH['CHILD'] as $ibtCH){
$optionsHTML .= '<option value="' . $ibtCH['ID'] . '"' . ($value["VALUE"] == $ibtCH['ID'] ? ' selected' : '') . '> <b> . . . [' . $ibtCH['ID'] . ']</b> ' . $ibtCH['NAME'] . '</option>'; //Четвёртый уровень
if(isset($ibtCH['CHILD']) && !empty($ibtCH['CHILD'])){
foreach($ibtCH['CHILD'] as $ibfoCH){
$optionsHTML .= '<option value="' . $ibfoCH['ID'] . '"' . ($value["VALUE"] == $ibfoCH['ID'] ? ' selected' : '') . '> <b> . . . . [' . $ibfoCH['ID'] . ']</b> ' . $ibfoCH['NAME'] . '</option>'; //Пятый уровень
}
}
}
}
}
}
}
}
}
unset($sectionLinc);
return '<select name="'.$strHTMLControlName["VALUE"].'">'.$optionsHTML.'</select>';
}[/QUOTE]
Пять лет прошло, может кому то поможет, сам запарился пока искал. Стандартный метод спутывал элементы с разделами.
Написал свое короткое пользовательское свойство.
Мне просто нужна была ссылка на любой раздел любого ИБ (даже своего) чтобы подтянуть в шаблоне соответствующую ссылку и вывести ее.
По сути оно хранит число, но дает удобный интерфейс для выбора. и работает в множественном режиме.
Вставляете этот код (или инклудите) в bitrix/php_interface/init.php и в списке типов свойств ИБ появляется "Ссылка на раздел" :
[CODE]AddEventHandler("iblock", "OnIBlockPropertyBuildList", array("CUserTypeSectionLink", "GetUserTypeDescription"));
class CUserTypeSectionLink
{ ....[/CODE][/QUOTE]
Спасибо огромное, годы идут, пользователи сами прокачивают битрикс, предложу свой вариант данного кода, удобная иерархия разделов в списке четыре уровня вложенности если у вас больше уровней можно добавлять хоть до бесконечности, если меньше то лишний можно убрать:
[QUOTE]public function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
$arFilter = array(
'ACTIVE' => 'Y',
'IBLOCK_ID' => ИД инфоблока каталога,
'GLOBAL_ACTIVE'=>'Y',
);
$arSelect = array('IBLOCK_ID','ID','NAME','DEPTH_LEVEL','IBLOCK_SECTION_ID');
$arOrder = array('DEPTH_LEVEL'=>'ASC','SORT'=>'ASC');
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);
$sectionLinc = array();
$arResult['ROOT'] = array();
$sectionLinc[0] = &$arResult['ROOT'];
while($arSection = $rsSections->GetNext()) {
$sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']] = $arSection;
$sectionLinc[$arSection['ID']] = &$sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']];
}
$optionsHTML='<option value="">( не выбрано )</option>';
foreach($sectionLinc[0]['CHILD'] as $ib){
$optionsHTML .= '<option value="' . $ib['ID'] . '"' . ($value["VALUE"] == $ib['ID'] ? ' selected' : '') . '> <b>[' . $ib['ID'] . ']</b> ' . $ib['NAME'] . '</option>'; //Первый уровень
if(isset($ib['CHILD']) && !empty($ib['CHILD'])){
foreach($ib['CHILD'] as $ibfCH){
$optionsHTML .= '<option value="' . $ibfCH['ID'] . '"' . ($value["VALUE"] == $ibfCH['ID'] ? ' selected' : '') . '> <b> . [' . $ibfCH['ID'] . ']</b> ' . $ibfCH['NAME'] . '</option>'; //Второй уровень
if(isset($ibfCH['CHILD']) && !empty($ibfCH['CHILD'])){
foreach($ibfCH['CHILD'] as $ibsCH){
$optionsHTML .= '<option value="' . $ibsCH['ID'] . '"' . ($value["VALUE"] == $ibsCH['ID'] ? ' selected' : '') . '> <b> . . [' . $ibsCH['ID'] . ']</b> ' . $ibsCH['NAME'] . '</option>'; //Третий уровень
if(isset($ibsCH['CHILD']) && !empty($ibsCH['CHILD'])){
foreach($ibsCH['CHILD'] as $ibtCH){
$optionsHTML .= '<option value="' . $ibtCH['ID'] . '"' . ($value["VALUE"] == $ibtCH['ID'] ? ' selected' : '') . '> <b> . . . [' . $ibtCH['ID'] . ']</b> ' . $ibtCH['NAME'] . '</option>'; //Четвёртый уровень
if(isset($ibtCH['CHILD']) && !empty($ibtCH['CHILD'])){
foreach($ibtCH['CHILD'] as $ibfoCH){
$optionsHTML .= '<option value="' . $ibfoCH['ID'] . '"' . ($value["VALUE"] == $ibfoCH['ID'] ? ' selected' : '') . '> <b> . . . . [' . $ibfoCH['ID'] . ']</b> ' . $ibfoCH['NAME'] . '</option>'; //Пятый уровень
}
}
}
}
}
}
}
}
}
unset($sectionLinc);
return '<select name="'.$strHTMLControlName["VALUE"].'">'.$optionsHTML.'</select>';
}[/QUOTE]