Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 25.09.2016, 20:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

warren buffet,
супер, однако params и прочее это именно то дерево роща о котором я толковал. угу именно так, у меня терпения не хватило на такое, да и разбить как не додумался, спасибо.
Ответить с цитированием
  #42 (permalink)  
Старый 25.09.2016, 20:40
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Это не дерево, просто когда погромиста допускают до веб-строительства, он и делает как в туторах для десктопа вычитал, нихера не понимая, что губит весь проект. Под каждую услугу надо делать страницу, а не могилить все в дебильных интерфейсах. Страница это такие священные вещи как адрес, заголовок, h1, семантическое ядро (тексты) и картинки. Интерфейсы не индексируются.

Применительно к ваннам этим, 4 страницы. Он думает нифига себе, ради материала паги переключать. Однако люди ищут "ремонт чугунной ванны" и находят через ПС страницу с названием "ремонт чугунной ванны", а его страницу не найдут никогда, даже если он ее всю заспамит ключевиками. У него-то всего 1 страница и всего 1 название.

Это не дерево, а просто списки. В SQL это была бы таблица услуг и таблицы опций и между ними таблица N:N которую сейчас заменяют одинаковые ключи в параметрах.
Ответить с цитированием
  #43 (permalink)  
Старый 25.09.2016, 20:45
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Деревом является адрес, например Россия - список городов. Город - список улиц. Улица - список домов. А эти продуктовые опции списки всего 1 уровня и на деревья такие листики не похожи. В товаре может быть 10 списков с 1-м уровнем. Например бренд. Это список А уже сама таблица брендов ссылается на страну. Вроде бы дерево, но какое это дерево, это веточка. )))
Ответить с цитированием
  #44 (permalink)  
Старый 26.09.2016, 06:18
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Насчет деревьев, чтобы срубить его уже к чертям. Дерево - иерархия. Иерархическая структура данных, родитель-потомки, которые рожают потомков потом становясь родителями. У потомком всегда есть родитель, иначе он корень, root. Ну вот, то есть по дереву можно лазить туда-сюда. А с этих списков куда лазить? К товару? Так товар всяко имеет какой-то цвет и какую-то форму.

Все равно что Россия как угодно имеет город Москва. По приколу дефолт сити, да? А если списки возможных свойств принимать за деревья, так и будет - Россия обладает таким свойством как Москва, а Москва обладает таким свойством как Арбат.

На самом деле поступают так. Берут товары и делают характеристику. Взяли несколько шапок разных, формально описали, ага, вот общее, вот частное. Общее в общую таблицу, частное в списки. Готово.

Переносить сущности вещного мира в формализованные описания надо конечно уметь и вот тут самая мякотка. Почему ПРОГРАММИСТ занимается формализацией списком услуг? Это дело продавца вообще-то. Как он тогда ответит на звонок, если не знает, из чего его блеать собственные услуги или товары состоят?
Ответить с цитированием
  #45 (permalink)  
Старый 26.09.2016, 06:25
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Программист не виноват, он как пианист, делает что может. Если бы заказчик дал ему хотя бы екзель, по которому хотя бы операто на телефоне может ответить, чем контора вообще занимается, программисту бы деваться было бы некуда, кроме как сконвертить екзель в DDL-DML или в json. Какой заказчик, такой и исполнитель. Но самая мякота, что такой и клиент у них будет. Хороший клиент найдет "реставрация чугунной ванны", а плохой клиент останется этому специалисту нанятому тем специалистом не понимающим в чем он вообще специалист.
Ответить с цитированием
  #46 (permalink)  
Старый 06.08.2017, 03:54
Новичок на форуме
Отправить личное сообщение для Mantikorich Посмотреть профиль Найти все сообщения от Mantikorich
 
Регистрация: 06.08.2017
Сообщений: 3

Сообщение от warren buffet Посмотреть сообщение
Услуги и товары одни и те же сущности.

Специально, чтобы тебя ни в жизнь ни один ПС не проиндексировал и не нашел, даже если все сантехники в мире сдохнут, чтобы не нашел ни один ПС, гавнокод в качестве примера как такое делается.

<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">

<script>

var

CURRENCY = ' руб.',

works={

	title:'Услуга',
	data:{
		1:'Эмалировка',
		2:'Старкрил 2',
		3:'Жидкий акрил',
		4:'Акриловый вкладыш'
	},
	
},

params={

	opt:{
		title:'Опции',
		data:{
			1:'Установка уголка',
			2:'Монтаж экрана',
			3:'Монтаж слива',
			4:'Счетчик горячей воды',
			5:'Счетчик холодной воды'
		}
	},

	hue:{
		title:'Оттенок',
		data:{
			1:'Белый',
			2:'Красный',
			3:'Желтый',
			4:'Синий'
		}
	},

	len:{
		title:'Длина, см',
		data:{
			1:'120',
			2:'150',
			3:'170',
			4:'200'
		}
	}
},

offers={

	1:{
		price:1500,
		params:{
			len:{
				1:1400,
				2:1500,
				3:1500
			},
			hue:{
				1:0,
				2:120,
				3:150,
				4:90
			},
			opt:{
				1:1500,
				2:1700,
				3:2000,
				4:3000,
				5:2000
			}
		}
	},
	
	2:{
		price:2500,
		params:{
			len:{
				1:1200,
				2:1300,
				3:1700
			},
			hue:{
				1:0,
				2:220,
				3:250,
				4:190

			},
			opt:{
				1:1200,
				2:1500,
				3:1800,
				4:2900,
				5:2500
			}
		}
	},
	
	3:{
		price:1900,
		params:{
			len:{
				1:1200,
				2:1780,
				3:1499
			},
			hue:{
				1:0,
				2:126,
				3:145,
				4:199
			},
			opt:{
				1:1500,
				2:1700,
				3:2000,
				4:3000,
				5:2000
			}
		}
	},
	
	4:{
		price:1500,
		params:{
			len:{
				1:1400,
				2:1500,
				3:1500
			},
			hue:{
				1:0,
				2:120,
				3:150,
				4:90
			},
			opt:{
				1:1500,
				2:1700,
				3:2000,
				4:3000,
				5:2000
			}
		}
	}
}

total=0,prodList=calcButton=null;

function resetList(el){
	v=el.querySelectorAll('select');
	for(var i=0;i<v.length;i++)
		v[i].selectedIndex=-1;
}

function renderParams(ev){

	if(ev.target.nodeName!='SELECT') return;
	var v=ev.target.value;
	if(!(v in offers)) return;
	var offer=offers[v],html=[];
	
	total=offer.price;
	
	for(v in offer.params) {
		var h=[];
		for(var p in offer.params[v])
			h.push(renderOption(offer.params[v][p],params[v].data[p]
				+' + '+offer.params[v][p]+CURRENCY));
		html.push('<label>'+params[v].title+': </label>'
			+'<select>'+h.join('')+'</select>'+'<br/><br/>');
	}
	
	prodList.innerHTML=html.join('');
	resetList(prodList);
	calcButton.disabled=false;
}

function renderOption(v,t){
	return '<option value="'+v+'">'+t+'</option>';
}

function renderOptions(obj){
	var html=[];
	for(var p in obj)
		html.push(renderOption(p,obj[p]+': '+offers[p].price+CURRENCY));
	return html.join('');
}

function renderWorks(classname) {
	var el=document.querySelector('.'+classname);
	el.innerHTML='<label>'+works.title+': <label>'
		+'<select>'+renderOptions(works.data)+'</select>';
	resetList(el);
	el.addEventListener('change',renderParams);
}

function renderTotal(){
	v=prodList.querySelectorAll('select');
	for(var i=t=0;i<v.length;i++)
		t+= +v[i].value;
	document.querySelector('.total-sum').textContent=(total+t)+CURRENCY;
}

</script>

</head>
<body>

<div class="filters-block"></div><br/><br/>
<div class="product-list"></div>
<button class="calc-total" disabled="disabled">Рассчитать</button><br/><br/>
<div class="total-sum"></div>

<script>
prodList=document.querySelector('.product-list');
calcButton=document.querySelector('.calc-total');
calcButton.addEventListener('click',renderTotal);
renderWorks('filters-block');
</script>

</body>
</html>
Огромное спасибо за вашу статью! Почти смог реализовать на сайте такой калькулятор. Знаю, что неправильно, но у меня все-равно одностраничник.

Подскажите пожалуйста, как мне можно добавлять значение в выбранный элемент, заменив чем-нибудь другим html.push
Я вот про этот момент:
html.push('<label>'+params[v].title+': </label>'
			+'<select>'+h.join('')+'</select>'+')

Я пробовал менять его на
document.getElementById('myelementt').innerHTML =


Но тогда пропадает изменение цены в зависимости от выбора второго элемента, то есть скрипт работает не корректно. Буду очень благодарен за помощь. Заранее спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор услуг tarantino Javascript под браузер 1 30.07.2015 00:21
Не работает Калькулятор просчета отопления igor700 Общие вопросы Javascript 5 26.02.2014 16:18
Суммирование значений по всем динамически добавленным полям Joliat Общие вопросы Javascript 2 12.02.2014 16:01
Элементарный подсчет и калькулятор PashaShulga Общие вопросы Javascript 5 14.03.2012 21:42
Сделать калькулятор на сайт. asderru Работа 1 22.07.2010 13:46