Зачем 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.
|