Делаем развесистый фильтр товаров (обкатка, написание, дополнения)
#41
Отправлено 09 March 2012 - 04:52 PM
#42
Отправлено 09 March 2012 - 05:28 PM
Повторяю (цитата из предыдущего сообщения): "Она так и должна работать, именно так и написано"Точка не ставиться в кружочке, на кнопочке "ВСЕ"
#43
Отправлено 10 March 2012 - 02:12 PM
#44
Отправлено 10 March 2012 - 03:43 PM
В "общих настройках" есть опция "Отключать товар если он закончился на складе".Минимальная и максимальная цена берется учитывая все товары в группе не смотря даже на остаток на складе равный нулю
Она исключает из показа и штатного поиска товары, которых "ноль"?
Я просто не проверял еще.
Если исключает, то исключу такой товар и из "границ цен", и из "развесистого поиска", когда эта опция включена, это не сложно.
Изначально было так, что движки каждый раз выставлялись заново, соответственно отфильтрованным товарам. Но еще когда оно было не "фильтром", а только "движками" кому-то (вполне разумно, кстати) это показалось неудобным и я сделал сохранение стартового диапазона цен.при выборе определенных условий фильтрации она остается неизменной.
Смотрите на это несколько с другой стороны - как на один из элементов фильтра, параметры которого можно менять (двигая движок либо ставя галочки/точечки), но весь набор выбора (галочек-точечек-диапазона) остается неизменным, т.е. при необходимости можно РАСШИРИТЬ выбор для каждого элемента фильтра.
В случае того, что просите сделать Вы расширить выбор (он же будет сужаться, правда?) можно будет только общим сбросом ВСЕХ фильтров (на тест.сайте это кнопка ResetAll, в шапке пока ее нет) либо придется делать отдельную кнопку "восстановить стартовый диапазон цен" для движков цен. А по хорошему тогда уж и для все остальных элементов исключая недоступные в текущем результате фильтрации варианты.
Для "галочных" элементов фильтра так и предоплагается сделать в конце концов, т.е. "как у больших", только они не пропадать будут, а дизаблиться. С движками оптимально было бы сделать аналогично - оставить стартовый диапазон цен, но disable не попадающих в результат фильтрации участков движка. Т.е. чтобы движки просто было не сдвинуть "шире доступного". К сожалению, использумая js-функция slider из библиотеки query-ui такую фишку сделать не позволяет, так что идея хорошая, но реализуемая весьма не скоро.
#45
Отправлено 10 March 2012 - 04:36 PM
#46
Отправлено 10 March 2012 - 04:53 PM
Это очевидно, ведь если я пишу, что "это несложно сделать", значит это еще не сделано, т.е. нулевое количество товаров на складе (и, как следствие, состояние относящейся к этому галочки) никак не принимается во внимание.Счетчик ({$params[i].variants[j].count}) тоже отображает общее кол-во товара из базы, Не показывать товары которых нет на складе, Отключать товар если он закончился на складе галочка стоит.
Но я ведь спрашивал вовсе не об этом, а о том, влияет ли эта галочка на показ товаров в результатах обычного поиска. Если хочется, чтобы это изменение сделалось достаточно быстро, то у Вас есть шанс ускорить события ответив на этот вопрос, ведь Вы пользуетесь этой фишкой (количество товаров на складе), а я нет. Иначе мне самому придется разбираться, на что влияет эта галочка и я отложу это все "на потом".
#47
Отправлено 11 March 2012 - 04:25 PM
Сделано. Теперь фильтр строится принимая во внимание галки "Вести учет товаров на складе" И "Не показывать товары которых нет на складе". Товары с нулевым количеством не будут участвовать в фильтре если установлены ОБЕ галки. Вечером выложу.Минимальная и максимальная цена берется учитывая все товары в группе не смотря даже на остаток на складе равный нулю
---------- Сообщение объединено ----------
Отличия от предыдущей версии в advanced_search_in_category.php:
1. после
$catIDs = implode(",",recursiveCat($categoryID));
добавить
$conf = db_query("SELECT settings_value FROM ".SETTINGS_TABLE." WHERE settings_constant_name IN ('CONF_CHECKSTOCK','CONF_SHOW_NULL_STOCK')");
$showNullStock = ' AND p.in_stock > 0 ';
while ($row = db_fetch_assoc($conf)) if (!$row['settings_value']) $showNullStock = "";
2. строку
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.')) AND variantID='.$row['variantID']));исправить на
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.')) AND variantID='.$row['variantID'].$showNullStock));3. строку
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))');исправить на
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))'.$showNullStock);
#48
Отправлено 11 March 2012 - 07:07 PM
В штатном filter.tpl.html для кнопочки "Показать" сделана такая конструкция:
<div align="left">
<table cellspacing="0" cellpadding="0" class="fsttab">
<tr>
<td>
<table cellspacing="0" cellpadding="0" class="sectb">
<tr>
<td><a href="#" onclick="validate_search(this); return false">{$smarty.const.VIEW_BUTTON}</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
на мой вгляд она на ура заменяется (что и сделано)
<input type="button" value="{$smarty.const.VIEW_BUTTON}" onclick="validate_search(this); return false">
Вопрос традиционен: чего я не вижу, чего я не понимаю, по какой причине автор городил этот HTML-код вместо input type="button" ?
---------- Сообщение объединено ----------
Выложил.Вечером выложу.
#50
Отправлено 11 March 2012 - 07:17 PM
Хм... А смысл-то в чем? Если бы оно городилось таблицей чтобы сделать в виде чего-то... эээ.. этакого - было бы понятно. Можно было сделать кнопку, но автор решил сделать поразвесистее и покрасивее, потратив еще 10 строк и 100байт. А тут-то как раз сделано максимально похоже на собственно кнопку. Я потому и спрашиваю, чего я такого не понимаю?таблицами оформлен стиль ссылки в виде кнопки, тоесть городилось это для нешнего вида.
Пока пришло в голову только то, что, возможно, в других шаблонах с другим css input-type-button не покатит, а такое решение автоматически впишется в штатный дизайн шаблона (кнопка сразу в штатной палитре), но как-то оно от лукавого. Хотя бы потому, что filter.tpl.html не един для всех шаблонов, а в каждом шаблоне свой, т.е. переписывай-не-хочу.
#51
Отправлено 11 March 2012 - 07:30 PM
Фильтр цены срабатывает, характеристики тоже подсчет верный, есть у меня такая характеристика как производитель, так вот отображает бренд и в скобках кол-во 0 пример ROLSEN (0)Сделано. Теперь фильтр строится принимая во внимание галки "Вести учет товаров на складе" И "Не показывать товары которых нет на складе". Товары с нулевым количеством не будут участвовать в фильтре если установлены ОБЕ галки.
#52
Отправлено 11 March 2012 - 08:06 PM
Завтра на свежую голову я подумаю на этой фразой. Глядишь, чего и вычленится разумного. Сейчас просто нифига не понял. Либо попробуйте написать как-то... эээ... по другому, чтоли.Фильтр цены срабатывает, характеристики тоже подсчет верный, есть у меня такая характеристика как производитель, так вот отображает бренд и в скобках кол-во 0 пример ROLSEN (0)
#53
Отправлено 11 March 2012 - 08:10 PM
#54
Отправлено 11 March 2012 - 08:21 PM
Я правильно понимаю, что проблема в том, что не должно быть строчек фильтра с нулем в количестве таких продуктов?Вид сбоку. Отображает дополнительную характеристику и рядом значение - 0
#55
Отправлено 12 March 2012 - 07:43 AM
#56
Отправлено 12 March 2012 - 02:43 PM
Мне не удалось такого добиться, но я понял, в чем дело. В шапке присутствуют все исправления, а описывая отличия я одно исправление упустил. Видимо, Вы изменяли файл не "целиком из шапки", а из сообщения об отличиях. Короче, вот "забытое" отличие от предыдущей версии:Вид сбоку. Отображает дополнительную характеристику и рядом значение - 0
строку
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))заменить на
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))'.$showNullStock.'мои извинения.
---------- Сообщение объединено ----------
Опаньки! А ведь не проверив ляпнул. В шапке-то тоже этого исправления нет!
Исправил.
#57
Отправлено 12 March 2012 - 11:20 PM
И снова я со своими баранами ))Я подумаю, как можно сделать исключения или что-то другое используя ставшие не нужными настройки фильтра в категориях.
Т.е. оставить их, но использовать по другому. Предложения принимаются.
1. есть характеристика по которой не нужно фильтровать товар - можно ее будет в фильтре не показывать?
2. есть характеристика (цвет) у которой больше ста возможных значений - можно ли для нее произвольную строку в фильтр вставить (вместо чек-боксов)?
#58
Отправлено 12 March 2012 - 11:59 PM
"Не показывать" как раз не сложно. Сложно придумать как и где это задавать-настраивать .1. есть характеристика по которой не нужно фильтровать товар - можно ее будет в фильтре не показывать?
Например, можно ставить галку в настройке характеристик товаров в Главной категории, где эта настройка даже штатно не нужна и по факту не используется. Т.е. значение галки станет ровно обратным штатному.
Опять же надо придумать, как это по человечески реализовать. Мне пока не приходит в голову ничего кроме "если вариантов параметра больше NN, то используем произвольную строку вместо чекбоксов". И в функции _testExtraParametrsTemplate надо будет как-то этот момент отрабатывать более сложным SELECT-ом.2. есть характеристика (цвет) у которой больше ста возможных значений - можно ли для нее произвольную строку в фильтр вставить (вместо чек-боксов)?
PS. Упс! У Главной категории нет возможности редактирования . Значит, будет "в этой категории и низлежаших". "В этой" - легко. "В низлежащих" - чтобы в каждой дочерней галочки проставлять не пришлось - сложнее, но тоже решаемо.
#59
Отправлено 13 March 2012 - 11:54 AM
#60
Отправлено 13 March 2012 - 03:00 PM
Необходимые для вывода бегунка ява-библиотеки грузятся в head.tpl.htmlЧто-то не работает бегунок от подбора по цене. точнее его просто нет. В каком месте копать
Ява-функция вывода бегунка (использующая эти библиотеки) находится в filter.tpl.html
Нахождение min-max-значений для бегунка происходит в advanced_search_in_category.php
Ну а смотреть, как всегда, в логи. Редко когда при некорректной работе чего либо в логах нет сообщений о какой-либо ошибке.
PS. filter.tpl.html и так целиком из рабочего модуля запощен, а advanced_search_in_category.php я только что ради чистоты проверки изменил именно "из шапки" - у меня все работает.
PPS. Думаю, что у Вас какие-то проблемы с работой ява-функции, т.к. даже если min-max-значения будут находиться неверно или не находиться вообще, то сам движок все равно будет появляться, просто с неверными значениями.
---------- Сообщение объединено ----------
Нашел ляпу.
Если в категориях поставлены галочки в доп.характеристиках, то фильтр выдает странные результаты поиска.
Вроде, везде убирал какое-либо задействование этих галочек (таблица xxxx_category__product_options), но где-то явно недоубирал.
Если галки не стоят, то все нормально работает.
Только начал возможность "произвольной строки" и "не показывать в фильтре" - тут-то оно и вылезло.
Исправлю, но не сегодня.