Sort-Fields v3 by Sander
Рад наконец-то представить вашему вниманию модуль, позволяющий фильтровать и сортировать новости по значениям доп. полей.
Первые 2 версии так и не получили массового распространения в основном из-за сложности их настройки и использования.
Данную версию в чем-то можно назвать облегченным вариантом предыдущих. Убраны некоторые опции и возможности, не столь гибок в вариантах применения, однако свою основную задачу он выполняет на твердую пятёрочку.
В первую очередь я предлагаю вам ознакомиться с рабочими демо, чтобы представлять себе его возможности с пользовательской точки зрения.
Демо
1. d101.sandev.pro/mobilephone - каталог мобильных телефонов с несколькими основными критериями фильтрации. Цена, бренд, тип телефона, размер дисплея и т.д.
2. d101.sandev.pro/films - раздел с фильмами. Тут уже есть возможность просмотра нескольких категорий, подробнее на алгоритме поиска по категориям я остановлюсь чуть позже. Так же есть возможность фильтрации по году выпуска, рейтингу IMDb и т.д.
3. d101.sandev.pro/estate - раздел недвижимости. К сожалению база довольно таки мала, но основная цель - показать возможность использования множества фильтров.
4. d103.sandev.pro - сайт посвященный фильмам, наиболее приближенный к естественной среде эксплуатации. Для демонстрации работы модуля база фильмов с данными полей взята с сайта kinogo.net.
5. d102.sandev.pro/tires - приемр работы модуля с относительно большой базой, в данном разделе 11676 новостей. На всех демо сайтах внизу предоставлена информация о количестве найденных новостях и время выполнения запроса. Обратите внимание, что чем больше используется полей для фильтрации, тем больше нагрузка.
6. d102.sandev.pro/rims - на данной странице стоит обратить внимание на вид формы выбора количества болтов.
Типы полей
В модуле предусмотрено только 2 типа полей: текствовое и числовое.
Числовой тип можно устанавливать только для тех полей, где в поле указывается именно число в одном из следующих форматов:
12345 - 12345
123,45 - 123.45
123.45 - 123.45
12345 usd - 12345
123.45 $ - 123.45
123,45 руб. - 123.45
12 мин - 12
123,45 - 123.45
123.45 - 123.45
12345 usd - 12345
123.45 $ - 123.45
123,45 руб. - 123.45
12 мин - 12
где через дефис указано число как его будет видеть модуль.
Если в числе будет стоять пробел (для "читаемого" вида) или перед числом будет идти какой-либо текст, то это число будет определяться не правильно:
$12345 - NULL
12 345 руб. - 12
12:34 - 12
12 345 руб. - 12
12:34 - 12
Текстовый тип - основной тип подходящий практически для всех данных. Его можно использовать вообще без ограничений для всех полей, но в некоторых случаях это не разумно. Например если поле - "цена" и в базе 100 товаров, то будет до 100 значений поля. В случае цены и многих других видов данных предпочтительнее использовать тип "число". Исключением могут являться частные случаи, например в демо №6 количество болтов у диска.
Поле принимает всего 3 значения: 3, 4 и 5. Это числа, но в данном случае нет смысла использовать числовой тип поля ради 3х значений. К тому же следует выставлять тип ориентируясь на удобство пользователя. В данном случае, при поиске человека будет интересовать диски с четко определенным количеством болтов. То же самое касается PCD (расстояние между болтами) и радиус. Это фиксированные данные которые у пользователя четко определены, в отличие от того же "вынос ET", когда он может колебаться например в пределах 35-45.
Отдельно стоит отметить, что при поиске в числовом типе в адресной строке указывается само число, а при текстовом - каждому значению поля присваивается индивидуальный индекс и уже по нему производится поиск. Т.е. можно делать фильтрацию, например по году:
d103.sandev.pro/sf/year=2013
Но по аналогии с текстовым полем подобный адрес работать не будет:
[url=http://]d103.sandev.pro/sf/strana=США[/url]
Для значения поля "США" присвоен индекс 34, поэтому адрес должен быть
d103.sandev.pro/sf/strana=34
Админка
Самих настроек в модуле особо и нету. Можно только включить или выключить поля. На скрине ниже предоставлены поля с демо №1-№3, рамками отделены категории.
И вот демо №5 и №6
Если у вас будут вопросы, почему в той или иной ситуации я выбрал тот или иной тип поля - с радостью отвечу в комментариях.
Больше настроек в модуле нету. Для данного функционала их пока и не требуется.
Виды поисковых форм
Отличительной особенностью этой версии является автоматическое создание и формирование списка поисковых полей.
1. Список чекбоксов:
Этот вид позволяет делать фильтрацию одновременно по нескольким полям. Поиск производится по алгоритму "ИЛИ", например:
d101.sandev.pro/mobilephone/sf/brand=11,16
На этой странице выводятся все телефоны бренда HTC и Nokia.
Код шаблона:
<div class="sf-div">
<a href="{include file="engine/modules/sfields/skip.php?field=brand"}" class="sf-div-all">Все</a>
<div class="sf-div-title">Производитель:</div>
<ul class="sf-list">{include file="engine/modules/sfields/list.php?field=brand"}</ul>
</div>
2. Select выпадающий список:
Данный вид имеет смысл применять, когда для пользователя будет достаточно фильтрации только по одному из значений поля.
Код шаблона:
<div class="sf-div">
<div class="sf-div-title">PCD:</div>
<select onchange="window.location = this.value;">{include file="engine/modules/sfields/select.php?field=pcd2"}</select>
</div>
3. Диапазон значений:
Этот вид следует использовать для всех полей числового типа.
Код шаблона:
<div class="sf-div">
<a href="{include file="engine/modules/sfields/skip.php?field=cost"}" class="sf-div-all">Все</a>
<div class="sf-div-title">Цена:</div>
{include file="engine/modules/sfields/range.php?field=cost&val=грн."}
</div>
4. Список полей с выбором одного значения:
Прежде всего хочу отметить, что шаблон предоставленный на скрине - это лишь один из вариантов, как его можно сделать. Вы так же можете настроить шаблона с видом простого списка показанного на первом скриншоте.
Код шаблона:
<div class="sf-div">
<div class="sf-div-title">Количество болтов:</div>
<ul class="sf-list-single">{include file="engine/modules/sfields/list.php?field=pcd1&single=1&nobox=1&nocount=1"}</ul>
</div>
5. Направление сортировки:
Сортировать можно только по числовым значениям полей. По умолчанию сортировка идет по дате (как установлено в настройках движка).
Код шаблона:
<div class="sf-div">
<div class="sf-div-title">Сортировать по:</div>
<select onchange="window.location = this.value;">{include file="engine/modules/sfields/sort.php?fields=price_rims|По цене||et|По ET||dia|По диаметру ступицы"}</select>
<select onchange="window.location = this.value;">{include file="engine/modules/sfields/sort.php"}</select>
</div>
Работа с категориями
Список категорий строится автоматически. При выводе указывается лишь ID родительской категории и все подкатегории будут отображены автоматически.
Код шаблона:
<div class="sf-div">
<a href="{include file="engine/modules/sfields/skip.php?field=x_cat"}" class="sf-div-all">Все</a>
<div class="sf-div-title">Жанр:</div>
<ul class="sf-list">{include file="engine/modules/sfields/cats.php?id=9"}</ul>
</div>
По умолчанию берутся все подкатегории всех уровней. Дополнительно есть возможность либо ограничить выбор до 1го уровня вложенности или вообще вручную указать желаемые ID, пример:
<ul class="sf-list">{include file="engine/modules/sf_light/cats.php?ids=3,5,7,11,13"}</ul>
Алгоритм поиска такой же как у обычного списка чекбоксов, по алгоритму "ИЛИ". Т.е. если отметить 2 или более категории, то будут показаны все новости, где встречается хотя бы одна из отмеченных, например:
d101.sandev.pro/films/sf/x_cat=22,24,21
На этой странице выводятся все фильмы жанра: "музыка", "спорт" или "комедия".
Т.е. фильм может быть:
Музыка и Комедия
Комедия и Боевик
Спорт и Мелодрама
Музыка и Триллер
Спорт и Фантастика
Комедия и Боевик
Спорт и Мелодрама
Музыка и Триллер
Спорт и Фантастика
Но помимо этого так же есть возможность фильтрации по алгоритму "И".
Для этого достаточно зайти в желаемую категорию и там отметить вторую категорию:
d101.sandev.pro/films/voennyy/sf/x_cat=16,18
На это странице выводятся все фильмы жанра "военный", которые так же отмечены в категории "документальный" или "комедия".
Т.е. фильм может быть:
Военный и Комедия
Военный и Документальный
Военный и Документальный и Комедийный
Военный и Комедия и Драма
Военный и Документальный и Боевик
Военный и Документальный
Военный и Документальный и Комедийный
Военный и Комедия и Драма
Военный и Документальный и Боевик
Особенности
— В данный момент все страницы модуля закрыты от индексации, т.к. по своей сути являются результатами поиска. В будущем планируется сделать дополнительный раздел или даже модуль, для управления метатегами и seo-текстами, а так же сделать возможность включать/выключать индексацию для каждой выбранной страницы.
— Крайне не рекомендуется использовать одно поле для разных категорий. Например если использовать поле brand для модели телефона и марки авто, то список будет формироваться один, в нем будут и Nokia и Mercedes.
— Нельзя использовать поля с одинаковым окончанием.
В данном случае как на скриншоте можно ничего не делать, т.к. поля используются в разных категориях и одновременный поиск по этим категориям не возможен. А вот если вы используете поля например cost и usd_cost в одной новости, то при поиске по полю cost товаров с ценой 10-50руб, то так же будут выводиться все другие новости, где в полей usd_cost указана цена 10-50 USD.
В таких случаях следует переименовать поле usd_cost в cost_usd.
Информация для покупки
Снят с продажи
С уважением,
Олег Александрович a.k.a. Sander