Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 09.04.2018, 12:54
Аспирант
Отправить личное сообщение для SERblY Посмотреть профиль Найти все сообщения от SERblY
 
Регистрация: 10.03.2014
Сообщений: 87

мне то всего то надо же слайдер до ума довести, парни Вы простите но мы выбились из темы, я слушаю Вас и принимаю и понимаю что Вы правы, Вы тыкните меня носом как говориться, как сделать лучше, я разве против, я наоборот еще больше Вас зауважаю и хвалить буду!
Ответить с цитированием
  #62 (permalink)  
Старый 09.04.2018, 13:11
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

SERblY, у вас не получается ввести скрипту минимальное и максимальное значения для слайдера?
Получить из бд и передать эти значения шаблонизатору получилось?
Ответить с цитированием
  #63 (permalink)  
Старый 09.04.2018, 14:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от SERblY
мне то всего то надо же слайдер до ума довести
И что это значит?

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

И это ведь очевидно, и вообще не имеет отношения к программированию.

Представьте, что вместо привычных отделов различных групп товаров вы увидите один отдел, где все товары свалены в кучу, причем каждая группа товаров впихнута в маленькую коробку, в которой сложно найти нужное, и этот единственный отдел длиною в 500 метров. Вам удобно будет купить нужное?

Это ведь тоже очевидно, и языками тут и не пахнет. И магазины делают все, чтобы покупателю удобно было ориентироваться в товарах, причем искусство их разложить, это еще и уловка заставить покупателя купить.

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

Ваш магазин предлагает от жевательных резинок за 5 руб до черной икры за 50000 руб, и вы все товары свалили в кучу. Удобно ли будет покупателю уже интернет магазина купить чтобы либо у вас, или же так же, очевидно, нет, как и выше в реальном магазине? А то что слайдер цен в данном случае вообще бесполезен, уже говорилось.

Javascript появляется на горизонте тогда, когда на сервере есть грамотная организация магазина, представление его товаров и прочее. Клиент запрашивает нужное, JS используя данные данные ему серверов обеспечивает удобный сервис для клиента, вашего покупателя.

Если магазин имеет грамотную организацию, значит у него есть отделы (не важно, что магазин виртуальный, подход тот же самый, что и в реальном) - бакалея, ХБ изделия (не обмундирование), консервы, ... Равноценно как вы придя за хлебом в реальный магазин, идете в отдел хлебобулочных изделий, так и в виртуальном магазине покупатель должен иметь возможность посещения нужного отдела магазина. Это обеспечивается меню. Но такой же доступ к разделам должен быть и при поиске товаров. А это значит, что сперва покупатель выбирает категорию товаров, затем задает диапазон цен. Вот тут уже работа JS - получить данные представленные сервером по ценам категорий товаров, чтобы инициализировать слайдер на диапазон крайних цен выбранной пользователем категории товаров.

Вот что должен отдать сервер клиенту:

var prop_range = {
     '1' : {'min': 50, 'max': 600, 'step': 60},
     '2' : {'min': 2800, 'max': 13700, 'step': 200},
     ....
}


где 1 и 2, это ID категорий товаров, которые являются значениями списка категорий в фильтре. И под ними как ключами мин/макс цены товаров полученные запросом к базе в соответствующей категории товаров. А шаг рассчитывается делением макс значения на 10/100/1000... в зависимости от знаков макс значения, с округлением.

Запрос по фильтру, это выдача покупателю найденных (или нет) товаров, с сохранением в фильтре набора. То есть, если был сделан запрос по фильтру, то список должен отображать выбранную категорию, а слайдер цен должен инициализироваться не только по значениям этой категории, но и отображать то состояние, в которое его установил пользователь.

Вот это называется "довести до ума". Чем вы там торгуете, одна ли группа товаров и почему 0 руб, это идеально, только богу и вам известно. Если так надо, то тему можно закрыть. Если нет групп товаров, и все едино, а нужно только мин и макс, то делайте запрос в базу, получайте эти значения, передавайте их в шаблонизатор, и закрывайте тему.

Последний раз редактировалось laimas, 09.04.2018 в 15:22.
Ответить с цитированием
  #64 (permalink)  
Старый 11.04.2018, 11:33
Аспирант
Отправить личное сообщение для SERblY Посмотреть профиль Найти все сообщения от SERblY
 
Регистрация: 10.03.2014
Сообщений: 87

Запрос в базу для поиска максимального значения цены выглядит так
SELECT MAX(value) as max_price FROM eb_db_fields fdb
LEFT JOIN eb_fields fld on fld.id=fdb.field
WHERE fld.type='p'
Ответить с цитированием
  #65 (permalink)  
Старый 11.04.2018, 12:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А зачем здесь LEFT JOIN и почему только максимальные значение, а не и минимальные?
Ответить с цитированием
  #66 (permalink)  
Старый 17.04.2018, 15:33
Аспирант
Отправить личное сообщение для SERblY Посмотреть профиль Найти все сообщения от SERblY
 
Регистрация: 10.03.2014
Сообщений: 87

вообщем сделал запрос максимальной цены отдельным вайлом который передает ее шаблонизатору
$max_price = dbarray(dbquery("
SELECT MAX(value) as max_price FROM ".PREF."db_fields fdb
LEFT JOIN eb_fields fld on fld.id=fdb.field
WHERE fld.type='p'
"));
$max_price = $max_price['max_price'];
$smarty->assign('max_price', $max_price);

в самом шаблшоне максимальная цена самого дорогого объявления будет выглядеть так {%$max_price%} примет скрипт? так понимаю должно будет выглядеть так как то
<script src="{%$smarty.const.THEME%}assets/jquery-ui/jquery-ui.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){


/* слайдер цен */

var minCost = jQuery("input.minCost"),
    maxCost = jQuery("input.maxCost"),
    storage = sessionStorage;
jQuery("#slider").slider({
  min: 0,
  max: 1000000,
  step: 500,
  range: true,
  values: JSON.parse(storage.getItem("values")) ||[0, 1000000],
  stop: function(event, ui) {
    minCost.val(ui.values[0]);
    maxCost.val(ui.values[1]);
    storage.setItem("values", JSON.stringify(ui.values));
    },
    slide: function(event, ui){
    minCost.val(ui.values[0]);
    maxCost.val(ui.values[1]);
    }
});


jQuery("input.minCost").change(function(){

	var value1=jQuery("input.minCost").val();
	var value2=jQuery("input.maxCost").val();

    if(parseInt(value1) > parseInt(value2)){
		value1 = value2;
		jQuery("input.minCost").val(value1);
	}
	jQuery("#slider").slider("values",0,value1);	
});

	
jQuery("input.maxCost").change(function(){
		
	var value1=jQuery("input.minCost").val();
	var value2=jQuery("input.maxCost").val();
	
	if (value2 > 1000000) { value2 = 1000000; jQuery("input.maxCost").val(1000000)}

	if(parseInt(value1) > parseInt(value2)){
		value2 = value1;
		jQuery("input.maxCost").val(value2);
	}
	jQuery("#slider").slider("values",1,value2);
});



// фильтрация ввода в поля
	jQuery('input.maxCost, input.minCost').keypress(function(event){
		var key, keyChar;
		if(!event) var event = window.event;
		
		if (event.keyCode) key = event.keyCode;
		else if(event.which) key = event.which;
	
		if(key==null || key==0 || key==8 || key==13 || key==9 || key==46 || key==37 || key==39 ) return true;
		keyChar=String.fromCharCode(key);
		
		if(!/\d/.test(keyChar))	return false;
	
	});


});



</script>


это код рабочий который Вы помогли мне составить, тоесть значение в данном случае стоит 1000000 если я его заменю на {%$max_price%} JS подружиться со смарти? тоесть сработает такой вариант ?
Ответить с цитированием
  #67 (permalink)  
Старый 17.04.2018, 16:48
Аспирант
Отправить личное сообщение для SERblY Посмотреть профиль Найти все сообщения от SERblY
 
Регистрация: 10.03.2014
Сообщений: 87

не так не хочет работать
Ответить с цитированием
  #68 (permalink)  
Старый 17.04.2018, 18:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Зачем LEFT JOIN ... WHERE? Вы либо что-то кусочками делаете, что неверно, либо вообще не то что нужно.

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

Это означает, что кроме обязательной проверки на число значений этих, нужно еще и проверять что есть мин, а что макс из из них. Либо делается проще, как $val_min = min($array), $val_max = max($array). Ибо эти значения подставляются в запрос как WHERE price BETWEEN $min AND $max. Эти же значения ползунка передаются и слайдеру, если был выбор по ним, иначе они равны крайним значениям диапазона.

Если таблица продуктов одна, то крайние значения слайдера, это SELECT MIN(price) `min`, MAX(price) `max` FROM table, и это все (оператор AS для алиасов можно опускать, не думаю, что вы используете древний MySQL и будут проблемы). И Smarty сам по себе не догадывается, что он него хотят, ему нужно передать этот массив содержащий min, max, $val_min, $val_max - $smarty->assign('range', $array). И уже в шаблоне извлечь из {range} необходимое, подставив куда следует.

Если код слайдера в самой странице, то соответсвуенно

slider({
min: тут,
max: тут,
... и далее, включая и задание начальных значений.

с учетом того, что знаем как в Smarty предотвращаются конфликты вставок в секции JS, который также использует фигурные скобки.

Такого в коде if (value2 > 1000000) { value2 = 1000000; ... быть не должно. Либо из переданных в шаблон мин/макс значений здесь тоже подстановка, либо эти значения задаются в атрибутах полей. А вообще же, коли это плагин, то это его заданные параметры, и проверка полей на диапазон, это его методы, а мин/макс заданные параметры, то есть типа this.min.

Если код плагина подключаемый, то переданные в шаблон значения уже как json_encode($array) выводят в секции <script> под объявленной переменной, значения которые будут использоваться

slider({
min: тут,
max: тут,
...

И только, если это фильтр расширенный, в нем есть список категорий продуктов, то запрос в базу должен вернуть для него мин/макс значения всех категорий наряду с их названиями и ID, тогда SELECT a.id, a.name, MIN(b.price) `min`, MAX(b.price) `max` FROM table1 a LEFT JOIN table2 b USING(id). А также указать был ли запрос по фильтру, и если да, то по какой категории, отметив это в списке в шаблоне, установив эти значения, как выбранные пользователем в слайдере.

Если вы этого не понимаете, не подгоняйте под ответ, не получится.

Последний раз редактировалось laimas, 17.04.2018 в 18:50.
Ответить с цитированием
  #69 (permalink)  
Старый 17.04.2018, 19:31
Аспирант
Отправить личное сообщение для SERblY Посмотреть профиль Найти все сообщения от SERblY
 
Регистрация: 10.03.2014
Сообщений: 87

я просто пытаюсь сделать динамической только максимальную цену, пытаюсь исходя из знаний, если бы я мог я бы не обратился на этот форум,а Вы простите мне пытаетесь что то разжевать! я не сижу и не жду от моря погоды, пока что до чего додумался то и сделал...
Ответить с цитированием
  #70 (permalink)  
Старый 17.04.2018, 19:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от SERblY
а Вы простите мне пытаетесь что то разжевать!
Так у вас ошибки через раз и два. Если у вас в кармане один кошелек, нужно ли задаваться вопросом в каком кошельке больше денег? Нет же, тогда причем тут WHERE в вашем запросе для получения макс. значений из базы? Напрашивается ответ - либо вы не то делаете, либо структура ваших данных далека от нужной, если продукты, это одна таблица.

Так что оставьте пока как есть, изучайте от Smarty до JS, по мере получения знаний дорабатывайте. Более конкретного вам никто не скажет, ибо ни кто не знает что и как у вас делается на сервере.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery UI Slider - привязка с input type number Argeares Элементы интерфейса 3 20.06.2017 15:36
Нужно связать input и ползунок jQuery Slider / jQuery ui IffeR jQuery 4 16.08.2014 18:01
Помогите люди добрые luraVefrafe jQuery 2 09.06.2010 09:16
Люди, ПОМОГИТЕ! Bel666 jQuery 11 27.04.2010 15:38
Помогите внедрить свой jQuery в другой A.N.R.I jQuery 25 19.07.2009 01:50