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 // ÐÑиÑиÑеÑки важно: ÑдалÑем ÐÐ¡Ð Ð²Ð¸Ð´Ñ Ð¿Ñобелов (обÑÑнÑе и неÑазÑÑвнÑе ) 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.