PageSourceSearch

https://barier-prom.ru/bitrix/templates/aspro_max/js/custom.js

js barier-prom.ru collected 2026-10-08 08:24:32 UTC 5,773 bytes, 109 lines download raw bytes

1/* You can use this file with your scripts. It will not be overwritten when you upgrade solution. */
2
3// --- РАСЧЕТ ЦЕНЫ ЗА КГ НА ЛЕТУ ---
4$(document).ready(function() {
5
6
7function injectPricePerKgBlock() {
8        // Проверяем, нет ли уже созданного блока на странице
9        if ($('.js_price_per_kg_wrapper').length === 0) {
10            // Находим блок основной цены Аспро (обычно .prices_block или .price_matrix_wrapper)
11            var $targetPriceBlock = $('.cost.prices.detail').first();
12            
13            if ($targetPriceBlock.length) {
14                // Создаем HTML-структуру «на лету»
15                var htmlBlock = '<div class="js_price_per_kg_wrapper" style="margin-top: 10px; margin-left: 5px; font-size: 25.99px; font-family: Montserrat, Atial, Sans-serif; color: #555555;">' +
16                                'Цена за кг: <span class="js-price-per-kg-value" style="font-weight:bold;">0</span> руб.' +
17                                '</div>';
18                // Вставляем её сразу после блока цены
19                $targetPriceBlock.after(htmlBlock);
20            }
21        }
22    }
23
24
25 // Функция сбора данных и расчета цены
26    function calculatePricePerKg() {
27       // Сначала убеждаемся, что HTML-блок присутствует
28         injectPricePerKgBlock();
29
30         var $valueSpan = $('.js_price_per_kg_wrapper');
31         if (!$valueSpan.length) {
32           console.log('No js_price_per_kg_wrapper');
33           return;
34         }
35
36        // Ждем  пока штатный скрипт Битрикса/Аспро обновит ID и цену на экране
37        setTimeout(function() {
38            var weightText = $('.bx_item_section_name .val').text().trim();
39            if (weightText) {
40		// Заменяем запятую на точку (чтобы JS понимал дроби вроде 0.9)
41	        var normalizedText = weightText.replace(',', '.');
42        
43	        // Регулярное выражение ищет любые числа (целые или с точкой)
44    		var numberMatch = normalizedText.match(/([0-9.]+)/);
45        
46    		if (numberMatch) {
47        	    // Превращаем найденную строку в математическое число float
48        	    var weightValue = parseFloat(numberMatch[1]);
49            
50        	    // Проверяем единицу измерения. Если указаны граммы, переводим в кг
51        	    var lowerText = normalizedText.toLowerCase();
52        	    var weightKg = weightValue;
53            
54        	    // Если в строке есть "г" или "грамм", но нет "кг"
55        	    if ((lowerText.indexOf('г') !== -1 || lowerText.indexOf('грамм') !== -1) && lowerText.indexOf('кг') === -1) {
56            		weightKg = weightValue / 1000;
57        	    }
58            
59        	    // Забираем чистый текст цены из вашего тега span.price_value
60        	    var $priceElement = $('.price_value').first();
61        	    var priceText = $priceElement.text().trim(); // Получим строку "1 162.51" (с пробелом внутри)
62        	    var priceCur = $('.price_currency').first().text().trim();
63        	    //console.log('priceText:', priceText);
64		    if (priceText) {
65            		// Критически важно: удаляем ВСЕ виды пробелов (обычные и неразрывные &nbsp;)
66            		var cleanPriceText = priceText.replace(/\s/g, '').replace(/\u00a0/g, '');
67                
68            		// Переводим цену в число float
69            		var cleanPrice = parseFloat(cleanPriceText);            
70            		//console.log('cleanPrice:', cleanPrice);
71        		if (cleanPrice > 0 && weightKg > 0) {
72            		    var pricePerKg = cleanPrice / weightKg;
73            		    //console.log('pricePerKg:', pricePerKg);
74            		    // Форматируем результат (2 знака после запятой и пробел для тысяч)
75            		    var formattedPrice = pricePerKg.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, " ");
76            		    // Выводим в наш созданный в template.php блок
77            			//$('.js-price-per-kg-wrapper').html(formattedPrice + ' ' + priceCur+ ' / кг');
78            			//$('.js-price-per-kg-wrapper').show();
79                            // Выводим в наш созданный блок
80console.log('js_price_per_kg_wrapper', formattedPrice + ' ' + priceCur+ ' / кг');
81                            $valueSpan.text(formattedPrice + ' ' + priceCur+ ' / кг');
82                            $valueSpan.show();
83            		}
84        	    }
85        	}
86    	    }
87        }, 500);
88    }
89
90    // Перезапускаем расчет при смене торгового предложения (SKU)
91    BX.addCustomEvent('onAsproSkuSetPrice', function() {
92        // Небольшая задержка, чтобы Аспро успел обновить цену в DOM
93        setTimeout(function() {
94            calculatePricePerKg();
95        }, 50);
96    });
97
98    // На случай AJAX-перезагрузок блоков страницы
99    BX.addCustomEvent('onXHRComplete', function() {
100        calculatePricePerKg();
101    });
102
103 //  при первой загрузке, чтобы цена за кг посчиталась сразу
104  setTimeout(function() {
105     calculatePricePerKg();
106  }, 500);
107
108});
109// --- КОНЕЦ РАСЧЕТА ---

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.