• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/assets/preprocessing/theme.php
  • Класс: BitrixLandingAssetsPreProcessingTheme
  • Вызов: Theme::processing
static function processing(Block $block): void
{
	// first we check all we need
	
	$blockMetadata = $block->getMeta();
	if (!$blockMetadata['SITE_TPL_CODE'])
	{
		return;
	}

	$themeManifest = self::getThemeManifest($blockMetadata['SITE_TPL_CODE']);
	if (
		isset($themeManifest['newBlockStyle']) &&
		is_array($themeManifest['newBlockStyle'])
	)
	{
		$themeManifest = $themeManifest['newBlockStyle'];
	}
	else
	{
		return;
	}

	$contentWasChanged = false;
	$blockContent = $block->getContent();
	$blockClasses = self::getStyleClasses($blockContent);
	if (!$blockClasses)
	{
		return;
	}

	$blockManifest = $block->getManifest();
	if (!isset($blockManifest['namespace']))
	{
		return;
	}

	$blockNamespace = $blockManifest['namespace'];
	$semanticManifest = Block::getSemantic();
	if (isset($semanticManifest[$blockNamespace]))
	{
		$semanticManifest = $semanticManifest[$blockNamespace];
	}
	else
	{
		return;
	}

	// work with theme manifest
	foreach ($themeManifest as $semanticCode => $needClasses)
	{
		if (!isset($semanticManifest[$semanticCode]))
		{
			continue;
		}
		if (!is_array($needClasses))
		{
			$needClasses = (array)$needClasses;
		}

		// by specific style class we redefine some classes
		foreach ((array) $semanticManifest[$semanticCode] as $semanticClass)
		{
			$semanticClass = ' ' . $semanticClass . ' ';
			foreach ($blockClasses as $classesString)
			{
				if (mb_strpos($classesString, $semanticClass) !== false)
				{
					$contentWasChanged = true;
					$newClassString = self::removeSiblingsClasses(
						$classesString,
						$needClasses,
						$blockNamespace
					);
					$blockContent = str_replace(
						'class="' . trim($classesString) . '"',
						'class="' . $newClassString . ' ' . implode(' ', $needClasses) . '"',
						$blockContent
					);
				}
			}
		}
	}

	// save content to the block
	if ($contentWasChanged)
	{
		$block->saveContent($blockContent);
	}
}