- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/subtype/menu.php
- Класс: BitrixLandingSubtypeMenu
- Вызов: Menu::prepareManifest
static function prepareManifest(array $manifest, BitrixLandingBlock $block = null, array $params = []): array
{
// add attrs to work TWO MENUS together
if (!isset($manifest['attrs']) || !is_array($manifest['attrs']))
{
$manifest['attrs'] = array();
}
if (!isset($manifest['attrs']['.navbar-collapse']))
{
$manifest['attrs']['.navbar-collapse'] = array(
array(
'hidden' => true,
'attribute' => 'id',
),
);
}
if (!isset($manifest['attrs']['button.navbar-toggler']))
{
$manifest['attrs']['button.navbar-toggler'] = array(
array(
'hidden' => true,
'attribute' => 'aria-controls',
),
array(
'hidden' => true,
'attribute' => 'data-target',
),
);
}
// add callbacks
$manifest['callbacks'] = array(
'afterAdd' => function (BitrixLandingBlock &$block) use($params)
{
$manifest = $block->getManifest();
$needSave = false;
// autogenerate MENU
// predefine params
if (isset($params['selector']))
{
$selector = $params['selector'];
}
else
{
$selector = '.landing-block-node-menu-list-item-link';
}
$count = isset($params['count']) ? $params['count'] : 5;
$source = isset($params['source']) ? $params['source'] : null;
// new menu items
$menuItems = array();
if (isset($manifest['nodes'][$selector]))
{
// fill menu
if ($source == 'catalog')
{
$site = $block->getSite();
if ($site['TYPE'] == 'STORE')
{
$menuItems = self::getCatalogMenu(
$block->getSiteId(),
$count
);
}
}
else if ($source == 'personal')
{
$menuItems = self::getPersonalMenu();
}
// save new items
if (!empty($menuItems))
{
$block->updateNodes(array(
$selector => $menuItems
));
$needSave = true;
}
}
else if ($source == 'structure')
{
// after add immediately
BitrixLandingSubtypeMenu::redrawStructureMenu($block);
// after site creating if it is processing now
$eventManager = BitrixMainEventManager::getInstance();
$eventManager->addEventHandler('landing', 'onAfterDemoCreate',
function(BitrixMainEvent $event) use($block)
{
BitrixLandingSubtypeMenu::redrawStructureMenu($block);
}
);
}
// to work TWO MENUS together
// todo: check in manifest
$navbarCollapseSection = $params['navbarCollapseSection'] ?? '.navbar-collapse';
$navbarTogglerButton = $params['navbarTogglerButton'] ?? 'button.navbar-toggler';
if (
isset($manifest['attrs'][$navbarCollapseSection])
&& isset($manifest['attrs'][$navbarTogglerButton])
)
{
$newId = 'navBar' . $block->getId();
$block->setAttributes(array(
$navbarCollapseSection => array('id' => $newId),
$navbarTogglerButton => array(
'aria-controls' => $newId,
'data-target' => '#' . $newId,
),
));
$needSave = true;
}
// SAVE
if($needSave)
{
$block->save();
}
},
);
return $manifest;
}