в шаблоне компонента меню получаем сиблингов примерно так (тут я учел только определенный уровень вложенности, не универсально):
Код |
---|
<?
$selectedID = 0;
$siblings = [];
$dropdownItems = [];
foreach ($arResult['ALL_ITEMS'] as $id => $item)
{
$selectedID = ('Y' == $item['SELECTED']) ? $id : $selectedID;
}
if (0 < $selectedID)
{
foreach ($arResult['MENU_STRUCTURE'] as $firstLvl)
{
$tmp = array_keys($firstLvl[1]);
if (isset($firstLvl[1]) && in_array($selectedID, $tmp))
{
unset($firstLvl[1][$selectedID]);
$siblings = array_keys($firstLvl[1]);
break;
}
}
}
if (!empty($siblings))
{
foreach ($siblings as $itemID)
{
$dropDownItems[] = $arResult['ALL_ITEMS'][$itemID];
}
}
?>
<? if (!empty($dropDownItems)): ?>
<? $this->SetViewTarget('breadcrumb_dropdown'); ?>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<? foreach ($dropDownItems as $item): ?>
<li><a href="<?=$item['LINK']?>"><?=$item['TEXT']?></a></li>
<? endforeach; ?>
</ul>
<? $this->EndViewTarget(); ?>
<? endif; ?>
|
в шаблоне хлебных крошек редактируем для последнего звена код (тут нужно иметь ввиду что если не подразумевается что у всех таких пунктов будут "соседи", то шаблон не нужно трогать, а менять его также через js"):
Код |
---|
$strReturn .= '
<div class="bx-breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
'.$arrow.'
<div class="dropdown" id="breadcrumbItemDropdown">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" itemprop="name">'.$title.'
<span class="caret"></span></button>
</div>
<met a itemprop="position" content="'.($index + 1).'" />
</div>';
|
в шаблоне сайта после вызова компонента хлебных крошек выводим в скрытом блоке выпадающий список сиблингов и аппендим его в последнее звено хлебных крошек (js лучше вынести в отдельный файл)
Код |
---|
<div class="d-none" id="breadcrumbDropdownList">
<?$APPLICATION->ShowViewContent('breadcrumb_dropdown');?>
</div>
<sc ript>
$(document).ready(function(){
$('#breadcrumbItemDropdown').append($('#breadcrumbDropdownList').html());
});
</sc ript>
|
Дропдаун стандартный бутстраповский, но очевидно нужно поиграться еще со стилями
Если же нужно чтобы выпадающий список показывался не только для последнего пункта крошек то будет посложнее, скорее всего лучше будет написать свой компонент хлебных крошек, а вообще я где-то видел что такое уже реализовано в готовых решениях (реализацию там не знаю)