Фильтр по tv-параметрам в Modx Revolution с помощью tagManager2
Всем доброго здравия. В этой статье я расскажу как сделать фильтр документов по tv-параметрам на сайте под управлением Modx Revolution. Мы будем использовать сниппет tagManager2 от Аndchir. Этот сниппет умеет работать сразу с несколькими tv, а также с числовыми данными (в виде цены) и множественным списком. Каждый этот пример мы разберем далее.
1. Для начала нужно установить tagManager2
Для этого идем в Приложения/Установщик/
жмем кнопку «Загрузить дополнение» и в строке поиска вбиваем tagManager2
Также еще нужно установить сниппет getPage и getProducts. Таким образом раздел «Управление пакетами» должен выглядеть так (сниппет translit, кстати, отвечает за транслитерацию псевдонимов на латиницу)
Загружаем, устанавливаем пакеты и идем в «Настройки системы»
2. Настраиваем сниппет tagManager2
В Системных настройках выбираем раздел tag_manager2
Мы увидим параметры настройки фильтра
Там все достаточно просто и понятно, но все же:
- В «ID ресурса каталога верхнего уровня» указываете id шаблона каталога или категории, где будут фильтроваться товары или страницы
- В «Дополнительный разделитель множественного списка» ставим знак #. Ниже вы узнаете зачем он нужен
- В «Имена TV или полей с множественным списком» прописываем tv с множественным списком. Как их создать я покажу ниже
- «Имена TV или полей с числовыми значениями» — здесь нужно указать tv-параметры, в которых будут цифры. Обычно это параметр цены. Данный фильтр будет выведен в виде ползунка «от и до»
- В «ID шаблонов товаров» прописываем id страниц, которые нужно фильтровать и к которым прикреплены tv-параметры, указанные выше
- В «Имя набора параметров, используемого для фильтрации» прописываем catalog_filters. Данный шаблон мы будем использовать в шаблонах параметров getPage и getProducts
- Прописать в «Сниппет связанный с набором параметров» название сниппета, который будет осуществлять вывод и пагинацию страниц или товаров. Обычно это getPage.
3. Создаем набор параметров catalog_filters в getPage
Идем в сниппет getPage
Переходим во вкладку «Параметры» и нажимаем на кнопку «Добавить набор параметров». Можно конечно и отредактировать существующий, но тогда есть шанс затирания параметров, которые мы сейчас создадим при обновлении getPage. Если не собираетесь обновлять можете просто редактировать.
Редактируем существующие параметры и присваиваем значения:
Имя | Значение | Что означает |
depth | 2 | глубина поиска документов |
includeTVList | filtr1,filtr2,price | список tv через запятую |
includeTVs | 1 | добавить плейсхолдер значений |
noResults | К сожалению, ничего не найдено. Ослабьте фильтр и попробуйте еще раз | текст при пустом выводе |
tpl | filtr_tpl | чанк вывода результата |
where | {"isfolder:=":0} | не выводить папки |
Создаем новые параметры и присваиваем значения
Имя | Значение | Что означает |
element | getProducts | сниппет вывода документов |
hideContainers | 1 | исключить контейнеры |
limit | 20 | количество выводимых на странице результатов |
pageFirstTpl | <li class="control"><a[[+classes]][[+title]] href="[[+href]]">Первая</a></li> | код первой страницы в паганации |
pageLastTpl | <li class="control"><a[[+classes]][[+title]] href="[[+href]]">Последняя</a></li> | код последней страницы в паганации |
Отредактированные параметры будут отображаться зеленым цветом, созданные — фиолетовым
4. Создаем или редактируем tv параметры для фильтра
Я создал для примера 3 tv-параметра
Название tv | Имя (обязательно) | Тип ввода | Возможное значение |
filtr1 | Флажки (checkbox) | Вариант1==#Вариант1#||Вариант2==#Вариант2#||Вариант3==#Вариант3# | |
filtr2 | Флажки (checkbox) | да==#да#||нет==#нет#||наверное==#наверное# | |
price | Текст или число |
Особое внимание хочу привлечь к тому, что нужно указывать Имя (Заголовок) tv-параметра, а иначе он может просто не отображаться в модуле управления фильтрами
5.Создаем чанк filtr_tpl
Этот чанк отвечает за вывод каждого отдельно результата в getProducts
6. Создаем структуру в дереве документов
У меня она выглядит так:
Главная страница у нас с ID 1, а у товаров id шаблона 1 (это у нас стоит в настройках tag_manager2, если у Вас другие значения, не забудьте поменять в настройках)
7. Редактируем filters.js
Идем по адресу /assets/components/tag_manager2/js/web/filters.js и вместо
multitags: ['tags'],//Имена доп. полей с множественными значениями
вставляем код с нашими подставленными значениями
multitags: ['filtr1', 'filtr2'],//Имена доп. полей с множественными значениями
Здесь все предельно просто и понятно. Мы вставили свои tv-поля с множественными значениями. А вообще это конфиг всех настроек (но лучше без разрешения больших дяденек их не трогать, я имею ввиду советов создателей модуля)
8. Выводим фильтр и результаты фильтрации
Сам фильтр
[[tmFilters? &filterOuterTpl=`tm2_filterOuterTpl` &filterTpl=`tm2_filterTpl` &filterNumericOuterTpl=`tm2_filterOuterTpl` &filterNumericTpl=`tm2_filterNumericTpl` &jsMap=`1` &toPlaceholder=`filters` ]] <div id="filters"> <form action="[[~[[*id]]]]" method="get"> <input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" /> [[+filters]] <button class="btn btn-info" type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить фильтр</button> </form> </div>
Вывод результатов с пагинацией
<div id="products"> [[!tmCatalog]] <div class="clearfix"></div> </div> <ul class="pagination" id="pages"> [[!+page.nav]] </ul>
Сортировка результатов
<div class="sorting"> <select class="f_sortby" name="sortby" onchange="tmFilters.changeOrder(this);"> <option value="pagetitle">по названию</option> <option value="price">по цене</option> <option value="publishedon">по дате</option> </select> <select class="f_sortdir" name="sortdir" onchange="tmFilters.changeOrder(this);"> <option value="asc">по возростанию</option> <option value="desc">по убыванию</option> </select> <select class="f_limit" name="limit" onchange="tmFilters.changeOrder(this);"> <option value="4" selected="selected">4</option> <option value="10">10</option> <option value="20">20</option> <option value="40">40</option> </select> <div class="clearfix"></div> </div>
9. Активируем фильтр
Теперь нужно лишь активировать наш фильтр. Для этого идем в Приложения/Управление фильтрами.
Здесь нужно поставить галочки возле каждого фильтра и нажать кнопку «Сохранить».
Если вы все сделали правильно, то фильтр должен заработать. На этом все. Если появились вопросы — задавайте в комментариях, постараюсь ответить. А вообще вот документация по tagManager2. Успехов в разработке. В "Демо" один из моих сайтов, на котором реализован фильтр с помощью tagManager2
Комментарии ()