Фильтры в Webasyst Shop-Script
Всем привет. Хочу поделиться еще одним готовым решением.
А именно фильтром по доп. характеристикам внутри категории
Выглядеть он может отдельным блоком ссылок. При нажатии на ссылки пользователь попадет на результаты поиска по доп. характеристикам. Например, при поиске фотоаппаратов ему уже не нужно будет в форме поиска вводить вручную кол-во мегапикселей, ему достаточно будет нажать на соответствующую ссылку.
Установка:
- файл function.filtr.php ложим в папку /kernel/includes/smarty/plugins
- в админке магазина создаем строку перевода (админка — магазин — дизайн — язык и переводы — редактировать перевод) с ID filtr_title
- в нужном месте (в разметке странице) вставляем вывод этого фильтра {filtr param=’18′}, где 18 — это id вашей доп. характеристики
Чтобы узнать id вашей доп. характеристики, зайдите в управление Доп. характеристиками в админке и наведите на значек
(удалить) и в статусной строке браузера увидите длинную ссылку, в конце этой ссылки будет что-то типа &optionID=88, вот 88 и есть наш id
Содержание файла function.filtr.php
<?php function smarty_function_filtr( $params, &$smarty ) { $disp=''; $ids=getid($_GET['categoryID']); $s=implode(",",$ids); if(isset($_GET['categoryID']) && $_GET['categoryID']!=1 && $_GET['categoryID']!=''){ $sql='SELECT DISTINCT(option_value_ru) as value FROM SC_product_options_values WHERE optionID="'.$params['param'].'" AND productID in ('.$s.')'; if($r=mysql_query($sql)){ $disp.='<div class="filtr_box"><h2>'.translate('filtr_title').'</h2><ul class="smenu">'; while($res=mysql_fetch_assoc($r)){ if($res['value']!=''){ $disp.='<li><a href="/category_search/?search_with_change_category_ability=yes&categoryID='.$_GET['categoryID'].'&search_name=&search_price_from=&search_price_to=¶m_'.$params['param'].'='.trim(str_replace(" ", "+", $res['value'])).'&search_in_subcategory=1&advanced_search_in_category=?????">'.trim($res['value']).'</a></li>'; } } } $disp.='</ul></div>'; } return $disp; } function getid($cat){ $ids=array(); $sql0='SELECT categoryID FROM SC_categories WHERE parent="'.$cat.'" OR categoryID="'.$cat.'"'; if($r0=mysql_query($sql0)){ while($res0=mysql_fetch_assoc($r0)){ $sql='SELECT productID FROM SC_products WHERE categoryID="'.$res0['categoryID'].'"'; if($r=mysql_query($sql)){ while($res=mysql_fetch_assoc($r)){ $ids[]=$res['productID']; } } } } return $ids; } ?>
Что умеет фильтр и что не умеет:
- Если в этой категории таких характеристик нет, то ничего не показывается.
- Ищет и в подкатегориях.
- Можно использовать неограниенное кол-во фильтров на странице.
- Работает с доп. характеристиками, которые вводятся вручную, а не выбираются из списка.
- Работает только при включенном ЧПУ.
- Если на странице подключены несколько фильтров, то работают они по очереди. То есть выборку можно сделать только по одному из них.
- Работает с русскими значениями.
- Нужно в редактировании категории найти «Расширенный поиск:» и нажав на «Возможные варианты выбора…», отметить галочкой вашу доп. характеристику.
- Для родительских категорий нужно отмечать галочкой «Показывать пользователю продукты из подкатегорий при просмотре этой категории»
Все, чего не хватает, можно доработать в версии Pro.
Для заказа обращайтесь через страницу обратной связи (в сообщении не забывайте указывать какой именно плагин вам нужен).
P.S. Недели через две (а может и раньше) постараюсь описать наиболее используемые таблицы базы данных.


Спасибо за фильтр, установил отлично, однако чего то при нажатии на с генерированный линк, ничего не фильтруется.
не подскажите в чем проблема ?
спасибо
совсем забыл))))
нужно в редактировании категории найти «Расширенный поиск:» и нажав на «Возможные варианты выбора…», отметить галочкой вашу доп. характеристику
В том то и дело что я для тестируемых категорий устанавливал доп. параметр. (код обновил)
Описываю детально настройки:
1. В доп. характеристика создал параметр «Торговая марка» (айди 18) без возможных вариантов выбора
2. Установил данную хар-ку для категорий (Орбитреки,Индивидуальные,Профессиональные)
3. Установил значения для некоторых товаров в этих категориях (Titan, Life Gear)
Все равно не филтруется
а… походу у меня навернулся сам скрипт поиска вообще, куда делаются запросы.
и обновил немного код php файла
Вот только не совсем ясно куда этот код вставлять? Ведь для отдельной категории не получится.
вставлять в редакторе дизайна
Это понятно, но если на каждую категорию нужен свой набор фильтров, как это можно реализовать?
Или как забить эту функцию «filtr» в описание каждой категории? Теоретически если возможно в каждую категорию ставить описания, то может можно поставить и какую нибудь функцию?
в опиисание никак. нужно вставлять в шаблон категории
чтобы для каждой категории использовать свой, то нужно фильтровать по id категории
{if $smarty.get.categoryID}
…
{/if}
Странно как то..Вставил {filtr param=’ХХ′} он заработал, но потом резко исчез, и теперь вообще не работает, хотя все доп. характеристики забиты.
Для того, что бы сделать фильтры индивидуальными для каждой категории в которых есть товары, достаточно чуть модифицировать зарос
$sql=’SELECT DISTINCT(pov.option_value_ru) as value FROM SC_product_options_values AS pov
INNER JOIN SC_products AS p
ON p.productID = pov.productID AND p.categoryID = ‘ . $_GET['categoryID'] . ‘
WHERE pov.optionID=»‘.$params['param'].’»‘;
Вы вставляете этот код в файл:function.filtr.php
Если да, то вот вместо этого: $sql=’SELECT DISTINCT(option_value_ru) as value FROM SC_product_options_values WHERE optionID=»‘.$params['param'].’»‘;
?
А для того что бы и в корневых категориях отображались фильтры, делаем так:
$sql=’SELECT DISTINCT(pov.option_value_ru) as value FROM SC_product_options_values AS pov
INNER JOIN SC_categories AS c
ON c.categoryID = ‘ . $_GET['categoryID'] . ‘ OR c.parent = ‘ . $_GET['categoryID'] . ‘
INNER JOIN SC_products AS p
ON p.productID = pov.productID AND c.categoryID = p.categoryID
WHERE pov.optionID=»‘.$params['param'].’»‘;
Если не сложно, выложите ваш function.filtr.php и строку где у Вас {filtr param=}. Все вставляю, доп характеристики стоят, но самого фильтра нет.
Моя функция отличается от функции автора исключительно строкой запроса.
Возможно вы не туда вставляете вызов фильтра, я вставил в published\SC\html\scripts\repo_themes\tableware\category.tpl и \published\SC\html\scripts\templates\frontend\advanced_search_in_category.tpl
Отправьте пожалуйста свой файл function.filtr.php
Поскольку в комментариях идет не совсем точная передача кода и у меня ругается на ошибку.
Мой e-mail:prosto-andryxa@i.ua
А я с помощью тэгов и подкатегорий реализовал фильтр товаров.
Как вариант:
Но не когда у тебя таких фильтров нужно 10-15
Также в фильтре есть один значительный глюк:
Попробуйте отсортировать товары. А потом вам выведет список товаров, удовлетворяющих условию. Нажмите кнопку «Купить», но товар не добавится в корзину.
Как это решить?
Зачем удалять комментарии?
Андрей, какой ваш комментарий был удален?
Может он просто не успел пройти предмодерацию?!
Теперь ваши комментарии появляются сразу после публикации
если какой-то комментарий все-таки был удален, значит произошла ошибка. напишите, пожалуйста, его еще раз.
спасибо
Супер работает, спасибо!!!
Почему-то в каждой категории отображаются все фильтры.
В category.tpl.html пишу:
{filtr param=’25′}
{filtr param=’28′}
Как описано: «1. Если в этой категории таких характеристик нет, то ничего не показывается.»
У меня выводятся ВСЕ фильтры.
Помогите побороть глюк/баг. Спасибо
Обновил код плагина
Огромное спасибо, все вышло, фильтры работают.
Думаю если чуток подумать можно забацать очень хорошую штуковину
Но есть несколько недочетов
Не указывается название параметра(доп. характеристики по которой происходит фильтр)
Плюс дублируется название указываемое, как заменяемое для «filtr»
В принципе вещи поправимые
Заметил, что если позиция кроме основной категории входит и в дополнительную, то в дополнительной она не фильтруется. Можно как-то исправить?
нужно включить «показывать в категории продукты из подкатегорий»
Включено на всех категориях
Хрень кая та а не фильтры, почему до сих пор нет ни одного нормального бесплатного решения. Облазил все форумы — ничего толкового, нашел норм здесь но стоит 90 баксов, можете разработать чет подобное? чтоб нормально фильтровало
наш народ )
чего ругаетесь? напишите свое решение.
подобное можем, бесплатно — только то, что здесь описано.
описан принцип, а дальше уже каждый делает себе что ему нравится.
«будь проклят тот день когда я сел за баранку этого вебасиста»
Все сделал как выше описывалось и ничего не выводится
Ps: помогите !!!! ))))
Это решение уже устарело скорее всего.
На новых обновлениях я его не проверял
Через месяц или позже будет новый фильтр.
да я вот смотрю как в резетке сделано и облизуюсь ))) то что мне надо )))
можете сделать так же или заказать такую доработку
вот и сижу голову ломаю как так сделать )))
Ps: мб кто то даст сырой вариант )))) (который надо будет подредактировать)
Спросите у Owox’a, они сейчас занимаются поддержкой розетки)))
Уважаемый Андрей, что Вы можете сказать про WebAsyst версии 3.0x? Станет ли этот фильтр?
по поводу Андрея не знаю, а я не проверял это решение в обновлениях 300 и выше
теоретически должно, но не исключено что потребуются небольшие изменения
У меня вообще расширенного поиска нет почему то
или я его найти не могу?
В категории поставил галку расширенный поиск. Выбрал по каким параметрам будет возможен поиск…
И чет ни че не работает…
скажите что не так делаю?!
Разобрался)
Теперь у меня другая проблема…
Описание товара это доп характеристики…
И почему то.. скрипт их выводит селектами а не простым текстом. Где это можно исправить?
Вставляю в шаблон {filtr param=’15′} но выводиться только тайтл, доп. характеристики для категории включил. И вот не пойму, Ид нужно просто в апострофах указывать, а то то что я копирую там два разных апострофа, не понятно совсем
не в апострофах, а в кавычках
в одинарных или в двойных
Попробовал по разному, в двойных скобках тоже, но все равно отображается только тайтл. Версия WA 300
Встало у кого на 300??
У меня на 300 так и не заработало
а вопрос заключается в том «заработало» или «встало»?
а если серьезно, то я уже писал по этому поводу выше в комменатриях
http://easyweb.org.ua/shop-script/filtry/#comment-715
А будете дорабатывать? Или решение уже есть но в паблик выкладывать не будет
решения пока нет. в планах новое решение фильтров есть
но пока не готов назвать сроки
очень надеюсь до нового года, но обещать боюсь
В любом случае большое спасибо за работу!
И будем ждать дальнейшей разработки..
У меня почемуто просто выводит «filtr»…
На 300 фильтр выводится, но загвоздка в том, что вместо ID бренда выводится само название бренда, если это поправить то все заработает, может кто-то знает как это сделать?
Поправьте меня, если я ошибаюсь, но это решение не защищено от SQL инъекций.
не знаю или на каком нибудь из уровней выполнения кода происходит фильтрация запроса, но я непосредственно при подготовке sql запроса использовал ф-цию mysql_real_escape_string()
и еще:
когда название любой доп. характеристики включает в себя название доп.характеристики, по которой производится фильтрация в результате фильтрации (по сути — поиска) получаем желаемые товары + товары с более короткой доп.характеристикой.
решил изменением строки с запросом в файле published/SC/html/scripts/core_functions/product_functions.php, метод _prepareSearchExtraParameters (убрал знаки %)
да, это решение не защищено
без дополнительной доработки это решение вообще мало что умеет, это скорее «заготовка»
Планируется ли доработка и оптимизация скрипта, из всего подобного это лучшее решение, хотелось бы видеть его в финальном виде, я думаю меня многие в этом поддержат!
Непонятная статья….как будто писалось для себя а не для читателей, пишиите пожалуйста более доходчиво.
Кстати…впервые столкнулся с вебасистом, раньше делал сайты на престашоп, джумла и опенкарт, немного работал с битрикс, вебассист это полный шлак по сравнению даже с джумлой — ужасная документация, деревянность шаблона и за это еще и платить нужно. Уж лучше заказать нормальный хостинг и поставить magento.
к несчастью, это мой личный блог. и многие записи сделаны действительно для себя.
попробуйте прочитать статью еше раз или спросить то,что вам не понятно, а не рассказывать о том какая это ужасная система
Вот как раз виртумарт на джумле самый шлак. Мало того что ужасное в плане разработки и администрирования так еще и ресурса хавает мама не горюй
При прямых руках WS отличный движок.
2invole-rc.d — коль не нравится двиг — какого лешего ты им пользуешься? Бери джумлу с говнокодом и работай. Документации для WS предостаточно на официальном сайте, было бы желание
P.S. Благодарить должны Артема, за то что он выкладывает полезные дополнения у себя на блоге, тем более бесплатно.