getIdByCode

Довольно часто бывает нужна функция, которая возвращает ID элемента (или раздела) инфоблока по его символьному коду.

В основном это бывает нужно для организации ЧПУ: у нас есть символьный код, но нету ID элемента (раздела) для того, чтобы мы могли с ним работать, используя API-функции или же просто вызвать компонент (все компоненты для работы с инфоблоками принимают как правило обязательный параметр - ID).

Вот простейшая реализация этой функции:

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;
		}
	}
}

Функция принимает три параметра: символьный код элемента или раздела, ID инфоблока и тип (IBLOCK_SECTION или IBLOCK_ELEMENT). Функция очень простая, и довольно легко можно дописать её и под свои нужны (например, получать и символьный код самого инфоблока), или же реализовать как методы классов CIblockSection и CIblockElement.

Дата: 19 декабря 2010
Теги: getIdByCode
Добавить в закладки:

Комментарии (2)

Александр, 11 Января 2011

А не подскажете как в анонсе новости под ее заголовком вывести Раздел: название раздел ИБ ?

Максим Месилов, 13 Января 2011

да, знакомо )

1. Обработка ошибки имхо не очень удачная. Вы возвращаете NULL и выдаёт сообщение на поток. Имхо, лучше бросать исключение или возвращать явно -1 к примеру.

Потому что у вас сейчас получается, что при отсутствии символьного кода возврашается строка, которая может быть подставлена в фильтр или ещё куда и ошибку будет труднее отловить.