• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/assets/preprocessing/icon.php
  • Класс: BitrixLandingAssetsPreProcessingIcon
  • Вызов: Icon::saveAssets
static function saveAssets(Block $block): void
{
	$iconSrc = Config::get('icon_src');
	$iconVendors = Config::get('icon_vendors');
	$blockContent = $block->getContent();

	if (!$iconSrc || !$iconVendors || !$blockContent)
	{
		return;
	}

	$assetsIcon = [];
	$iconVendors = (array)$iconVendors;
	$vendorsStr = '(' . implode('|', $iconVendors) . ')';
	$prefixesStr = $vendorsStr;
	// special vendors
	$iconVendorsConfig = Config::get('icon_vendors_config');
	if ($iconVendorsConfig && !empty($iconVendorsConfig))
	{
		$classPrefixes = $iconVendors;
		foreach ($iconVendorsConfig as $vendor => $config)
		{
			$classPrefixes[array_search($vendor, $classPrefixes, true)] = $config['class_prefix'];
		}
		$prefixesStr = '(' . implode('|', array_unique($classPrefixes)) . ')';
	}
	$found = preg_match_all(
		'/(?<=[s"])' . $vendorsStr . '?s*(' . $prefixesStr . '-([^s"/\]+))/s',
		$blockContent,
		$matches
	);
	if ($found)
	{
		foreach ($matches[0] as $i => $full)
		{
			$vendor = $matches[1][$i]
				? trim($matches[1][$i])
				: trim($matches[3][$i]);
			$class = trim($matches[2][$i]);
			[$vendor, $class] = self::updateIconsBeforeSave($vendor, $class);
			if (!isset($assetsIcon[$vendor]))
			{
				$assetsIcon[$vendor] = [];
			}
			$assetsIcon[$vendor][$class] = self::getIconContentByClass(
				$class,
				$vendor
			);
			if ($assetsIcon[$vendor][$class] === null)
			{
				unset($assetsIcon[$vendor][$class]);
			}
			if (!$assetsIcon[$vendor])
			{
				unset($assetsIcon[$vendor]);
			}
		}
	}

	$block->saveAssets([
		'icon' => $assetsIcon
	]);
}