
Для того, чтобы фильтрация заработала, у блоков нужно проставить соответствующие классы. Если мы хотим сделать фильтрацию, например, проектов в портфолио, то сами проекты могут быть отдельными ресурсами, а вот категории могут быть тегами.
Для тегов есть очень удобное дополнение от Павла Гвоздя — tvSuperSelect. Будем использовать его для распределения проектов по категориям.
Решение будет состоять условно из двух частей: первая — вывод всех тегов в виде кнопок для фильтрации, а вторая — добавление блокам соответствующих классов.
Как вывести все теги в tvSuperSelect
Сниппет tvssTags выводит теги для какого-то конкретного ресурса. Чтобы вывести вообще все теги, которые есть на сайте, нужно сделать выборку из базы данных (из таблицы tvss_options). Тут нам поможет pdoResources:{'pdoResources' | snippet : [
'loadModels' => 'tvsuperselect',
'class' => 'tvssOption',
'sortby' => '{ "value":"ASC" }'
'groupby' => 'value',
'tpl' => '@INLINE <li>
<a href="{$_modx->resource.uri}#{$value}"
data-filter=".{$value | md5}"
class="filter">{$value}</a>
</li>',
'tplWrapper' => '@INLINE <ul class="nav nav-tabs">{$output}</ul>'
]}В параметре data-filter не получится подставить просто значение тега, так как оно может содержать символы, которые не разрешается использовать в наименовании CSS-классов (например, пробел). Поэтому для получения уникального класса для каждого из тегов мы будем использовать MD5-хеш от значения тега.
Вывод ресурсов с классами для фильтрации
Чтобы фильтрация заработала, у самих блоков должны быть проставлены такие же классы, как и в параметре data-filter:<!-- GRID ITEM -->
<div class="grid-item {'tvssTags' | snippet : [
'id' => $id,
'tv' => 1,
'pageId' => $id,
'tpl' => '@INLINE {$tag | md5}',
'outputSeparator' => ' '
]}">
<!-- GRID DETAILS -->
<div class="grid-details">
<a href="{$uri}">
<h4 class="grid-title">{$pagetitle}</h4>
</a>
</div>
</div>
<!-- /. GRID ITEM -->Здесь важно указать параметр outputSeparator, так как CSS-классы разделяются пробелами, ну и привести значения классов к тому же виду, что и в параметре data-filter (MD5-хеш от значения тега).
Теперь осталось только подключить плагин Isotope стандартным образом, и наша фильтрация заработает.
Объектная
Не думал ли ты сделать возможность «Добавить в избранное».
Было бы отлично. А то многое теряется и «сползает» со временем…
Если реализуешь — ваще прям супер было бы. ;-)
Реализовал возможность добавлять статьи в избранное (звёздочка рядом с количеством комментариев на странице статьи).
Я просто в контент чанке каталога портфолио ваш код разместил. Но по клику на тег нет желаемого волшебного эффекта… и не выводятся. Что не так делаю? сайт
<!-- GRID ITEM --> <div class="grid-item {'tvssTags' | snippet : [ 'id' => $id, 'tv' => 2, 'pageId' => $id, 'tpl' => '@INLINE {$tag | md5}', 'outputSeparator' => ' ' ]}"> <!-- GRID DETAILS --> <div class="grid-details"> <a href="{$uri}"> <h4 class="grid-title">{$pagetitle}</h4> </a> </div> </div> <!-- /. GRID ITEM -->Предв. создал ресурсы, указал им теги,в расширенный заголовок ввел ->
tag1{$.get['tag'] ? ' «'~($.get['tag']|unescape:"url")~'»' : ''}Это правильно сделал?В настройках PDOtools феном включил все «Да»...
Какими get-параметрами? в Title -убрать это?
x-grow.ru/ru/ тут работает, а то чтобы настоящие ресурсы тут вывести — пока не понял все ошибка.
{'pdoResources' | snippet : [ 'loadModels' => 'tvsuperselect', 'class' => 'tvssOption', 'sortby' => '{ "value":"ASC" }' 'groupby' => 'value', 'tpl' => '@INLINE <li> <a href="{$_modx->resource.uri}#{$value}" data-filter=".{$value | md5}" class="filter">{$value}</a> </li>', 'tplWrapper' => '@INLINE <ul class="nav nav-tabs">{$output}</ul>' ]}Мне надо запрос типо такого составить'select'=>{ 'value': AS, 'tag': FROM ,'prefix_tvss_options': WHERE, 'tv_id': IN(5), GROUP BY: 'value' }но не получается у меня нет большого опыта, а сайт для дочки делаю в школу, в феврале сдавать надо ('where' => '{"tv_id":"номер id_tv которую нужно вывести" }'и получится вот так{'pdoResources' | snippet : [ 'loadModels' => 'tvsuperselect', 'class' => 'tvssOption', 'sortby' => '{ "value":"ASC" }' 'groupby' => 'value', 'where' => '{"tv_id":"номер id_tv которую нужно вывести" }' 'tpl' => '@INLINE <li> <a href="{$_modx->resource.uri}#{$value}" data-filter=".{$value | md5}" class="filter">{$value}</a> </li>', 'tplWrapper' => '@INLINE <ul class="nav nav-tabs">{$output}</ul>' ]}Я понимаю что об этом и писать не стоит, но мало ли кто еще искать будет.Но мне тоже это полезно было так как я стал понимать как строится запрос к базе данных.[[tvssTags? id=`[[*id]]` &tv=`8` &tpl=`@INLINE <li><a href="[[+link]]">[[+tag]]</a></li>` &tplWrapper=`@INLINE <div class="btArticleShareEtc"> <div class="btTagsColumn"> <div class="btTags"> <ul>[[+output]]</ul> </div> </div> </div>` &outputSeparator=`` &pageId=`6` ]]Подскажите, пожалуйста, какой должен быть код (в стандартном синтаксисе) на странице с id=6, где выводятся ресурсы с выбранным тегом, чтобы в названии страницы выводился сам тег?И второй вопрос: как с помощью стандартного синтаксиса сделать читаемым кириллический тег в url? Сейчас тег «важно» в адресе выглядит так: ?tag=%25D0%25B2%25D0%25B0%25D0%25B6%25D0%25BD%25D0%25BE
Буду благодарна за ответы.