Получить ID элемента инфоблока вне шаблона компонента
На клиентском сайте использующем Битрикс, появилась задача получить ID текущего элемента инфоблока Новости, вне шаблона компонента, а на странице где выводятся различные инфоблоки.
Как это сделать я расскажу в этой небольшой заметке.
Как возникла такая необходимость?
Есть страница с выводом детальной новости, на ней же я хочу выводить дополнительные инфоблоки и в каком-то из них может понадобится ID открытой (текущей) новости. Например я хочу вывести в сайдбаре список из 5-ти последних новостей, а если текущая новость входит в их число, то она там продублируется, что нехорошо. Чтобы этого избежать в вызове компонента нужно поставить фильтр игнорирующий текущую новость, а это можно сделать передав в него ИД.
На сайте используется ЧПУ, адрес страницы получается такой /media/news/ID_НОВОСТИ/, а поскольку $arParams[«ELEMENT_ID»] доступен только внутри компонента, т.е. в его шаблоне, достать его от туда можно несколькими способами.
Достать ID из УРЛ
Один из способов получить ИД, достать его из УРЛ страницы. Для этого на старице, где вызывается компонент (не в шаблоне компонента), добавим такой простой код:
$id_news = explode("/", $_SERVER['REQUEST_URI']);
// В моем случае id находится в массиве под 3 номером
echo $id_news[3];
Создать глобальную переменную с ID элемента
Вариант с тем чтобы распарсить URL и получить от туда ИД мне не подошел, поскольку была в будущем возможность того, что поменяется вложенность и ИД уже будет не 3-м элементом в массиве, а каким-то другим.
Поэтому я сделал по другому. В шаблоне компонента, в детальной новости, создал глобальную переменную содержащую текущий ID:
$GLOBALS['__NEWS_ID__'] = $arResult["ID"];
И уже на самой странице, где выводятся нужные мне инфоблоки я могу использовать эту переменную:
echo "ID текущего элемента: ".$GLOBALS['__NEWS_ID__'];
Ничего сложного тут нет, но когда я столкнулся с этой задачей, сразу не сообразил как сделать.
Попробовал погуглить, но так и не нашел ответа 🙁 Все сайты как под копирку переписывают одно и тоже, как получить ID инфоблока в шаблоне компонента, хотя здесь вообще не должно возникать вопросов.
Поэтому, надеюсь, кому то эта заметка облегчит поиск 🙂