• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/page/asset.php
  • Класс: BitrixMainPageAsset
  • Вызов: Asset::prepareCss
private function prepareCss() : void
{
	$additional = [];

	foreach ($this->css as $css => $set)
	{
		/** @var  $assetTID - get first target where added asset */
		$assetTID = $set['ADDITIONAL'] ? 'TEMPLATE' : $set['TARGET'][0];
		/** @noinspection PhpUndefinedClassInspection */
		$cssInfo = [
			'PATH' => $css,
			'FULL_PATH' => false,
			'FILE_PATH' => false,
			'SKIP' => false,
			'TARGET' => $assetTID,
			'EXTERNAL' => CMain::IsExternalLink($css),
			'ADDITIONAL' => $set['ADDITIONAL']
		];

		if ($cssInfo['EXTERNAL'])
		{
			if ($set['ADDITIONAL'])
			{
				$tmpKey = 'TEMPLATE';
				$tmpPrefix = 'template';
			}
			else
			{
				$tmpKey = 'KERNEL';
				$tmpPrefix = 'kernel';
			}

			$cssInfo['MODULE_ID'] = $this->assetCSSCnt;
			$cssInfo['TARGET'] = $tmpKey.'_'.$this->assetCSSCnt;
			$cssInfo['PREFIX'] = $tmpPrefix.'_'.$this->assetCSSCnt;
			$cssInfo['FULL_PATH'] = $cssInfo['PATH'];
			$cssInfo['SKIP'] = true;
			$this->assetCSSCnt++;

			$this->targetList[$tmpKey]['CSS_LIST'][$cssInfo['TARGET']] = [
				'TARGET' => $cssInfo['TARGET'],
				'PREFIX' => $cssInfo['PREFIX'],
				'MODE' => $this->targetList[$assetTID]['MODE'],
				'UNIQUE' => false,
				'WHERE_USED' => []
			];
		}
		else
		{
			if (($paths = $this->getAssetPaths($css)) !== null)
			{
				$cssInfo["PATH"] = $css;
				$cssInfo["FILE_PATH"] = $paths["FILE_PATH"];
				$cssInfo["FULL_PATH"] = $paths["FULL_PATH"];
			}
			else
			{
				unset($this->css[$css]);
				continue;
			}

			$moduleInfo = $this->isKernelCSS($cssInfo['PATH']);
			if ($moduleInfo)
			{
				$cssInfo['TARGET'] = 'KERNEL';
				if ($this->sliceKernel() && $this->optimizeCss() && is_array($moduleInfo))
				{
					$cssInfo['MODULE_ID'] = $moduleInfo['MODULE_ID'];
					$cssInfo['TARGET'] = 'KERNEL_'.$moduleInfo['MODULE_ID'];
					$cssInfo['PREFIX'] = 'kernel_'.$moduleInfo['MODULE_ID'];
					$cssInfo['SKIP'] = $moduleInfo['SKIP'] ?? false;
				}
				else
				{
					$cssInfo['MODULE_ID'] = $this->assetCSSCnt;
					$cssInfo['TARGET'] = 'KERNEL_'.$this->assetCSSCnt;
					$cssInfo['PREFIX'] = 'kernel_'.$this->assetCSSCnt;
					$cssInfo['SKIP'] = true;
					$this->assetCSSCnt++;
				}

				if (isset($this->targetList['KERNEL']['CSS_LIST'][$cssInfo['TARGET']]['MODE']))
				{
					$this->targetList['KERNEL']['CSS_LIST'][$cssInfo['TARGET']]['MODE'] |= $this->targetList[$assetTID]['MODE'];
				}
				else
				{
					$this->targetList['KERNEL']['CSS_LIST'][$cssInfo['TARGET']] = [
						'TARGET' => $cssInfo['TARGET'],
						'PREFIX' => $cssInfo['PREFIX'],
						'MODE' => $set['ADDITIONAL'] ? $this->targetList[$set['TARGET'][0]]['MODE'] : $this->targetList[$assetTID]['MODE'],
						'UNIQUE' => true,
						'WHERE_USED' => []
					];
				}

				if (is_array($moduleInfo))
				{
					$this->targetList['KERNEL']['CSS_LIST'][$cssInfo['TARGET']]['MODULE_NAME'] = $moduleInfo['MODULE_ID'];
				}

				// Add information about sets where used
				foreach ($set['TARGET'] as $setID)
				{
					$this->targetList['KERNEL']['CSS_LIST'][$cssInfo['TARGET']]['WHERE_USED'][$setID] = true;
				}
			}
			elseif (strncmp($cssInfo['PATH'], '/bitrix/js/', 11) != 0 /*||*/ )
			{
				$cssInfo['SKIP'] = !(
					strncmp($cssInfo['PATH'], '/bitrix/panel/', 14) != 0
					&& strncmp($cssInfo['PATH'], '/bitrix/themes/', 15) != 0
					&& strncmp($cssInfo['PATH'], '/bitrix/modules/', 16) != 0
				);
			}
		}

		if ($cssInfo['ADDITIONAL'])
		{
			$additional[] = $cssInfo;
		}
		else
		{
			$this->css[$cssInfo['TARGET']][] = $cssInfo;
		}

		unset($this->css[$css]);
	}

	foreach ($additional as $cssInfo)
	{
		$this->css[$cssInfo['TARGET']][] = $cssInfo;
	}
}