- Модуль: 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;
}
}