Довольно часто бывает нужна функция, которая возвращает ID элемента (или раздела) инфоблока по его символьному коду.
В основном это бывает нужно для организации ЧПУ: у нас есть символьный код, но нету ID элемента (раздела) для того, чтобы мы могли с ним работать, используя API-функции или же просто вызвать компонент (все компоненты для работы с инфоблоками принимают как правило обязательный параметр — ID).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function getIdByCode($code, $iblock_id, $type) { if(CModule::IncludeModule("iblock")) { if($type == 'IBLOCK_ELEMENT') { $arFilter = array("IBLOCK_ID"=>$iblock_id, "CODE" => $code); $res = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize"=>1), array('ID')); $element = $res->Fetch(); if($res->SelectedRowsCount() != 1) return '<p style="font-weight:bold;color:#ff0000">Элемент не найден</p>'; else return $element['ID']; } else if($type == 'IBLOCK_SECTION') { $res = CIBlockSection::GetList(array(), array('IBLOCK_ID' => $iblock_id, 'CODE' => $code)); $section = $res->Fetch(); if($res->SelectedRowsCount() != 1) return '<p style="font-weight:bold;color:#ff0000">Раздел не найден</p>'; else return $section['ID']; } else { echo '<p style="font-weight:bold;color:#ff0000">Укажите тип</p>'; return; } } } |