Как сделать удобный фильтр поиска?

Енот
Новичо́к, через «о́»
Регистрация
24 Окт 2019
Сообщения
154
#1
Занимаюсь разработкой удобного фильтра поиска, и возник вопрос по выводу данных.
Вывод должен работать на индексе, и на всех списках контента вкл. поиск.

Вывод названий всех категорий
Вывод названий всех годов
Вывод названий всех стран

Спасибо!
 
Енот
Новичо́к, через «о́»
Регистрация
7 Ноя 2018
Сообщения
200
#2
поделись потом разработкой)
 
Енот
Новичо́к, через «о́»
Регистрация
24 Окт 2019
Сообщения
154
#4
Логика работы фильтра планируется такая:
1. выбор типа контента (все, фильм, сериал, мультфильм, тв)
2. выбор категории контента (комедия, боевик, фантастика...)
3. выбор года ( 2020,2019,2018...)
4. выбор страны (сша, россия, украина....)

Далее есть у нас урлы вида:
1. domain.tv/type/фильмы , domain.tv/type/сериалы ....
2. для категорий параметр genre="название категории"
3. для года параметр year="название года"
4. для страны параметр country="название страны"

фильтр должен понимать и определять переменные в урле. (для этого я написал на квери скрипт который разбирает window.location.href на параметры, и полученные параметры подставляю в элементы.
пример1 если есть в урле /type/фильмы , то в поле выбранного типа я подставляю фильмы, если нет парамента null значение (все).
пример2 если есть в урле year="2020" , то берем переменную забираем только ее значение 2020 и подставляем в элемент года, если 0 значение или нет параметра выводим все.
и так далее по всем параметрам.

далее, выбор и формирование нового урла.
если выбираем значение типа, категории, года, страны , то делаем проверку есть ли в урл ? в конце , если нет добавляем, для первого параметра.
далее в урлу подставляем нужные переменные, в них нужные значения.

получаем удобную навигацию по контенту которая позволяет быстро и удобно делать выборку любого контента.

!!! Теперь вопросы:

Сначала использовал селекты, но даже после кастомизации получилась некрасивая лажа. в итоге писал с нуля дропы аналоги селектов, только со скролингом области элементов дропа. если значений категорий много, чтобы дроп не был космической высоты.
Вот пример моего дропа

<div class="dr" id="айдишник">
<b><i>Год</i><u>Default</u></b>
<span>
<a href="#">Все года</a>
<a href="#" class="active>2020</a>
<a href="#">2019</a>
<a href="#">2018</a>
<a href="#">2017</a>
</span>
</div>

год - это подсказка которая появляется место значения default при открытии дропа (клике).
default - это значение выбранного элемента, делается проверка урлы на наличие переменной , берется сама переменная и ее значение подставляется сюда.
все года - сбрасывает значение переменной
2020 - активный элемент, тоже проверка урлы на наличие переменной, далее each функцией прогоняем весь массив элементов a , ищем название переменной и если оно есть подставляем активный класс на ссылку с нужным текстом.
2019.... - неактивный элемент, при клике берется значение и подставляется в переменную года.

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

так вот чтобы мне вывести весь массив данных необходимо на стороне скрипта в темплейте выгнать все названия - категорий, стран, годов.

пример
{начало массива - массив категорий}
<a href="">Переменная названия категории</a>
{конец массива}

массив должен вывести список <a> со всеми категориями. без линок просто названия всех категорий в бд.
и далее такие же массивы нужны для вывода всех годов, и вывода всех стран.
 
Енот
Новичо́к, через «о́»
Регистрация
24 Окт 2019
Сообщения
154
#5
Теперь вторая часть

у нас есть элементы ,
сортировка контента (дата премьеры, год выпуска, популярность по imdb (кп) , рейтинг по imdb (кп) )
топ ( Фильмов по IMDb (кп),Сериалов по IMDb (кп),Мультфильмов по IMDb (кп),тв по imdb (кп) )

тут метод тот же самый что и выше, за исключением массивов, массивы тут не нужны ибо будут линки сортировок уже вбиты, будем делать проверку на выбранный парамер и подставлять в .dr , и соотв при клике добавлять значение в параметр.
 
Регистрация
15 Дек 2017
Сообщения
5,067
#6
Ясно, Вам нужен список стран, жанров, годов для показа в шаблоне.

Сейчас есть такой массив, это
page.urls.years
page.urls.genres
page.urls.countries

Это массив объектов, которые имеют свойства title и url
Код:
<% page.urls.genres.forEach(function(genre) { %>
  <a href="<%- genre.url %>"><%- genre.title %></a>
<% }); %>
Задается этот список в Админ-панель - Отображение.

Жанры: фантастика, боевик, триллер, драма, детектив, комедия, биография, криминал, мелодрама, история, военный, приключения, фэнтези, вестерн, мультфильм, мюзикл, семейный, ужасы, музыка, аниме, спорт, короткометражка, документальный, детский, новости, ток-шоу, игра, фильм-нуар
Страны: США, Великобритания, Франция, Германия, Канада, СССР, Новая Зеландия, Мальта, Марокко, Австралия, Россия, Япония, Чехия, ЮАР, Гонконг, Тайвань, Польша, Италия, Китай, Сингапур, Бельгия, Индия, Ирландия, Швеция, Норвегия, ОАЭ, Испания, Венгрия, Мексика, Нидерланды, Багамы, Аргентина, Германия (ФРГ), Корея Южная, Швейцария, Исландия, Бразилия, Дания, Финляндия, Украина, Словения, Беларусь, Эстония, Румыния, Австрия, Греция, Кипр, Болгария, Камбоджа, Лихтенштейн, Индонезия, Чехословакия, Сербия, Колумбия, Люксембург, Словакия, Армения
Годы: 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1949, 1947, 1942, 1939, 1937, 1931