Из данной статьи вы узнаете как можно построить навигационную цепочку зная один лишь символьный код раздела.
Как по символьному коду раздела построить хлебные крошки в Битриксе
Перед прочтением данной статьи советую почитать Как добавить в хлебные крошки название. Прочитали? Тогда идем дальше.
В старых компонентах бывали случаи, когда в массиве хранится только символьный код раздела. Данная переменная называлась $arResult[‘VARIABLES’][‘SECTION_CODE’].
Если на вашем сайте символьные коды разделов уникальны (что рекомендуется всегда выставлять в настройках инфоблока), то проблем не будет. Для начала находим файл section.php вашего компонента.
$rsSect = CIBlockSection::GetList( array(), array('IBLOCK_ID' => $arParams["IBLOCK_ID"], '=CODE' => $arResult['VARIABLES']['SECTION_CODE']), false, array('ID', 'NAME', 'UF_TEXT_TOP', 'DEPTH_LEVEL', 'SECTION_PAGE_URL') ); if ( $arSect = $rsSect->GetNext() ) { $SEC_LVL = $arSect['DEPTH_LEVEL']; $SEC_NAME = $arSect['NAME']; $SEC_URL = $arSect['SECTION_PAGE_URL']; }
Обратите внимание на строчку ‘=CODE’ => $arResult[‘VARIABLES’][‘SECTION_CODE’]. Также, мы используем if, вместо привычного цикла while, т.к. нам нужны данные только по одному разделу.
Записываем 3 переменные, которые нам понадобятся:
– уровень вложенности, DEPTH_LEVEL
– имя, NAME
– ссылка на раздел, SECTION_PAGE_URL
ВАЖНО. Перед следующим этапом отключите в своем компоненте настройку “добавлять раздел\инфоблок в цепочку навигации”
В самом конце файла section.php добавляем код:
<? if ($SEC_LVL >= 2) { $rsSect = CIBlockSection::GetList( array(), array('IBLOCK_ID' => $arParams["IBLOCK_ID"], '=CODE' => $arResult['VARIABLES']['SECTION_CODE']), false, array('ID', 'NAME', 'SECTION_PAGE_URL') ); while ( $arSect2 = $rsSect->GetNext() ) { if (strstr($curSectionURL, $arSect2['SECTION_PAGE_URL'])) { $SEC_NAME = $arSect2['NAME']; $SEC_URL = $arSect2['SECTION_PAGE_URL']; break; } } $result = array(); $ibsTreeResource = CIBlockSection::GetNavChain( false, $arSect2['ID'], array( "ID", "NAME") ); $c = 0; while($sectionItem = $ibsTreeResource->Fetch()){ $result[$c]['NAME'] = $sectionItem['NAME']; $res = CIBlockSection::GetByID($sectionItem["ID"]); if($ar_res = $res->GetNext()) { $url = $ar_res['SECTION_PAGE_URL']; } $result[$c]['URL'] = $url; $c++; } foreach ($result as $arItem) { $APPLICATION->AddChainItem($arItem['NAME'], $arItem['URL']); } } else { $APPLICATION->AddChainItem($SEC_NAME, $SEC_URL); } ?>
При помощи CIBlockSection::GetNavChain выстраиваем полный путь до родительского раздела (если это подраздел), и добавляем через цикл в цепочку навигации Название и Ссылку. Если эже это раздел 1-го уровня, то просто добавляем его Название и Ссылку.
Например, наш код равен armstrong. Полученный результат выглядит приблизительно следующим образом:
Каталог / Офисные светодиодные светильники / Светильники Армстронг
URL при этом имеет вид:
/catalog/ofisnye-svetilniki/armstrong/
Ссылка на Каталог проставляется сама.
Офисные светодиодные светильники – это главный раздел.
Светильники Армстронг – раздел, в котором мы сейчас находимся. Компонент хлебных крошек не ставит ссылку на него.
Вот и всё, надеюсь у вас всё получилось :). ПС код не идеален и применялся для старых проектов, его можно улучшить.