Иногда бывает необходимо вывести название, описание, элементы подразделов в текущем разделе Битрикс. Например у вас есть раздел цветы и вы бы хотели вывести списком под ним все элементы подразделов "розы", "тюльпаны" и т.д. по порядку, с внутренней сортировкой в каждом блоке. Но ключевое - это на одной единой странице "цветы".
Для этого нам нужно знать ID текущего родительского раздела. Для этого в шаблоне комплексного компонента "Новости" news -> название_шаблона -> section.php пишем следующий код:
<?$arResult['SECTION_ID'] = CIBlockFindTools::GetSectionID(
$arResult['VARIABLES']['SECTION_ID'], // ID текущего раздела
$arResult['VARIABLES']['SECTION_CODE'], //код текущего раздела (нам он не понадобится, но пусть будет)
array('IBLOCK_ID' => $arParams['IBLOCK_ID'])
);?>
На самом деле код выше необязателен, ведь в переменной $arResult['VARIABLES']['SECTION_ID'] итак содержится ID нашего текущего раздела, а код выше находит для переменной arResult['SECTION_ID'] - ID раздела по коду. Так что разницы особой нет.
<?
//фильтру указываем ID раздела и ID его инфоблока
$arFilter = array('SECTION_ID' => $arResult['VARIABLES']["SECTION_ID"]); // устанавливаем фильр - что ищем. Если у раздела родитель имеет ID равный текущему, что это наш пациент
$rsSect = CIBlockSection::GetList(Array("SORT"=>"ASC"),$arFilter, false, array('ID', 'NAME', 'SECTION_PAGE_URL', 'DETAIL_PICTURE', 'UF_PRE')); // устанавливаем сортировку найденных разделов, наши фильтр выше и массив что мы хотим вывести - ID, имя задела, его URL, картинку и допустим пользовательское свойство краткого описания (если вы задали таковое для раздела)
?>
Так как мы находимся в файле section.php комплексного компонента, то будем тянуть его настройки для выводимых элементов, т.е. массив $arParams. Получается все настройки компонента (кроме ID раздела родителя), которые вы установили для компонента при его настройки применятся на эти блоки. Итак выводим элементы:
<? while ($arSect = $rsSect->GetNext()) {
if(isset($arSect) && !empty($arSect) && $arSect != ''){
$subcheck = true;
} ?>
<div class="service-section-block">
<div class="block-title">
<h3><?=$arSect["NAME"]?></h3> // вывожу название раздела
<p><?=$arSect["UF_PRE"]?></p> // вывожу пользовательское свойство описания раздела
</div>
<?
// теперь представим, что я сошла с ума и решила для конкретного
// подраздела применить другой шаблон news.list с названием roses_more
$sectTemp = '';
if($arSect["ID"] == '50'){
$sectTemp = 'roses_more';
}
// вывожу элементы подраздела в текущего раздела
$APPLICATION->IncludeComponent(
"bitrix:news.list",
$sectTemp, // тут я этот шаблон и устанавилваю
Array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"NEWS_COUNT" => $arParams["NEWS_COUNT"],
"SORT_BY1" => $arParams["SORT_BY1"],
"SORT_ORDER1" => $arParams["SORT_ORDER1"],
"SORT_BY2" => $arParams["SORT_BY2"],
"SORT_ORDER2" => $arParams["SORT_ORDER2"],
"FIELD_CODE" => $arParams["LIST_FIELD_CODE"],
"PROPERTY_CODE" => $arParams["LIST_PROPERTY_CODE"],
"DISPLAY_PANEL" => $arParams["DISPLAY_PANEL"],
"SET_TITLE" => $arParams["SET_TITLE"],
"SET_LAST_MODIFIED" => $arParams["SET_LAST_MODIFIED"],
"MESSAGE_404" => $arParams["MESSAGE_404"],
"SET_STATUS_404" => $arParams["SET_STATUS_404"],
"SHOW_404" => $arParams["SHOW_404"],
"FILE_404" => $arParams["FILE_404"],
"INCLUDE_IBLOCK_INTO_CHAIN" => $arParams["INCLUDE_IBLOCK_INTO_CHAIN"],
"ADD_SECTIONS_CHAIN" => $arParams["ADD_SECTIONS_CHAIN"],
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_FILTER" => $arParams["CACHE_FILTER"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"DISPLAY_TOP_PAGER" => $arParams["DISPLAY_TOP_PAGER"],
"DISPLAY_BOTTOM_PAGER" => $arParams["DISPLAY_BOTTOM_PAGER"],
"PAGER_TITLE" => $arParams["PAGER_TITLE"],
"PAGER_TEMPLATE" => $arParams["PAGER_TEMPLATE"],
"PAGER_SHOW_ALWAYS" => $arParams["PAGER_SHOW_ALWAYS"],
"PAGER_DESC_NUMBERING" => $arParams["PAGER_DESC_NUMBERING"],
"PAGER_DESC_NUMBERING_CACHE_TIME" => $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"],
"PAGER_SHOW_ALL" => $arParams["PAGER_SHOW_ALL"],
"PAGER_BASE_LINK_ENABLE" => $arParams["PAGER_BASE_LINK_ENABLE"],
"PAGER_BASE_LINK" => $arParams["PAGER_BASE_LINK"],
"PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
"DISPLAY_DATE" => $arParams["DISPLAY_DATE"],
"DISPLAY_NAME" => "Y",
"DISPLAY_PICTURE" => $arParams["DISPLAY_PICTURE"],
"DISPLAY_PREVIEW_TEXT" => $arParams["DISPLAY_PREVIEW_TEXT"],
"PREVIEW_TRUNCATE_LEN" => $arParams["PREVIEW_TRUNCATE_LEN"],
"ACTIVE_DATE_FORMAT" => $arParams["LIST_ACTIVE_DATE_FORMAT"],
"USE_PERMISSIONS" => $arParams["USE_PERMISSIONS"],
"GROUP_PERMISSIONS" => $arParams["GROUP_PERMISSIONS"],
"FILTER_NAME" => $arParams["FILTER_NAME"],
"HIDE_LINK_WHEN_NO_DETAIL" => $arParams["HIDE_LINK_WHEN_NO_DETAIL"],
"CHECK_DATES" => $arParams["CHECK_DATES"],
"STRICT_SECTION_CHECK" => $arParams["STRICT_SECTION_CHECK"],
"PARENT_SECTION" => $arSect["ID"], // вот тут указывается ID подраздела который выводим
"PARENT_SECTION_CODE" => "", // ну либо можно указать код, но ID надежнее
"DETAIL_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["detail"],
"SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
"IBLOCK_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["news"],
),
$component
);?>
</div>
<?}?>
В итоге мы не только выводим наши элементы в блоках, согласно подразделам, но и можем настроить их сортировку. Кроме того, мы можем применить для каких-то подразделов отдельные шаблоны и вообще все что угодно. Если есть вопросы, то пиши в комменты. Спасибо =)