Вывод содержимого свойства типа «Привязка к разделам» в Битриксе

Вывод содержимого свойства типа «Привязка к разделам» в Битриксе

Ниже рассматривается процесс вывода содержимого свойства типа «Привязка к разделам» на детальной странице элемента инфоблока. Несмотря на то, что данная процедура не выходит за рамки стандартного АПИ Битрикса, в некоторых случаях, реализация вывода может доставить некоторые сложности. К примеру, автор, встречал какие-то совершенно кастомные решения (вплоть до реализации на базе прямого запроса к БД (!!!)) на рабочих проектах.

Что представляет собой тип свойства «Привязка к разделам?»

Данное свойство связывает элемент текущего инфоблока с разделом иного инфоблока. В данном примере это связь элементов инфоблока «Услуги» и разделов инфоблока «Вопросы и ответы», где элемент «Вопросов и ответов» — это вопрос и ответ на него.

К слову, с этим свойством связан популярный баг, когда привязанный отдел не отображается, хотя на самом деле это не так (Это можно проверить, выведя просмотрев содержимое массива, связанное с данным свойством, например):

 

Как вывести содержимое данного свойства на детальной странице элемента?

Достаточно странно упоминать об этом, но если попробовать вывести содержимое свойства данного типа через «echo $arResult[‘DISPLAY_PROPERTIES’][‘Название_свойства’][‘VALUE’];», то получите вы только ID раздела связанного инфоблока. Как следствие, чтобы вывести в шаблон элемента содержимое, нужно воспользоваться CIBlockElement::GetList();

В данном примере используется вкрапления HTML, что, в данном случае необходимо для наглядности примера вывода. Собственно, вывод будет выглядеть следующим образом (предполагается, что мы хотим вывести содержимое в виде «заголовок» + «текст», без какой-либо верстки):

<?
if($arResult['DISPLAY_PROPERTIES']['Название_Свойства']['VALUE']){
$arSelect = Array("PREVIEW_TEXT", "DETAIL_TEXT");
$arFilter = Array("IBLOCK_ID"=>32, "IBLOCK_SECTION_ID" => $arResult['DISPLAY_PROPERTIES']['Название_Свойства']['VALUE']);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);

while($ob = $res->GetNextElement())
{
 $arFields = $ob->GetFields();
?>
<h3><?=$arFields["PREVIEW_TEXT"];?></h3>
<p><?=$arFields["DETAIL_TEXT"];?></p>
<?
}
}
?>

В целом, это все: В результате данного кода в шаблон будет выведено содержимое данного свойства. В данном случае, это описание для анонса и детальное описание, которые выступают в данном примере вопросом и ответом на него. Если требуется вывести больше связанных данных, то нужно расширить массив $arSelect.