Всем привет. Хочу поделиться еще одним готовым решением.
А именно фильтром по доп. характеристикам внутри категории
Выглядеть он может отдельным блоком ссылок. При нажатии на ссылки пользователь попадет на результаты поиска по доп. характеристикам. Например, при поиске фотоаппаратов ему уже не нужно будет в форме поиска вводить вручную кол-во мегапикселей, ему достаточно будет нажать на соответствующую ссылку.
Установка:
- файл 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. Недели через две (а может и раньше) постараюсь описать наиболее используемые таблицы базы данных.





Спасибо за фильтр, установил отлично, однако чего то при нажатии на с генерированный линк, ничего не фильтруется.
http://www.sport-lider.com.ua/category_search/category_search/category/individualnye_2p/
не подскажите в чем проблема ?
спасибо
совсем забыл))))
нужно в редактировании категории найти «Расширенный поиск:» и нажав на «Возможные варианты выбора…», отметить галочкой вашу доп. характеристику
В том то и дело что я для тестируемых категорий устанавливал доп. параметр. (код обновил)
Описываю детально настройки:
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
А я с помощью тэгов и подкатегорий реализовал фильтр товаров.
Как вариант: http://gosha.com.ua/index.php?categoryID=558&category_slug=bodiki-dlinnye
Но не когда у тебя таких фильтров нужно 10-15
Также в фильтре есть один значительный глюк:
Попробуйте отсортировать товары. А потом вам выведет список товаров, удовлетворяющих условию. Нажмите кнопку «Купить», но товар не добавится в корзину.
Как это решить?
Зачем удалять комментарии?
Андрей, какой ваш комментарий был удален?
Может он просто не успел пройти предмодерацию?!
Теперь ваши комментарии появляются сразу после публикации
если какой-то комментарий все-таки был удален, значит произошла ошибка. напишите, пожалуйста, его еще раз.
спасибо
Супер работает, спасибо!!!
Почему-то в каждой категории отображаются все фильтры.
В category.tpl.html пишу:
{filtr param=’25′}
{filtr param=’28′}
Как описано: «1. Если в этой категории таких характеристик нет, то ничего не показывается.»
У меня выводятся ВСЕ фильтры.
Помогите побороть глюк/баг. Спасибо
Обновил код плагина
Огромное спасибо, все вышло, фильтры работают.
Думаю если чуток подумать можно забацать очень хорошую штуковину
Но есть несколько недочетов
Не указывается название параметра(доп. характеристики по которой происходит фильтр)
Плюс дублируется название указываемое, как заменяемое для «filtr»
В принципе вещи поправимые