Изменение цены в зависимости от веса товара

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.1

Задача

Необходимо что бы цена товара менялась в зависимости от выбранного значения веса товара.

Решение

Для реализации данного функционала нам необходимо что бы при вводе определенного значения веса товара цена динамически менялась без перезагрузки страницы.

Сначала создадим для товара поле для ввода с типом данных "Составное". В модуле "Шаблоны данных", в "Типы данных" находим "Объект каталога" или необходимый нам дочерний тип данных который используется для нашего товара. На примере шаблона "Современный интернет-магазин" мы добавим такое поле к типу данных "Телевизоры", в группе полей "Характеристики" мы изменим тип поля "Вес" на "Составное".

В папку /templates/demodizzy/js/ добавляем файл price.js где прописываем код:

$(document).ready(function(){
	
	// find and include price in form table
	//price = $('#price_id span#once').text();
	price_int = parseInt($('#price_id span#once').text(), 10);
	
	$('form input.table_otions').attr('checked', 'checked');
	
	if (price_int){
		price_first = $('form input.table_otions').parent().parent().children('td:last-child').text();
		$('form input.table_otions').parent().parent().children('td:last-child').text(price_first + price_int + ' руб');
		
		price_second = parseInt($('form input.table_otions').parent().parent().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().children('td:last-child').text(price_second + price_int + ' руб');
	
		price_third = parseInt($('form input.table_otions').parent().parent().next().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().next().children('td:last-child').text(price_third + price_int + ' руб');
	
		price_four = parseInt($('form input.table_otions').parent().parent().next().next().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().next().next().children('td:last-child').text(price_four + price_int + ' руб');
		
		$('form input[name="options[form_filling]"]').on('click', function(){
			//var price = $(this).parent().parent().children('td:last-child').html();
			var price_int = parseInt($(this).parent().parent().children('td:last-child').html(), 10);
			
			$('#price_id').html( '<span>' + price_int + ' руб</span>');
		});
		
	}else{
		//price_actual = $('#price_id span#first').text();
		price_actual_int = parseInt($('#price_id span#first').text(), 10);
		//price_original = $('#price_id span#second').text();
		price_original_int = parseInt($('#price_id span#second').text(), 10);
		
		discount = price_original_int - price_actual_int;

		price_first = $('form input.table_otions').parent().parent().children('td:last-child').text();
		$('form input.table_otions').parent().parent().children('td:last-child').text(price_first + price_actual_int + ' руб');
		
		price_second = parseInt($('form input.table_otions').parent().parent().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().children('td:last-child').text(price_second + price_actual_int + ' руб');
	
		price_third = parseInt($('form input.table_otions').parent().parent().next().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().next().children('td:last-child').text(price_third + price_actual_int + ' руб');
	
		price_four = parseInt($('form input.table_otions').parent().parent().next().next().next().children('td:last-child').text(), 10);
		$('form input.table_otions').parent().parent().next().next().next().children('td:last-child').text(price_four + price_actual_int + ' руб');
		
		$('form input[name="options[form_filling]"]').on('click', function(){
			//var price_actual = $(this).parent().parent().children('td:last-child').html();
			var price_actual_int = parseInt($(this).parent().parent().children('td:last-child').html(), 10);
			var price_original_int = price_actual_int + discount;
			
			$('#price_id').html( '<span>' + price_actual_int + ' руб</span><span style="text-decoration: line-through">' + price_original_int + ' руб</span>');
		});
	}
});