$kgFormsAllowed = false; break; } } } // Нормализуем и дедублицируем значения размера. $kgNormalizedSizes = []; $kgHasStopSize = false; foreach ($kgPavingSizes as $kgSize) { $kgSize = trim((string)$kgSize); if ($kgSize === '') { continue; } if (preg_match('/^(Мультиформат|Крупноформатная|Широкоформатная)$/ui', $kgSize)) { $kgHasStopSize = true; break; } $kgNormalizedSizes[] = $kgSize; } $kgNormalizedSizes = array_values(array_unique($kgNormalizedSizes)); if ( !$kgIsClinker && $kgMeasureAllowed && $kgFormsAllowed && !$kgHasStopSize && count($kgNormalizedSizes) === 1 ) { $kgSize = $kgNormalizedSizes[0]; /* * Строго один размер вида Длина x Ширина x Толщина. * Значения с 4 числами и любые текстовые форматы не проходят. */ if (preg_match( '/^\s*(\d+(?:[\.,]\d+)?)\s*[xх×]\s*(\d+(?:[\.,]\d+)?)\s*[xх×]\s*(\d+(?:[\.,]\d+)?)\s*$/u', $kgSize, $kgMatches )) { $kgPavingLength = (float)str_replace(',', '.', $kgMatches[1]); $kgPavingWidth = (float)str_replace(',', '.', $kgMatches[2]); if ($kgPavingLength > 0 && $kgPavingWidth > 0) { $kgMultiplier = ( $kgPavingLength * $kgPavingWidth ) / 1000000; } } } } if ($kgMultiplier <= 0) { return null; } /* * Определяем текущую цену. * Для блоков это цена за м³, для плитки — цена за м². * Для SKU сначала используем цену выбранного торгового предложения. */ $kgBasePrice = 0.0; $kgPrices = []; if ( is_array($arCurrentSKU) && !empty($arCurrentSKU['PRICES']) && is_array($arCurrentSKU['PRICES']) ) { $kgPrices = $arCurrentSKU['PRICES']; } elseif ( !empty($arItem['PRICES']) && is_array($arItem['PRICES']) ) { $kgPrices = $arItem['PRICES']; } foreach ($kgPrices as $kgPrice) { if (!is_array($kgPrice)) { continue; } if ( isset($kgPrice['DISCOUNT_VALUE']) && (float)$kgPrice['DISCOUNT_VALUE'] > 0 ) { $kgBasePrice = (float)$kgPrice['DISCOUNT_VALUE']; break; } if ( isset($kgPrice['VALUE']) && (float)$kgPrice['VALUE'] > 0 ) { $kgBasePrice = (float)$kgPrice['VALUE']; break; } } /* * Резервный источник цены. */ if ( $kgBasePrice <= 0 && !empty($arItem['MIN_PRICE']) && is_array($arItem['MIN_PRICE']) ) { if ( isset($arItem['MIN_PRICE']['DISCOUNT_VALUE']) && (float)$arItem['MIN_PRICE']['DISCOUNT_VALUE'] > 0 ) { $kgBasePrice = (float)$arItem['MIN_PRICE']['DISCOUNT_VALUE']; } elseif ( isset($arItem['MIN_PRICE']['VALUE']) && (float)$arItem['MIN_PRICE']['VALUE'] > 0 ) { $kgBasePrice = (float)$arItem['MIN_PRICE']['VALUE']; } } if ($kgBasePrice <= 0) { return null;
[RuntimeException] 
Could not start session because headers have already been sent. "/home/s/sabon/sabon/public_html/bitrix/php_interface/include/price_per_piece.php":1. (0)
/home/s/sabon/sabon/public_html/bitrix/modules/main/lib/Session/Session.php:143
#0: Bitrix\Main\Session\Session->start()
	/home/s/sabon/sabon/public_html/bitrix/modules/main/lib/Session/KernelSessionProxy.php:47
#1: Bitrix\Main\Session\KernelSessionProxy->start()
	/home/s/sabon/sabon/public_html/bitrix/modules/main/include.php:151
#2: require_once(string)
	/home/s/sabon/sabon/public_html/bitrix/modules/main/include/prolog_before.php:19
#3: require_once(string)
	/home/s/sabon/sabon/public_html/bitrix/modules/main/include/prolog.php:10
#4: require_once(string)
	/home/s/sabon/sabon/public_html/bitrix/header.php:2
#5: require(string)
	/home/s/sabon/sabon/public_html/catalog/index.php:1
#6: include_once(string)
	/home/s/sabon/sabon/public_html/bitrix/modules/main/include/urlrewrite.php:128
#7: include_once(string)
	/home/s/sabon/sabon/public_html/bitrix/urlrewrite.php:2
----------