mail@vecdev.ru

Вывести подразделы текущего раздела в Битрикс

Иногда бывает необходимо вывести название, описание, элементы подразделов в текущем разделе Битрикс. Например у вас есть раздел цветы и вы бы хотели вывести списком под ним все элементы подразделов "розы", "тюльпаны" и т.д. по порядку, с внутренней сортировкой в каждом блоке. Но ключевое - это на одной единой странице "цветы".

Для этого нам нужно знать 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>
<?}?>

В итоге мы не только выводим наши элементы в блоках, согласно подразделам, но и можем настроить их сортировку. Кроме того, мы можем применить для каких-то подразделов отдельные шаблоны и вообще все что угодно. Если есть вопросы, то пиши в комменты. Спасибо =)

Частный разработчик сайтов Vector Dev
Комментарии
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
 
Guest
18.08.2022
Getlist, а что если в подразделе все элементы не активны, как его исключить)? Сам подраздел активен, вот не хочу я его выключать.