мне то всего то надо же слайдер до ума довести, парни Вы простите но мы выбились из темы, я слушаю Вас и принимаю и понимаю что Вы правы, Вы тыкните меня носом как говориться, как сделать лучше, я разве против, я наоборот еще больше Вас зауважаю и хвалить буду!
|
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 руб, это идеально, только богу и вам известно. Если так надо, то тему можно закрыть. Если нет групп товаров, и все едино, а нужно только мин и макс, то делайте запрос в базу, получайте эти значения, передавайте их в шаблонизатор, и закрывайте тему. |
Запрос в базу для поиска максимального значения цены выглядит так
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' |
А зачем здесь LEFT JOIN и почему только максимальные значение, а не и минимальные?
|
вообщем сделал запрос максимальной цены отдельным вайлом который передает ее шаблонизатору
$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 подружиться со смарти? тоесть сработает такой вариант ? |
не так не хочет работать :no:
|
Зачем 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). А также указать был ли запрос по фильтру, и если да, то по какой категории, отметив это в списке в шаблоне, установив эти значения, как выбранные пользователем в слайдере. Если вы этого не понимаете, не подгоняйте под ответ, не получится. |
я просто пытаюсь сделать динамической только максимальную цену, пытаюсь исходя из знаний, если бы я мог я бы не обратился на этот форум,а Вы простите мне пытаетесь что то разжевать! я не сижу и не жду от моря погоды, пока что до чего додумался то и сделал...
|
Цитата:
Так что оставьте пока как есть, изучайте от Smarty до JS, по мере получения знаний дорабатывайте. Более конкретного вам никто не скажет, ибо ни кто не знает что и как у вас делается на сервере. |
Часовой пояс GMT +3, время: 18:17. |