Фильтры в Webasyst Shop-Script

26

Всем привет. Хочу поделиться еще одним готовым решением.

А именно фильтром по доп. характеристикам внутри категории

Выглядеть он может отдельным блоком ссылок. При нажатии на ссылки пользователь попадет на результаты поиска по доп. характеристикам.  Например, при поиске фотоаппаратов ему уже не нужно будет в форме поиска вводить вручную кол-во мегапикселей, ему достаточно будет нажать на соответствующую ссылку.

Установка:

  • файл 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=&param_'.$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;
	}
?>

Что умеет фильтр и что не умеет:

  1. Если в этой категории таких характеристик нет, то ничего не показывается.
  2. Ищет и в подкатегориях.
  3. Можно использовать неограниенное кол-во фильтров на странице.
  4. Работает с доп. характеристиками, которые вводятся вручную, а не выбираются из списка.
  5. Работает только при включенном ЧПУ.
  6. Если на странице подключены несколько фильтров, то работают они по очереди. То есть выборку можно сделать только по одному из них.
  7. Работает с русскими значениями.
  8. Нужно в редактировании категории найти «Расширенный поиск:» и нажав на «Возможные варианты выбора…», отметить галочкой вашу доп. характеристику.
  9. Для родительских категорий нужно отмечать галочкой «Показывать пользователю продукты из подкатегорий при просмотре этой категории»

Все, чего не хватает, можно доработать в версии Pro.
Для заказа обращайтесь через страницу обратной связи (в сообщении не забывайте указывать какой именно плагин вам нужен).

P.S. Недели через две (а может и раньше) постараюсь описать наиболее используемые таблицы базы данных.



| | Еще

Просмотров: 590

Похожие записи:

    26 Комментариев

    1. FedorNo Gravatar:

      Спасибо за фильтр, установил отлично, однако чего то при нажатии на с генерированный линк, ничего не фильтруется.
      http://www.sport-lider.com.ua/category_search/category_search/category/individualnye_2p/

      не подскажите в чем проблема ? :)

      спасибо

      • vkontakte.ru АртемNo Gravatar:

        совсем забыл))))

        нужно в редактировании категории найти «Расширенный поиск:» и нажав на «Возможные варианты выбора…», отметить галочкой вашу доп. характеристику

        • FedorNo Gravatar:

          В том то и дело что я для тестируемых категорий устанавливал доп. параметр. (код обновил)
          Описываю детально настройки:
          1. В доп. характеристика создал параметр «Торговая марка» (айди 18) без возможных вариантов выбора
          2. Установил данную хар-ку для категорий (Орбитреки,Индивидуальные,Профессиональные)
          3. Установил значения для некоторых товаров в этих категориях (Titan, Life Gear)

          Все равно не филтруется :(

          • FedorNo Gravatar:

            а… походу у меня навернулся сам скрипт поиска вообще, куда делаются запросы.

    2. vkontakte.ru АртемNo Gravatar:

      и обновил немного код php файла

    3. ИванNo Gravatar:

      Вот только не совсем ясно куда этот код вставлять? Ведь для отдельной категории не получится.

    4. vkontakte.ru АртемNo Gravatar:

      вставлять в редакторе дизайна

    5. ИванNo Gravatar:

      Это понятно, но если на каждую категорию нужен свой набор фильтров, как это можно реализовать?

    6. ИванNo Gravatar:

      Или как забить эту функцию «filtr» в описание каждой категории? Теоретически если возможно в каждую категорию ставить описания, то может можно поставить и какую нибудь функцию?

    7. vkontakte.ru АртемNo Gravatar:

      в опиисание никак. нужно вставлять в шаблон категории

      чтобы для каждой категории использовать свой, то нужно фильтровать по id категории

      {if $smarty.get.categoryID}

      {/if}

    8. ИванNo Gravatar:

      Странно как то..Вставил {filtr param=’ХХ′} он заработал, но потом резко исчез, и теперь вообще не работает, хотя все доп. характеристики забиты.

    9. FedorNo Gravatar:

      Для того, что бы сделать фильтры индивидуальными для каждой категории в которых есть товары, достаточно чуть модифицировать зарос
      $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'].’»‘;

      • АндрейNo Gravatar:

        Вы вставляете этот код в файл:function.filtr.php
        Если да, то вот вместо этого: $sql=’SELECT DISTINCT(option_value_ru) as value FROM SC_product_options_values WHERE optionID=»‘.$params['param'].’»‘;

        ?

    10. FedorNo Gravatar:

      А для того что бы и в корневых категориях отображались фильтры, делаем так:

      $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'].’»‘;

      • ИанNo Gravatar:

        Если не сложно, выложите ваш function.filtr.php и строку где у Вас {filtr param=}. Все вставляю, доп характеристики стоят, но самого фильтра нет.

        • FedorNo Gravatar:

          Моя функция отличается от функции автора исключительно строкой запроса.
          Возможно вы не туда вставляете вызов фильтра, я вставил в published\SC\html\scripts\repo_themes\tableware\category.tpl и \published\SC\html\scripts\templates\frontend\advanced_search_in_category.tpl

          • АндрейNo Gravatar:

            Отправьте пожалуйста свой файл function.filtr.php
            Поскольку в комментариях идет не совсем точная передача кода и у меня ругается на ошибку.

            Мой e-mail:prosto-andryxa@i.ua

    11. ЕвгенийNo Gravatar:

      А я с помощью тэгов и подкатегорий реализовал фильтр товаров.
      Как вариант: http://gosha.com.ua/index.php?categoryID=558&category_slug=bodiki-dlinnye

    12. АндрейNo Gravatar:

      Также в фильтре есть один значительный глюк:
      Попробуйте отсортировать товары. А потом вам выведет список товаров, удовлетворяющих условию. Нажмите кнопку «Купить», но товар не добавится в корзину.
      Как это решить?

    13. АндрейNo Gravatar:

      Зачем удалять комментарии?

      • vkontakte.ru АртемNo Gravatar:

        Андрей, какой ваш комментарий был удален?
        Может он просто не успел пройти предмодерацию?!
        Теперь ваши комментарии появляются сразу после публикации

        если какой-то комментарий все-таки был удален, значит произошла ошибка. напишите, пожалуйста, его еще раз.
        спасибо

    14. Flip:Who?No Gravatar:

      Супер работает, спасибо!!!

    15. Flip:Who?No Gravatar:

      Почему-то в каждой категории отображаются все фильтры.
      В category.tpl.html пишу:
      {filtr param=’25′}
      {filtr param=’28′}
      Как описано: «1. Если в этой категории таких характеристик нет, то ничего не показывается.»
      У меня выводятся ВСЕ фильтры.
      Помогите побороть глюк/баг. Спасибо

    16. vkontakte.ru АртемNo Gravatar:

      Обновил код плагина

    17. ЕвгенийNo Gravatar:

      Огромное спасибо, все вышло, фильтры работают.
      Но есть несколько недочетов :(
      Не указывается название параметра(доп. характеристики по которой происходит фильтр)
      Плюс дублируется название указываемое, как заменяемое для «filtr»
      В принципе вещи поправимые :) Думаю если чуток подумать можно забацать очень хорошую штуковину :)

    Оставить комментарий


    WebComplIT banner
    © 2008-2010 EasyWeb.org.ua. All rights reserved.