• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/binding/menu.php
  • Класс: BitrixIntranetBindingMenu
  • Вызов: Menu::getMenuItems
static function getMenuItems($sectionCode, $menuCode, array $params = [])
{
	static $bindings = [];
	static $extLoaded = [];

	$inline = (isset($params['inline']) && $params['inline'] === true);
	$context = (isset($params['context']) && is_array($params['context']))
				? $params['context'] : [];

	if (!$bindings)
	{
		$cache = new CPHPCache;
		$cacheManager = $GLOBALS['CACHE_MANAGER'];
		$cacheTag = 'intranet_menu_binding';
		$cacheKey = $cacheTag . '_' . LANGUAGE_ID;
		if (Loader::includeModule('landing'))
		{
			if (Rights::hasAdditionalRight('extension', 'knowledge', false, true))
			{
				$cacheKey .= '_extension';
				if (Rights::hasAdditionalRight('create', 'knowledge', false, true))
				{
					$cacheKey .= '_create';
				}
			}
		}
		$cacheDir = '/intranet/menu_binding';
		if ($cache->initCache(8640000, $cacheKey, $cacheDir))
		{
			[$bindings, self::$needProvider] = $cache->getVars();
		}
		else
		{
			$cache->startDataCache();
			$cacheManager->startTagCache($cacheDir);
			$cacheManager->registerTag($cacheTag);
			$bindings = self::getBindings();
			$cacheManager->endTagCache();
			$cache->endDataCache([$bindings, self::$needProvider]);
		}
	}

	if (is_string($sectionCode) && is_string($menuCode))
	{
		$sectionCode = mb_strtolower($sectionCode);
		$menuCode = mb_strtolower($menuCode);
		if (isset($bindings[$sectionCode]['items'][$menuCode]))
		{
			// 'group' by sections
			$returnItems = [];
			$sections = self::SECTIONS;
			foreach ($sections as $globalSectionCode)
			{
				if ($globalSectionCode == $sections['other'])
				{
					if ($returnItems)
					{
						$returnItems[] = [
							'delimiter' => true
						];
					}
				}
				else
				{
					$returnItems[] = [
						'text' => Loc::getMessage('INTRANET_BIND_MENU_SECTION_' . mb_strtoupper($globalSectionCode)),
						'delimiter' => true
					];
				}
				$existItems = false;
				foreach ($bindings[$sectionCode]['items'][$menuCode] as $item)
				{
					if (isset($item['extension']))
					{
						if (!isset($extLoaded[$item['extension']]))
						{
							$extLoaded[$item['extension']] = true;
							BitrixMainUIExtension::load(
								$item['extension']
							);
						}
					}
					if ($item['sectionCode'] == $globalSectionCode)
					{
						$existItems = true;
						$returnItems[] = $item;
					}
				}
				if (!$existItems)
				{
					array_pop($returnItems);
				}
			}
			// for rest items wee need rebuild for correct links
			if (self::$needProvider)
			{
				$returnItems = self::setItemsProvider($returnItems, $context);
			}
			// marketplace item
			$marketCode = mb_strtoupper($sectionCode . '@' . $menuCode);
			$placementMap = array_flip(static::getRestPlacementMap());
			if (isset($placementMap[$marketCode]))
			{
				if ($returnItems)
				{
					$returnItems[] = [
						'delimiter' => true
					];
				}
				$returnItems[] = [
					'href' => Marketplace::getMainDirectory() . '?placement=' . $placementMap[$marketCode],
					'text' => Loc::getMessage('INTRANET_BIND_MENU_APPS_2')
				];
			}
			if ($inline)
			{
				return [
					'text' => Loc::getMessage('INTRANET_BIND_MENU_TITLE'),
					'items' => $returnItems
				];
			}
			return $returnItems;
		}
	}

	return [];
}