Цитата:
|
Это зависит от того, в составе чего он используется. Обычно, это фильтр, а в них возможен выбор категорий или подобного, в котором будет производится выборка по выбранным параметрам. То есть ползунок будет иметь не какой-то один фиксированный диапазон, а диапазоны для каждой из выбранных категорий.
Формируя код фильтра для страниц, сервер делает запросы к базе и получается мин/макс значения для каждой категории в фильтре. Эти параметры передаются клиенту как объект, из которого при выборе категории в фильтре, они извлекаются и назначаются ползунку, а тот в свою очередь инициализируется с этими параметрами. Шаг изменения также важен, например если диапазон от 100 до 10000, то в районе от 100 до 300 может быть удобен шаг 10, а далее, приближаясь к верхним значениям он должен увеличиваться, ибо там цены большие. Вроде бы тут уже была тема по поводу изменения шага в зависимости от шкалы и положения ползунка на ней. На основе какого-то слайдера был разбор, если я не путаю, то это рони ссылку на это может дать. Либо шаг для каждого полученного диапазона рассчитывает сервер после получения мин/макс значений, как некую компромиссную величину. Получение самих мин/макс значений из базы, это SQL запрос. |
Цитата:
на клиенте это слишком затратно |
в идеале мин 0 всегда, макс чтобы из базы брал самую высокую цену какая есть, чтобы самому не придумывать ее, а шаг тоже ручками поставить оптимальный или как то по формуле считать оптимальный шаг в зависимости от значения макс, этот слайдер для доски объявлений, так что в категориях где цены 2000 и т.д. им пользоваться никто и не будет там и так есть показать самые дешевы или самые дорогие, им буду пользоваться в разделах авто, недвижимость, вот поэтому максимальное значение не угадаешь, ставить от балды 10500 милионов тоже глупо он даже ездить не будет точнее это будет незаметно, а вот сделать бы только макс значение динамичным по самому выс значению цены, ну и с шагом либо самому ручками придумать оптимальный либо как выше написал по формуле как то типо, в голове то все ясно, а вот как решить хз как обычно :)
|
Цитата:
Делайте как считаете нужным, тем более если нет понимания как сделать иначе. |
Да элементарно откажись от JERRY хотя бы с ползунком. jerry-величайший
прикол в JS нашего времени (мнение слесаря ремонтника больших металлорежущих станков ныне на пенсии) |
бл* я прошу прощения два последних , Вы себе тупо посты набиваете что ли?, Вы по теме говорите или если можете чем то помочь кодом то пишите, для этого форум создан, на Ваше мнение где мне и что применять ваще глубоко....
объясняйтесь яснее, я новичек в js и то с натяжкой сказано, я по себе знаю когда кто то тупо не знает как выстроить блоки в ряд я тоже до определенного времени вот в таком же тоне отписывался, там иди учи css или посылал на сайты и статьи, пока самого не коснулось в той стихии в которой я ноль, и мне помогли, и я для себя решил что никогда не буду тупо отписываться, а помогу чем смогу всегда! |
Цитата:
|
Цитата:
Да, идеально жить при коммунизме и ни за что не платить, но это утопия. И в базе данных искать товары с нулевой ценой, которых в ней нет, это глупо. Что для понимания этого требуется знание JS? Вы хотя бы делали попытку получить в базе мин/макс значения своих данных? Или с этим тоже проблемы? А ведь конкретно подключить эти данные к слайдеру труда не составляет и как-то глубоких познаний JS тоже, но для "подсказать в этом плане" важно знать организацию того как и где он применяется. А clecar, просто глупость сморозил. |
нет значение макс цены я думаю можно получить даже , не думаю а можно получить через smarty запрос в переменную что то типа {%$max.value_price%} (к примеру), вопрос то не в этом, а в том куда это в коде js вставить и вообще примет ли js сам объект шаблонизатора smarty и т.д.
|
Цитата:
Я вам потому и сказал - вы не понимаете что к чему, и уверены что диапазон от 0 это идеально. А я не ставлю перед собой задачу переубеждать вас. Делайте как считаете нужным, придет понимание со временем, переделаете. |
ну Вы врете что шаблонизатор smarty нех*я не может , он может все, например достаем цену , просто цену , тоесть значение некого поля из базы {%$message.f_3.value%} или например делаем условие на смарти , которое тоже подключается к базе , например туже цену, условие такое если цена есть она выводится если ее не проставили выводится что то другое:
{%if $message.fields.p|@count > 0%} {%foreach from=$message.fields.p item='v'%} Цена: {%$v.value.txt|droblenie%} <i class='fa fa-rub'></i>{%/foreach%} {%else%} Цена не указана {%/if%} я незнаю мб чего то, мб от жизни отстал, но мне кажется что php+smarty+JQuery+css3 это идеальная компашка для создания проектов и т.д. в веб среде! |
кстати тут не только условие а еще и выборка идет, есть более сложные варианты и запросов и условий, думаю нет смысла писать на примере выше Вы и так все поймете, так что смарти это ахеренно, это намного лучше чем где тупо html+css натянуты как ган**н прям на php, простите за выражение и тафтологию, это сугубо мое мнение и опыт как верстальщика
|
Цитата:
Делайте что хотите, коли вам так нравится. |
чтобы вообще разжевать {%$message.f_3.value%} <---- тут мы получаем значение поля бызы данных f_3 , оно на разных проектах мб называться как угодно, это так для примера, соответсвенно все это объявляеться в php в самом ядре так скажем, smarty это некий посредник между сервером и клиентом, как то так!
|
SERblY,
не надо мне ничего разжевываться, я знаю что такое Smarty. А вот нагружать шаблоны задачами не его компетенции, ... ну коли и в этом для вас это идеально, то без комментариев. Вперед и с песней как говорится. |
Цитата:
|
нет нагружать не надо я с Вами тоже полность согласен, просто зачем делать запрос через js если его можно сделать через smarty и передать значение в js уже, я так думаю, Вы поправьте если я не прав , разжуйте мне, я не претендую тут не на что я наоборот обратился сюда так как знаю что тут люди знающее свое дело, я вот в js не рублю не фига так я и не лезу туда, критика это всегда хорошо для енда
|
Цитата:
Но мне собственно говоря все равно, хотите в нем определяйте вызов своих сценариев, что угодно, я по этому поводу полемизировать не собираюсь. |
Цитата:
|
мне то всего то надо же слайдер до ума довести, парни Вы простите но мы выбились из темы, я слушаю Вас и принимаю и понимаю что Вы правы, Вы тыкните меня носом как говориться, как сделать лучше, я разве против, я наоборот еще больше Вас зауважаю и хвалить буду!
|
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, по мере получения знаний дорабатывайте. Более конкретного вам никто не скажет, ибо ни кто не знает что и как у вас делается на сервере. |
тогда такой вопрос , помогите, подскажите как и можно ли как то засунуть значение переменной смарти в скрипт ну например {%$max-price%}
ну ведь должен же быть вариант ? |
|
я уже писал что тоже раньше отписывался так, и умею отписываться ссылками, человек понимает лучше когда ему рабочий пример дают и он догоняет как это действует, тут кроме Ронни походу ваще никто не помогает по крайней мере с даты моей регистрации я 3 раза мб 4 обращался сюда за помощью только ронни помогает, а не херачит 100500 заумных
постов Ладно и на этом Спасибо! |
Ну да, блин, вместо того, чтобы читать документацию, что нужно, если хотите писать код, будем дуть губки и обижаться.
Хотя бы прочтите данный раздел документации, чтобы понять, почему это нужно знать, а не просто копировать подсказку, и "спотыкаться" впоследствии. |
да никто "губки не дует", все путем...
просто то что для Вас 5 мин клавиши нажать, для меня темный лес, я вытащил эту максимальную цену в переменную $max_price , надеялся что тупо покажут как воткнуть ее в этот слайдер, т.к. у меня не получилось, вот и все, тут мне никто не чем не обязан и нечего мне не должен, все люди вольны кому то подсказывать или показывать или помогать по своему собственному разумению! думаю мы отошли от темы и уже нездоровая переписка тут началась... |
Цитата:
Я не раз повторял - никто здесь не знает как реально у вас все происходит, поэтому давались описания для того или иного случая. Вы это либо мимом ушей, либо... по крайней мере до сих пор неизвестно об этом. Не однократно говорилось и о том, что прежде чем в шаблоне использовать переменную, ее нужно определить - $smarty->assign('name_var', значение), и только потом в шаблоне вывод {name_var}, при этом $ или % используется согласно тому, что определено конфигурацией. Было сказано, что можно в шаблоне в секции <script> вывести таким образом макс. значение var max = {переменная Smarty, которой из логики передали макс. значение}; а далее в скрипте везде вместо 10000 использовать max. Но если таким образом выводить переменную в шаблоне в JS код функции или теле условия обрамленного фигурными скобками, то будет возникать ошибка при обработке шаблона. Почему она возникает тоже говорилось, а что нужно сделать чтобы ее не было как раз и дается ответ по ссылке. Вы даже читать как следует то что вам пишут не можете, или не умеете, не знаю, но претензий с вашей стороны хоть отбавляй, и блин, я оказывается и виновен, от темы отошел. Читайте, вникайте, пробуйте, показывайте свои пробы здесь, чтобы хотя бы по ним можно было представить реалии на вашем сервере, и дать конкретный ответ в чем вы ошибаетесь. А то твердите "хочу", вам говорят как, и при этом еще дураках остаемся. |
я Вас понял что можно все, опять много букв я понимаю что нужно объявить переменную и т.д., я учусь только и делаю САМ что могу повторюсь, и зашел на форум как раз чтобы на моем рабочем примере мне показали как должен выглядеть код и что где дописано должно быть
|
если бы у меня было время учить и читать документацию по всему JS и Smarty я бы не на этот форум пришел наверное , а в другой ресурс, что Вы какой тяжелый
|
Цитата:
|
по пальцам:
<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> есть переменная Smarty (не важно как я ее получаю) {%$max_price%}, она в шаблоне тупо выводит максимальное значение поля цена из базы, как ее правильнее "ЗАПИХАТЬ" (со всех точек зрения чтобы был рабочий вариант), в выше приведенный скрипт за место статического ручками значения 1000000 , так надеюсь правильно изложил! ПС: Потому что тупо вставить в скрипт на место 1000000 вот это {%$max_price%} НЕПРАВИЛЬНО, не будет работать и даже если будет будут глюки так как будут конфликты там из-за символов (это Вы до меня донесли это я понял) |
Часовой пояс GMT +3, время: 10:33. |