Добавляем теги к ресурсам с помощью Tagger в MODX
В этой статье рассмотрим, как в MODX с помощью дополнения Tagger добавить к ресурсам метки или хэштеги, а также как их использовать для поиска соответствующих ресурсов и создания облака тегов.
Установка Tagger и pdoTools
Для создания тегов к статьям, облака тегов и страницы, которая будет выводить ресурсы в соответствии с переданным ей тегом, будем использовать компоненты Tagger и pdoTools.
Установку необходимых компонентов произведём на странице "Управление пакетами" (Приложения -> Установщик):
- Tagger - компонент, который добавляет в MODX теги, категории и многое другое.
- pdoTools - компонент, представляющий собой набор сниппетов, позволяющих решить очень большое количество задач. На этом уроке будем использовать сниппеты
pdoResources
иpdoPage
.
Компонент Tagger
Работу с Tagger начнём с создания группы и тегов в ней. Для этого в верхнем меню нажмем на пункт Приложения и выберем подпункт Tagger. На открывшейся странице перейдём на вкладку Group и создадим новую группу с помощью кнопки "Create a new Group".

Основные поля:
name
- название группы (tags).description
- описание группы (теги к статьям).place
- место отображение тегов (in tab - во вкладке).show for templates
- для каких шаблонов отображать группу (2 - id шаблона статей).allow blank
- определяет, можно ли не указывать теги.
Перейдём на вкладку Tags и создадим теги в группе tags.

Основные поля:
name
- имя тега (например, HTML)alias
- псевдоним тега (например, html)group
- группа (выбираем ранее созданную группу tags)
После этого создадим ещё несколько тегов.

Добавим к статьям, имеющим шаблон Пост (id=2), теги. Добавление тегов осуществляется во вкладке Tagger.

Создание ресурса "Вывод статей по тегу"
Создадим ресурс "Вывод статей по тегу" и шаблон, который свяжем с ним. Результат данного действия показан на рисунке. Во вкладке "Настройки" укажем данному ресурсу URI - show-posts
. Запомним идентификатор (id
) данного ресурса (например, 20).

Вывод тегов, прикреплённых к статье
Для вывода тегов, добавленных к статье необходимо открыть шаблон (Пост) и вставить в него вызов сниппета TaggerGetTags
:
[[TaggerGetTags?
&resources=`[[*id]]`
&rowTpl=`@INLINE <div class="btn-group"><span class="btn btn-primary btn-sm">#</span><a class="btn btn-info btn-sm" href="[[~20]]?tag=[[+alias]]">[[+tag]]</a></div>`
]]
Параметр:
&rowTpl
- чанк, который используется для вывода каждого тега.
Плейсхолдеры:
[[+alias]]
- псевдоним тега.[[+tag]]
- имя тега.
Вывод тегов организуем с помощью ссылок, каждая из которых будет иметь следующее значение атрибута href
:
[[~20]]?tag=[[+alias]]
где:
[[~20]]
- URL ресурса "Вывод статей по тегу". Данный ресурс будем использовать для вывода статей, имеющих указанный тег.[[+alias]]
- значение передаваемого GET-параметраtag
. Данное значение будем использовать в ресурсе[[~20]]
для создания запроса к базе данных, выбирающих из неё только записи, имеющие этот тег.

Создание облака тегов
Для создания облака тегов воспользуемся сниппетом pdoResources
. Но перед тем как переходить к выборке, рассмотрим MySQL схему компонента Tagger. Данная схема отображает связь между таблицами (классами) компонента Tagger и modResource.

Из схемы видно, что компонент Tagger состоит из 3 таблиц (классов):
TaggerTag
- список тегов.TaggerTagResource
- связываетmodResource
иTaggerTag
. Т.е. каждая строчка содержитid
тега иid
ресурса.TaggerGroup
- список групп.
Класс modResource
приведён для наглядности.
Для создания облака тегов необходимо воспользуемся сниппетом pdoResources
:
[[!pdoResources?
&loadModels=`tagger`
&class=`TaggerTag`
&leftJoin=`{
"TaggerTagResources": {
"class": "TaggerTagResource",
"on": "TaggerTag.id = TaggerTagResources.tag"
}
}`
&select=`{
"TaggerTag": "*",
"TaggerTagResources": "COUNT(TaggerTagResources.tag) as countTags"
}`
&groupby=`TaggerTag.id`
&sortby=`TaggerTag.tag`
&sortdir=`ASC`
&tplWrapper=`@INLINE <div class="panel panel-primary"><div class="panel-heading"><span class="glyphicon glyphicon-tags"></span> Теги</div><div class="panel-body">[[+output]]</div></div>`
&tpl=`@INLINE <a href="[[~20]]?tag=[[+alias]]" class="btn btn-primary">[[+tag]] <span class="badge">[[+countTags]]</span></a>`
]]
Вставим вышепредставленный код, например, в правую колонку шаблона Пост.

Реализация страницы "Вывод статей по тегу"
Данная страница будет выводить список статей, которые имеют указанный тег. Как Вы уже наверно догадались, получать тег эта страница будет из URL (из GET параметра tag
).
Рассмотрим этот момент более подробно. На страницах каждый тег оформлен в виде ссылки, которая имеет в своём составе параметр tag
.
Например, тег bootstrap имеет следующий URL:
http://site.ru/show-posts?tag=bootstrap
Следовательно, для того чтобы вывести соответствующие ресурсы необходимо:
- Получить значение параметра
tag
из массива GET. - Создать запрос для выборки необходимых данных.
- Указать данному запросу условие (
where
). Т.е. ограничить выборку только теми записями, которые имеют указанный тег. - Создать чанк для оформления результатов.
Вставим в шаблон "Статьи по тегу" базовый каркас страницы и вызов сниппета pdoPage
:
[[!pdoPage?
&element = `pdoResources`
&limit=`2`
&loadModels=`tagger`
&class=`TaggerTagResource`
&leftJoin=`{
"NameTag": {
"class": "TaggerTag",
"on": "TaggerTagResource.tag = NameTag.id"
},
"Posts": {
"class": "modResource",
"on": "TaggerTagResource.resource = Posts.id"
}
}`
&select=`{
"TaggerTagResource": "*",
"NameTag": "NameTag.tag, NameTag.alias",
"Posts": "Posts.id, Posts.pagetitle, Posts.description"
}`
&where=`{
"NameTag.alias": "[[!#GET.tag]]"
}`
&sortby=`TaggerTagResource.resource`
&sortdir=`ASC`
&tplWrapper =`@INLINE <h2 class="h3">Всего результатов: [[+page.total]]</h2>[[+output]]`
&tpl= `chunkTagRow`
]]
[[!+page.nav]]
Чанк chunkTagRow:
<div class="panel panel-default">
<div class="panel-body">
<h3 class="h4">[[+pagetitle]]</h3><p>[[+description]]</p>
<p class="text-right"><a href="[[~[[+id]]]]" class="btn btn-primary" role="button">Читать далее... </a></p>
</div>
</div>

Комментарии: 318
3 проблемы, которые не смог решить.
1) Как сделать так чтобы показала всех статей на странице вывода статей без выбора самого тега, а то при переходе на страницу, страница пустая ?2) Фотографии статей не показывает. Как можно исправить ?
PdoPage на странице вывода статей по тег.Чанк newsElement
Здравствуйте!
При добавлении нового тега (на русском), при создании тикета, не создается псевдоним (алиас). И ссылка имеет следующий вид (без псевдонима):
Можно ли сделать чтобы создавался псевдоним на англ. языке или транслитом? Или может есть другое решение. Записи при этом выводятся корректно по тегам.
Добрый день!
Проверьте, что у вас в MODX используется для транслита в системных настройках.Стоит russian, установлен пакет translit
Тоже не поддерживает русский язык. где именно капаться ?
чуваки, у кого не создаются алиасы на русском , то просто отключите в системных настройках Tags Remove Accents
Создал для каждого языка свою группу из тегов. На стр. с новостью вывел через &groups=`[[++lang:is=`ru`:then=`2`:else=`1`]]`
а как сделать вывод всех новостей на другом языке не знаю, сейчас на укр. версии сайта показывает все равно новости с рус. названием, но ссылка идет на укр. версию.
Все сделал как в статье. Теги выводятся. Вот только у меня вопрос, можно ли на странице шаблона «Поиск по тегам» вывести все ресурсы. Ну, чтоб она пустая не была.
Дальше, если я пишу в чанке код для облака из вашего примера и пытаюсь их вывести, происходит дублирование постов вместо выдачи тегов.
Подскажите как решить эту проблему
Долго пытаюсь сообразить — помогите пожалуйста:
На сайте сделана Регистрация с помощью Login. В форме регистрации есть поле «Ваше имя»:
Также есть поле «Ваш email». Именно поле с е-мейлом становится потом Username. То есть потом авторизация происходит по е-мейлу. А fullname подставляется в имя автора поста или автора комментария.
Также на сайте сделан Блог — на Tickets. И когда выводятся посты, то в качестве Автора поста выводится имя — fullname. Насколько я понимаю, это значение подтягивается из TicketMeta. Вот чанк вывода постов блога на страницу:
Когда же я пытаюсь вывести на аналогичную страницу посты по тэгу, то вместо Имени автора — fullname — выводится его username, то есть е-мейл. Не могу сообразить, как затянуть в вывод Имя автора.
Вот код вывода постов по тэгу:
Вот tpl.Tickets.cat.blog_tag:
Этот чанк аналогичен первому чанку вывода всех постов блога. Но для вывода даты публикации пришлось поставить не date_ago, а publishedon. Иначе не выводится.
fullname находится в modUserProfile. Поэтому код нужно изменить:
Получилось!
Подскажите пожалуйста, почему не работает такой вызов?
при чем если делать с pdopage все ок отрабатывает
Средствами JS частично такое реализовал, но вот думаю может на Mod`exe проще можно будет сделать?
Спасибо заранее
Первый вывод списка курсов:
Статьи:
Спасибо.
Вам нужно объединить условия:
Нужно выводить перевод по определенному тегу.
Вывод по тегу работает, но правильно подключить Localizator к выводу не удается.
Буду рад любым подсказкам
Например:
Затем в приведённом вызове сниппета заменить «NameTag.alias» на «NameTag.label».
Теперь в чанке они будут выводиться в формате через ||.
Далее можно, например, используя Fenom преобразовать это значение в массив, и при переборе найти среди них значение, отвечающее языковой версии и вывести его. Получить ключ текущего языка можно из системного параметра cultureKey. Если Fenom использовать не хочется, то для этого дела можно написать простенький сниппет, который будет разбирать такое значение и в соответствии с текущим ключом языка возвращать соответствующее значение тега.
Почему может не меняться [[+countTags]]?
Есть страница «Поиск по тегам», где выводятся все теги (вывод полностью по вашим примерам).
Некоторые ресурсы были уничтожены совсем. При этом [[+countTags]] остался таким, как если бы они были.
Теги в категориях блога считаются при этом верно: там выборка по &where=`{«modResource.parent:=»:[[*id]]}`.
Кэш чистил. Вроде всё перепроверил, и не могу понять. Здесь в комментариях ответа не нашёл.
Заранее спасибо за ответ и помощь.
Попробуйте перенести код шаблона в чанк и указать его имя в качестве значения параметра tpl.
Ещё измените плейсхолдер на некэшируемый:
Код:
Стоит только группировка, так как 2 контекста, выше выведен для русского языка.
Вопросы:
1.На странице вывода по тегу — вывожу теги у каждой статьи, у одной статьи 7 тегов, но выводит 7 одинаковых тегов — как поправить? Так же publishedon не подцепляется.
Чанк для вывода:
Вывод статей:
2. Как сделать выбор тегов на странице, например, услуги по TV и чтобы подгружать из этих тегов статьи на страницу?
1. Замените вызов сниппета TaggerGetTags на не кэшируемый.
2. Добавьте publishedon в выбираемые поля:
А такой вопрос:
Как сделать выбор тегов на странице, например, услуги по TV и чтобы подгружать из этих тегов статьи на страницу?
Осваивая MODX, нашел вашу статью, создал по инструкции вывод тегов, все классно.
Но есть пара «НО».
Почему-то у меня на странице вывода результатов по тегу не выводится описание (introtext) + не получается вывести изображение статьи из phpThumboff.
Кроме того, ссылка на страницу никак не ЧПУ (
.../show-posts?tag=…
Подскажете где «копать»?
Для подцепления данных из других таблиц нужно при выборке добавить их в запрос через leftJoin. В случае с introtext проверьте наличия данного поля в select.
Для реализации ЧПУ нужно добавить соответствующие правила в конфигурационный файл сервера или реализовывать это посредством создания плагина в MODX и написание в нём определённой логики.
Если нахожусь на странице тега «планируем» вот URL(регуляркой изменен) tag/planiruem
Вывожу на странице «РЕЗУЛЬТАТ ПО ТЕГУ #[[+tag]]» так вообще не выводит название тега.
А вот так «РЕЗУЛЬТАТ ПО ТЕГУ #[[!#GET.tag]]» выводит ALIAS а он на английском и получается
РЕЗУЛЬТАТ ПО ТЕГУ #PLANIRUEM а нужно ПЛАНИРУЕМ, тоесть поле tag нужно, в нем сам тег, но его не выводит на странице :( Как вывести?
Вот как подставляю переменную $row.section в снипете так:
'where' => '{«NameTag.alias»: $row.section}',
Вот целиком, этот вызов в цикле подставляется.
Вот и не пойму, толи он не видит переменную в цикле, или из за того что я не правильно прописал ее?
'where' => '{«NameTag.alias»: $row.section}',
Использую компонент Tickets, в том числе с созданием тикетов через фронтенд зарегистрированными пользователями.
Вы не сталкивались случайно с такой задачей как вывод на странице галереи изображений из TicketFile?
Не могу разобраться как это сделать, если используется Fenom.
Есть такой пример:
Но здесь выводится только одно изображение и не используется Fenom
Но не получается доработать код чанка tpl.image:
Вывести изображения прикреплённые к тикету на Fenom можно так:
Спасибо большое за ответ! Как раз правильно задать параметр where И не получалось)
А решение нашлось такое, через сниппет:
И далее вызываем сниппет в нужной части. Только наверное правильнее назвать это слайдером из подгружаемых изображений, а не галереей.
Заранее спасибо!
Например:
[[!pdoResources?
&loadModels=`tagger`
&class=`TaggerTag`
&leftJoin=`{
«TaggerTagResources»: {
«class»: «TaggerTagResource»,
«on»: «TaggerTag.id = TaggerTagResources.tag»
}
}`
&select=`{
«TaggerTag»: "*",
«TaggerTagResources»: «COUNT(TaggerTagResources.tag) as countTags»
}`
&groupby=`TaggerTag.id`
&sortby=`TaggerTag.tag`
&sortdir=`ASC`
&tplWrapper=`@INLINE
&tpl=`@INLINE
[[+countTags]]
]]
[[!pdoPage?
&element=`pdoResources`
&tpl=`info-tpl`
&limit=`10`
&parents=`[[*context_key:is=`web`:then=`5`:else=`[[BabelTranslation:default=`5`? &resourceId=`5` &contextKey=`eng`]]`]]`
&sortby=`publishedon`
&sortdir=`DESC`
&includeContent=`1`
&includeTVs=`video`
&tplPageWrapper=`@INLINE
[[+first]][[+prev]][[+pages]][[+next]][[+last]]
</nav`]]
`:else=`
[[!pdoPage?
&element=`pdoResources`
&limit=`6`
&loadModels=`tagger`
&class=`TaggerTagResource`
&leftJoin=`{
«NameTag»: {
«class»: «TaggerTag»,
«on»: «TaggerTagResource.tag = NameTag.id»
},
«Posts»: {
«class»: «modResource»,
«on»: «TaggerTagResource.resource = Posts.id»
}
}`
&select=`{
«TaggerTagResource»: "*",
«NameTag»: «NameTag.tag, NameTag.alias»,
«Posts»: «Posts.id, Posts.pagetitle, Posts.description»
}`
&where=`{
«NameTag.alias»: "[[!#GET.tag]]"
}`
&sortby=`TaggerTagResource.resource`
&sortdir=`ASC`
&tpl=`info-tpl`
&parents=`[[*context_key:is=`web`:then=`5`:else=`[[BabelTranslation:default=`5`? &resourceId=`5` &contextKey=`eng`]]`]]`
&includeTVs=`video`
&tplPageWrapper=`@INLINE
[[+first]][[+prev]][[+pages]][[+next]][[+last]]
</nav`]]
`]]
Как на странице категории, вывести теги товаров данной категории?
Заранее спасибо
Для этого необходимо просто добавить условие:
Вставил ваш код, в итоге он выводит все товары категории (если в категории есть товар с тегом). А необходимо вывести теги товаров из этой категории.
Есть несколько категорий тегов (групп тегов), например Цвет (белый, синий, красный), Размер (большой, малый) и т.д.
Как подключить эти группы в leftJoin pdoResources чтобы их вывести по группам с заголовками?
Родные параметры &rowTpl, &outTpl, [[+group_name]] тут не работают, я правильно понимаю что их как-то нужно добавить в выборку? Уже думал вызвать pdoResources 3 раза и в каждом указать свою группу, но &groups тоже не работает, выводятся все теги из всех групп подряд.
Это можно решить через сниппет:
Чанк tpl.Tagger.group.row:
Чанк tpl.Tagger.tag.row:
Только заменил
на:
чтобы выводились именно названия групп)
Так получается родные сниппеты taggera не могут решать подобные задачи?
Приходится писать свой сниппет?
К тому же свой сниппет, предназначенный для конкретной задачи будет намного быстрее работать, т.к. он заточен именно под неё, а не представляет собой универсальное решение.
Вместо /tag.html?tag=[[+alias]] выводится ссылка /tag.html?tag=statya-1 (statya-1 это url текущей статьи, к которой относятся тэги)
Код такой:
Чанк такой:
У ресурса тоже есть alias. В этом случае нужно установить плейсхолдеру другое имя:
Можно поступить по другому, в сниппете, где выбираете поля ресурса, укажите в параметре select только те, которые нужны.
И попутно возник такой вопрос — не использовали ли вы для вывода превьюшек к статьям каталога ресурсов Asset Manager в качестве галереи? Не получается пока его заинклюдить. Непосредственно в tpl чанке pdoResources выводом через сниппет getPageAssets картинка выводится, но это конечно не слишком хороший вариант
а уже в чанке faceResults обработка и вытягивание картинок:
Самое обидное, что, получается, нет возможности заинключидь. Подтолкнуть бы автора к этой доработке. К сожалению, не знаю английский достаточно хорошо, что бы адекватно написать об этом
Чанк:
[[+introtext]] — этот плейс не срабатывает и на старых сайтах я заметил частично исчезли превьюшки.
Сделал человекоподобные юрл через .htaccess (типа, как здесь — itchief.ru/lessons/modx-revo/modx-tag-cloud#comment-1350), но столкнулся со следующей проблемой.
По неправильным ссылкам, типа сайт.ру/tags/ и сайт.ру/tags/любые_буквы показывает — «Всего результатов: 0».
Как сделать так, что бы отдавало ошибку 404? Не хочется на сайте дубли плодить.
Никак не получается вывести изображение в tv на странице статей по тегам, которые реализованы Tagger'ом. А сами статьи работают через Tickets.
Делал вывод тегов по этой вашей статье, все получилось, но картинку не получается вывести, точнее она выводится, но в таком виде:
То есть начало урла не подставляется.
В шаблоне статей по тегам вывожу таким образом:
Чанк tag.tpl такой:
Что не так делаю, подскажите пожалуйста!
Вы не могли бы подсказать как на странице вывода результатов выводились новости с картинками? Уже несколько раз и чанк с одиночным выводом новости проверил, в обычном пдо выводе с картинками выходит, а через теги без.
&processTVs=`1`
&includeTVs=`tv_изображения`
Подскажите, а возможен вывод [[+countTags]] в отдельной статье, через TaggerGetTags?
Что-то типа:
Укажите в параметре &resources необходимый идентификатор статьи.
Задача просто вывести счётчик тэгов [[+countTags]] на страницах ресурсов (а не в ленте или сайдбаре). Вывожу через сниппет TaggerGetTags (код привёл выше) — счётчик не отображается.
синтегрировать с формой поиска по сайту (напр. simplesearch) что бы при вводе поискового запроса в форму, подтянулись не только страницы с этим словом но и с тегами.
И можно ли вывести автоматически через pdoTools группировку: все группы тегов+список тегов к группам?
Да, с помощью pdoTools можно вывести группы и список тегов к каждой из них.
содержимое product-card-tpl:
Пробовал вариант строки
А в чанке обращаетесь вот так tv.image:
Т.е. вам необходимо:
Параметр &includeTVs использовать не нужно, вы это сделали самостоятельно с помощью &leftJoin.
Я в тупике, помогите пожалуйста разобраться…
Оформляю каталог, состоящий их карточек товаров. Вывожу ресурсы с помощью pdoPage.
В товаре используются 2 плагина: tagger и simplerating (как и в примере выше)
Таким образом формируется каталог и на первый взгляд все работает, но нет… Проблема в том, что параметр &parents=`[[*id]]` теперь игнорируется. И во всех категориях отображаются все товары которые вообще есть на сайте.
С проблемой воевал сам, но решения не нашел. Буду признателен за любую помощь.
Спасибо за ответ
Спасибо Вам. Крутой сайт. Многое для себя тут взял!!!
Подскажите, а как отсортировать теги в облаке тегов не по алфавиту, а по полую Rank?
Чтобы иметь возможность вывести метки/теги в нужном порядке редактируя Rank у каждой метки.
Спасибо заранее.
Попробуйте задать сортировку по этому полю в фильтре.
1. Как вывести название тега в общем списке всех статей?
Вывожу все статьи следующим образом:
2. Как вывести название тегов в приложении collections? Т.е. там нужно добавить столбец с названием тега.
1. Поместить вызов сниппета в чанк, указанный в качестве значения параметра tpl:
2. Не сталкивался с такой задачей. Можно попробовать это осуществить с помощью @Bindings.
А потом вызвать сниппет так:
то сниппет выведет текущий выбранный тэг.
Просто и удобно :)
— в параметр GET ничего не передается (т.е. если зайти через облако тегов, формируется страница «Поиск по тегам» через GET параметр, а дальше идет сама статья, где нет параметра GET
— тегов у статьи больше одного
Это сделать можно с помощью создания сниппета (например, RelatedResources).
Код сниппета RelatedResources:
Кроме этого необходимо ещё создать чанк tpl.RelatedResources.row (для оформления строки результата):
Использование сниппета в шаблоне:
Может кому-то понадобится
Возникла такая проблема — после переноса папки core за пределы public_html не работает больше фильтр.
Ошибка такая:
Подскажите, почему так происходит? Это лечится или придется жертвовать защитой сайта?
Жертвовать защитой сайта не стоит. Просто проверьте, как формируются пути в методе getTaggerValues. Исправьте их на правильные.
В логах вот такая штука
после увеличение времени ожидания вот такая
Александр, благодарю за отличное руководство – все изложено очень доступно и понятно. Класс!
Прошу помоши по вопросу:
Требуется вывести главный тег, который является основным для страницы.
Например: у страницы есть теги – «Окрашивание», «Уход за волосами», «Услуги».
Основной тег – «Уход за волосами». Выводится в одном месте шаблона
Остальные теги – в конце статьи.
Вопрос: как можно назначить и вывести основной тег?
В админке теги размещаются в собственном порядке, который соответствует их id. Я посмотрел на таблицу в базе данных modx_tagger_tag_resources – там видно, что при назначении тегов они сортируются уже по порядку их присвоения к ресурсу.
Как вариант – можно сделать вывод тегов страницы с лимитом в 1. И сортировкой от старых тегов к новым. Основным тегом будет тот, что добавлен первым. Здесь есть минус – с админки не понятно, какой тег – основной.
Второй вариант – делать отдельно две группы тегов: одна – для основного тега, другая – для остальных, но мне кажется – это лишнее дублирование сущностей.
Возможно сталкивались с подобной задачей – в какую сторону лучше смотреть?
Благодарю!
С помощью Tagger вы такое не сможете осуществить. В Tagger нет основных тегов, есть только ранг. Ранг — это просто некоторое число, которое можно использовать для сортировки. Но оно привязано к тегу, а не к ресурсу. Поэтому использовать его для решения данной задачи не получится.
Про сортировку не совсем понял. При назначении тега ресурсу в базу данных не сохраняется никакая временная метка, поэтому узнать какой тег был добавлен первым, а какой вторым не удастся. Компонент Tagger позволяет сортировать теги только по alias или рангу.
Решить задачу можно различными способами, но я наверно бы сделал так. Создал бы просто какое-то дополнительное поле (например, с помощью TV). Это поле использовал бы для указания основного тега из списка уже добавленных к данному ресурсу тегов с помощью Tagger. Наполнение списка нужными значениями организовал бы посредством сниппета или использовал бы @SELECT Binding.
Буду реализовывать!
Обычно, когда делала поиск, то вызывала дополнительные поля (чекбоксы, радиобатоны). А как сделать такую фильтрацию по tagger не понимаю. Вот предположим у меня статьи. У них есть метка «новость, статья, полезно». Как на страницу вывести все новости и дать аякс поиск по меткам?
В mSearch2 нет готового класса-обработчика фильтров для Tagger.
Чтобы это осуществить необходимо:
1. Скачать класс-обработчик фильтров для mSearch2 (для работы с Tagger): yadi.sk/d/YIDLToaX3Mv5QZ.
2. Поместить его в директорию filter (\core\components\msearch2\custom\filter\).
3. В системных настройка в качестве значения параметра mse2_filters_handler_class ввести значение taggerCustomFilter.
После этого использовать его так (1 — id группы):
Несколько групп:
Подскажите пожалуйста, как сделать вывод по 1 или нескольким alias указанных в TV поле ресурса (alias указаны через запятую)?
В ресурсе указывать теги через запятую в двойных кавычках:
Не срабатывает, вложенность выводимых страниц от 1 до 7, menuindex родителей и всех про родителей по цепочки вверх нужно учесть при выводе. Подскажите пожалуйста решение.
Я так понял, это довольно частая проблема, может снипет кто напишет!
Если ресурсов немного, то каждому ресурсу можно присвоить menuindex:
--ресурс (1)
--ресурс (2)
--ресурс (3)
--контейнер (4)
--ресурс (401)
--ресурс (402)
--ресурс (5)
--контейнер (6)
--ресурс (601)
--ресурс (602)
--ресурс (603)
--ресурс (7)
Если же писать какой-то алгоритм, то… Есть же ресурсы, которые не показываются в дереве. Кроме этого, частенько бывает так, что ресурсы имеют одинаковый menuindex. Кроме этого в системных настройках можно изменить поле, по которому будут сортироваться ресурсы в дереве. Т.е. нюансов много…
Можно просто назначать menuindex с помощью плагина при сохранении ресурса.
Фотки вывожу на сайте используя вот такой код, не пойму как его добавить на страницу «Статьи по тегу»?
Подскажите как вывести имя выбранного тега на странице «Статьи по тегу» в эту строчку
Вывод в шаблоне:
Tpl:
Даже если менять Phx для publishedon — ничего не происходит
Я его помещаю, в tpl тега, а он пустой везде.
Я надеялся, что можно сделать что-то на вроде активного пункта меню…
Вот у меня такой чанк Tpl:
Что не так делаю?
Буду на будущее учить ворд-впресс, а то чот никто не пишет как сделать такую же структуру как там, когда один материал может находиться в нескольких разделах и при этом разделы можно отображать в меню :((
1. Сниппет TagCloud:
2. Чанк TagCloudRow:
3. Чанк TagCloudOuter:
Причём скорость работы этого решения будет выше (т.к. ничего не используем лишнего). Да, и количество запросов к базе будет намного меньше.
Попробуйте [[+tag]] заменить на [[+alias]]:
После этого передавать в сниппет необходимое значение (id группы):
Почему-то показывает пустые и неправильно, соответственно, считает кол-во ресурсов с ними.
Вывожу так:
Тут еще вопрос заодно: как присвоить активному тегу класс? :-)
В комментариях есть пример сниппета TagCloud. Он позволяет создать облако тегов и присвоить активному тегу класс active.
Вывожу так:
Подскажите пожалуйста не разумному)!,
а как при помощи такого вывода в pdoResources,
с использованием &select указать, что мне нужно выводить и tv параметры.
И можно-ли вообще это сделать.
Я хочу чтобы статьи относящиеся к данному тегу выводились с изображениями.
Стандартным вызовом &includeTVs=`img-article,title-img` tv параметры не выводятся,
как их правильно указать в &select?
Заранее спасибо!!!
Только сразу другие вопросы возникли.
Почему в принципе в случае если в сниппете pdoResources используется
&select, то стандартный &includeTVs=`tv-1,tv-2`, не выводит эти параметры.
И где можно посмотреть в какой таблице находятся tv параметры и синтаксис,
как эту таблицу можно подключить и потом использовать её элементы?
Посмотреть таблицы MODX можно, например, с помощью инструмента phpMyAdmin.
Добавления TV (id которого равно 1) к сниппету, с помощью которого осуществляется выбор статей по тегу, будет выполняться так:
В чанке chunkTagRow получить значение поля tv1 можно так:
Если вам необходимо выбрать ещё одно TV:
Понял, что Tagger перестал работать с кириллицей. На другом проекте и на старой своей версии он спокойно преобразовывал кириллицу в латиницу. Теперь Tagger для первого тега создает псевдоним "-1", для второго " " (пустая строка), а дальше начинает бесконечно сохранять материал, как бы намекая, что ничего у меня не выйдет :)
Такой вопрос: вы уже пользовались новой версией Tagger? Т.е. последним его обновлением.
Дело в том, что он перестал формировать «псевдоним», когда добавляется новый тег. Я ставил его на чистую систему, кеш очищал, переустанавливал. НО, после добавления второго тега (да, именно второго рандомного тега), третий в таблице в колонке «псевдоним» показывает -1 и все. Тега нет, сохранить он его не может.
Вручную я могу поменять псевдоним и все работает, но это же не дело… Возможно, вы уже нашли решение?
Есть Категория (id 8)
В ней есть ресурсы. У ресурсов указаны теги:
Проект 1 (тег1 = id1)
Проект 2 (тег2 = id2)
…
Есть ресурсы, у каждого из которых в tv (tags_tv) указан id тега.
В этих ресурсах нужно вывести все проекты, с id тега, который в tv указан.
Должно получиться что то вроде такого:
Для меня пока сложно все это.
Не совсем понятно, что у вас и с чем там как связано.
Например, для того чтобы получить все ресурсы, у которых родитель имеет id = 8 и один из тегов равен bootstrap будет так:
Спасибо огромное, все работает как надо!
Для этого необходимо будет создать копию чанка tpl.Tickets.form.create, например, под именем tplTicketsFormCreate. Открыть его и в HTML форму добавить input с именем созданного TV-поля (например, tags).
После указать имя TV-поля в вызове сниппета TicketForm:
Есть магазин на miniShop2 + Babel (2 языка). Хочу вывести в сайдбар TagCloud по товарам, чтобы можно было отдельно фильтровать по тегам. Установил Tagger и добавил каждому товару Теги на разном языке.
В сайдбаре теги вывожу для каждого контекста (языка) свои:
А вот результат по тегу вывожу так:
Когда использую &element=`msProducts`ничего не выводится, а если ставлю pdoResources, то результат выводится, но не видно Цены [[+price]] и КартинкиПревью [[+thumb]] которые, скорее всего, есть только в msProducts. &includeThumbs=`220x294` только у msProducts есть.
Можно как то соединить pdoPage с msProducts и tagger?
Результат вывода теперь выводится правильно, вот только без цены и картинки как и было раньше, но после часа поисков нашел решение. Нужно было добавить в &leftJoin msProductData и в &select уже добавить Data.price, Data.thumb.
Вот может кому понадобиться:
А в ТэгКлауд что в сайдбаре я сделал так:
для каждого языка создал разные чанки tag_links_tpl_ru и tag_links_tpl_en чтобы можно было проставить правильные ссылки на теги. где 520 — это ID документа для вывода результата на RU, а для EN id 519
Я делаю такую штуку и у меня ничего не получается:
[[!pdoResources? &where=`[[!TaggerGetResourcesWhere? &id=`«1»,«2»`]]`]]
Делал и по алиасам тегов Tagger`a, и по русским названиям — не пашет.
Так-то инструмент прикольный, хотелось бы разобраться…
Вроде работает как надо, но уж больно громоздким кажется.
Может что-то лишнее есть, что не обязательно использовать?
Если необходимо по id, то таблицу TaggerTag можно не присоединять:
Если вы хотите это сделать более удобным для использования, то можете создать сниппет.
Кстати, в итоге остановился вот на каком варианте:
где `tag1,tag2` — список англоязычных алиасов.
А вообще, в идеале хотелось бы такую штуку замутить, что делаешь такой шаблон для ресурса которому тоже назначаешь Tagger`ом теги, а он выводит в себе другие ресурсы (например, детей какого-нибудь родителя, которого можно и в шаблоне задать), которые соответствуют либо выбранным для этого ресурся тегам, либо выбранному сочетанию)))
И если еще внутри админки в каком-нибудь Collections сделать фильтр по тегам — ваще будет сказка)))
Теги выводятся из всех ресурсов, а нужно только из определенного родителя.
Подскажите, как вывести облако тегов из определенного parents?
Вместо 32 укажите значение необходимого id родительского ресурса.
Если вам нужные более простой вариант тегов, то их можно выполнить и в виде дополнительного поля (TV). Если же вы хотите иметь какой контроль над тегами, то с TV придётся это всё реализовывать. А здесь многое доступно из «коробки». Например, можно легко переименовать тег, при установлении тегов использовать только созданные, а также ограничить количество тегов, которые можно установить ресурсу. Кроме этого тегам можно назначать псевдонимы и многое другое. Т.е. использовать TV или компонент Tagger решать вам, всё зависит от задачи. Группы тегов нужны для того чтобы разным ресурсам (в зависимости от их привязки к шаблонам) можно было назначать теги из разных групп. Это может понадобиться, например, если у вас на сайте есть разные категории и ресурсам в зависимости от категории, в которой они расположены необходимо назначить теги с той или другой группы.
itchief.ru/assets/uploadify/a/9/5/a95d93e2d7e43dc37abf2da0a3d8da71.png
Подскажите что туда можно вписать если я прав?
_http://buyforex.ru/
и на странице «Вывод статей по тегу» тоже подцепляют контент этой страницы.
_http://buyforex.ru/tag.html?tag=nachinayushhim
Как поправить?
Или не используйте данный параметр, и содержимое сниппета поместите в эту обёртку:
Спасибо!
Если пытаешься добавить к выводу в чанке дату то ничего не отображается так же как и при добавлении раздела.
Картинку тоже нет возможности вывести если картинка в тв.
Можете посмотреть этот комментарий:
itchief.ru/lessons/modx-revo/modx-tag-cloud#comment-3767
Например, для того чтобы выбрать дату публикации (publishedon), её просто необходимо добавить в параметр &select:
Для вывода раздела необходимо добавить в параметр &leftJoin объект TicketsSection:
А также то, что необходимо выбрать в &select:
Тоже самое и для TV (например, имеющий id=6).
В параметр &leftJoin:
В параметр &select:
Например, в итоге вызов сниппета может быть таким:
А чанк chunkTagRow таким:
Есть пару вопросов, может поможете:
1. Как вывести название тега на странице «Вывод статей по тегу»
2. Нашел частичный ответ в комментариях: связать вывод статей по тегам c Tickets — «необходимо настроить параметр &select и при необходимости, если нужны данные из других таблиц (объектов), присоединить их с помощью &leftJoin». Но реализация «хромает». Как получить для тикетов данные: автор, просмотры, рейтинг для вывода?
Спасибо
Название тега можно вывести на страницу так:
Реализовать вывод статей, выполненных посредством дополнения MODX Revolution Tickets, на странице «Вывод статей по тегу» можно так:
Ну и соответственно добавить необходимые плейсхолдеры в чанк (в данном случае chunkTagRow):
Спасибо от всей души! очень помогли!
Хотел еще спросить, про «вывод названия тега»,
(Статьи по тегу: derevo)
так выводится alias тега.
Есть возможность вывести именно «название тега» (Статьи по тегу: Дерево), а не alias?
Спасибо
Добавить его вызов в необходимое место на странице:
Спасибо большое! Очень помогли! Может и не только мне
Если правильно понял, то проблема может $where
или я что-то не так делаю
Попробуйте тогда по-другому (без использования сторонних компонентов).
Код сниппета showTag:
Вызов сниппета showTag (в качестве параметра &alias указываем алиас тега ):
В качестве результата сниппет возвращает название тега.
Спасибо за помощь! Этот сниппет вывел имя тега.
Еще раз спасибо!
Возможно ли вывести облако тегов не на странице материала, а только на странице родительского каталога материалов, к которому относится этот материал?
Спасибо!
Выведет чанк тегов только в документах-контейнерах.
Пример: контейнер1. В нем материал1 с тегом «тест1». И контейнер2. В нем материал2 с тегом «тест2».
Нужно вывести в контейнере1 тег «тест1», а в контейнере2- «тест2».
Может есть возможность присвоить группу тегов к определенному контейнеру?
Лог:
Пробовал использовать стандартный &where=`[[!TaggerGetResourcesWhere? &tags=`tag` &where=`{«isfolder»: 0}`]]` тоже не получилось.
Посмотрите, пожалуйста, что может быть не так.
В комментариях не нашел ответа, может быть так подскажите.
Я использую вывод материалов через pdoPage с TV-полями (4 поля). У меня так и не вышло заставить систему видеть эти поля на страничке вывода тегов. Большее, что вышло — это вывести одно из полей. Такой записью (лишнее удалил):
Если добавлять в строку «Tv.value as switch_style» через запятую «Tv.value as preview_300_img», то выводится все равно одно поле, последнее. Это и понятно. А как сформировать конструкцию так, чтобы подключить 4 TV?
Спасибо.
Для этого необходимо подключить несколько TV-полей (а не одно):
Нашел ваш сайт, при попытке настроить Tagger для работы с магазином Minishop2 и mfilter2.
Я понимаю, что вполне может быть вы не сталкивались с этими дополнениями, но решил попытать удачу.
Если сможете, подскажите пожалуйста, как можно заставить товары фильтроваться по тегам Taggera.
Насколько я знаю для вывода в minishop используется тот же pdopage и pdoresources.
Я нашел заметку, все сделал вроде как нужно modx.pro/news/6318-minishop2-tagger/
Осталось лишь написать правильный вызов сниппета, а с этим беда(
Заранее огромная благодарнасть за любую помощь, даже за намек куда копать.
sitename.ru/catalog/odezhda/?tag=Для детей
А требовались нормальные с транслитом и без get запросов, поэтому пришлось воспользоваться сторонним плагином, с отдельной таблицей, в которой есть поле alias.
В любом случае спасибо, что откликнулись. Два дня мучений и я справился с этим, расширив класс mfiter2.
Начал тестировать сайт и вот что заметил.
1) Главный вопрос! После удаления нескольких статей, у которых были теги, в облаке тегов они продолжали висеть. Сейчас в итоге есть одна статья с двумя тегами, остальные удалил, почистил кэш. В облаке тегов остались все теги активными и количество статей осталось прежним, как будто он запомнил id статей и продолжает их выводить, не смотря на то что они удалены.
Облако вставлено на самой странице «Статьи» и «Поиск по тегам».
Теги выводятся в «Статьи», «Поиск по тегам», «Статья»
Код облака:
2) Так же в настройках пакета обнаружил, что настройки не работают вообще. Какие бы я галочки не убирал или ставил, они не на что не влияют.
a) Создать тег в настройках статьи я не могу, не смотря на то что галочка стоит (Разрешать создание новых).
b) Удалять не используемые теги — не удаляет
c) При попытке ввести новый тег, выпадает список из уже имеющихся, хотя в настройках стоит показывать «Поле тегов». Но показывает и поле и список.
Может что у меня не так, не знаю.
Заранее спасибо :)
Удалять не используемые теги работает только если этих тегов нет в базе данных.
Там всё просто достаточно разобраться, что означает каждая из галочек.
Добавьте условие, чтобы вызов сниппета выбирал только опубликовынные:
Тогда и выше в коде замени
на
show for templates без доп. условия (например связи с родительским ресурсом) расстроил. В трех контекстах у меня одинаковые шаблоны для трех разных языков, а вот теги надо разные. Соответственно, в админке сейчас выводятся все три варианта (три группы), боюсь менеджеры будут путаться.
Может у кого то есть мысли, простой костыль, что бы показывать в админке строго в связи с родительским ресурсом?
Пишет что у него поля выборки нет
Помогите пожалуйста
У меня возникла не большая проблема как у комментария выше. Не выводятся tv параметры на странице «вывод стайте по тегу» уж не знаю что и делать, всю голову сломал. Подскажите пожалуйста как можно наладить вывод tv параметров.
Вот такая ошибка в логах.
В этой статье работа с тегами осуществляется с помощью компонента Tagger. TV поля не используются.
А когда помещаю все эти &page...Tpl в приведенное у вас выражение вставлял, почему-то не работает((
Я пытаюсь настроить небольшой магазинчик на базе Shopkeeper`a, с tagManager`ом не срастается никак, поэтому я решил воспользоваться компонентом Tagger и без вашего урока сам бы ни за что!
Вобщем, всё хорошо, всё как надо, но на странице вывода связанных с тегом товаров не выводится цена товара, указанная в TV-поле. Причем, картинка, добавляемая также через TV отображается нормально, а цену не выводит((
Может быть как-то можно организовать вывод товаров по тегу через getProducts? Ну или просто что б цену выводил…
А со вторым вопросом?
Ответ на 1 вопрос:
itchief.ru/modx/tagger#comment-1821
Чтобы разобраться со вторым вопросом (пустая страница). Для начала посмотри, какая ошибка возникает.
теги выводятся нормально, но в ссылке вместо "[[+alias]]" выводится псевдоним поста "[[*alias]]". Почему может не срабатывать вывод алиаса тега?
Посты вывожу на странице коллекции так:
У меня в .haccess прописано так
и работает.
Не надо создавать новый тип содержимого. Достаточно в текущем удалить расширение. У меня тоже ссылки без html.
Я только начинаю свое знакомство с Modx и пока дается трудновато. Поэтому прошу помочь заставить работать countTags в постах, если выводим их через pdoResources. Как?
Большое спасибо за itchief.ru/modx/tagger#comment-1392
Также нашел здесь же в комментариях способ привести ЧПУ к виду /tag/…
Так вот у меня 23 ресурс выводит статьи по тегу и ссылки имеют вид "/articles/tag?tag=jquery". Ссылку формировал как указано здесь itchief.ru/lessons/modx-revo/modx-tag-cloud#comment-1361 и .htaccess правил соответственно, но выводится белая страница при переходе /articles/tag/… что я сделал не так?
Первый вопрос не совсем понял. Что Вы хотите сделать?
Во втором — необходимо проверить правильность URL (URI) в .htaccess, ресурсах и в параметрах сниппетов.
Касаемо URL меня стоит Translit и ссылки выводятся без .html на конце(Создал новый Тип содержимого HTML-NO). Формируя ссылки на теги [[+tag]] и добавив в .htaccess RewriteRule ^articles/(.*)$ /articles?tag=$1 [L] пустая страница при переходе по тегу
1 Этап. Создаём сниппет (например, mySnippet). Он будет выбирать теги текущего ресурса и выдавать на выходе некоторую строку (условие).
На выходе получим что-то такое (где 2,4 — это id тегов текущего ресурса):
2. Выбрать теги с количеством и оставить только те из них, которые соответствуют текущему ресурсу (т.е., например, 2 и 4):
Сделал себе такие настройки и стало просто сказка) (скриншот)
Расположил под контентом, чтобы можно было всё сразу на одной странице делать) Теги можно создавать прямо при создании/редактировании материала. Не надо заранее заморачиваться. Неиспользуемые удаляются. И теги сами выводятся под списком, остаётся только мышкой нажать на нужные.
1. На странице с одной статьёй облако тегов, которое в правой колонке, выводится без проблем. Но на главной странице блога и на всех таких страницах (т.е. разделы с тикетами которые) вместо облака тегов подгружаются статьи в виде блога, как на самой странице. Я так понимаю это из-за плейсхолдера [[+output]], который, по ходу, тоже Тикетсом используется. Может надо какие-то манипуляции сделать как здесь со сниппетом mSearch?
2. Как сделать, чтобы сами теги ещё отображались в статьях на главной странице блога? С параметром
ничего не выводит, видимо, не может id подцепить. А без этого параметра выводятся все используемые теги.
Сделай следующим образом:
Если вывод статей осуществляешь с помощью getTicket, то необходимо сделать следующее:
1. Сделать копию чанка tpl.Tickets.list.row, например, с именем tpl.Tickets.list.row2.
2. Открыть чанк и добавить в него вызов TagerGetTags, например, под названием статьи:
3. Указать данный чанк в качестве параметра &tpl:
По п.п. 1,2,3 у меня и так все было сделано) Надо только было
заменить на
Но появился такой косячок:
Ссылка вида
в статьях и облаке ведёт как и надо на _http://site.ru/show-posts?tag=алиас тега
А в разделах с тикетами, то бишь на главной станице блога на _http://site.ru/show-posts?tag=алиас статьи
Я так понимаю [[+alias]] перехватывается Тикетсом) Как тут-то быть?)
Ну и соответственно использовать их при выводе:
Я только не могу понять, как самому в этом начать соображать) Учить php и sql?
RewriteRule ^tag/([^/]+)$ /tag?tag=$1 [L]
Получить его можно следующим образом:
Например,
Или как нибудь ещё.
Догадался только изменить код в вызове сниппета pdoPage
и добавить
в чанк, указанном в качестве значения параметра tpl.
Но тогда получается Всего результатов по тегу Разное: 4 перед каждой статьёй.
Как быть то?)
Только надо в параметры вывода тегов добавить
А то так он выводит ко всем статьям одинаковые теги, добавленные в разные статьи.
Пол дня голову ломал из-за чего так) Уже хотел у тебя тут снова помощи просить, но рад, что сам догадался)
И ещё
Allow blank же)
Подскажите пожалуйста, теги на кириллице поддерживаются? и возможно ли формировать красивый урл к тегам для поисковой индексации?
Спасибо!
В статье же всё написано
Или это некрасивый урл?)
Красивый урл это вот так: site.ru/tags/name_tag/ — можно такой сделать?
Либо
если алиас отличается от имени. При этом псевдоним страницы должен быть tags.
RewriteRule ^show-posts/(.*)$ /show-posts?tag=$1 [L]
В итоге будет: _http://mysite.ru/show-posts/modx == _http://mysite.ru/show-posts?tag=modx
В итоге получается следующая картина:
_http://mysite.ru/show-posts/modx
_http://mysite.ru/show-posts/bootstrap
и т.д.
Но, у нас то этих страниц нет. А есть только одна страница:
_http://mysite.ru/show-posts
Которая может принимать GET-параметр tag:
_http://mysite.ru/show-posts?tag=modx
_http://mysite.ru/show-posts?tag=bootstrap
и т.д.
И чтобы всё это работало необходимо дополнительно написать правило в .htaccess, которое делало бы следующее
_http://mysite.ru/show-posts/modx => _http://mysite.ru/show-posts?tag=modx
_http://mysite.ru/show-posts/bootstrap => _http://mysite.ru/show-posts?tag=bootstrap
и т.д.
Т.е. RewriteRule ^show-posts/(.*)$ /show-posts?tag=$1 [L] или какое-то другое в зависимости от сервера.
у меня не работает для английского контекста данное правило. i.imgur.com/73PIMlf.png
Русский язык (/ru/) выводит корректно, а основной язык (/) никак не хочет выводить результаты, показывает лишь мою страницу 404 для этого контекста.
Помогите, пожалуйста, как правильно их объединить?
Кэш чистил, чуть ниже (на скриншоте скрыто) правило редиректа для одной странице, оно никак не влияет.
Бьюсь над этими красивыми урлами уже неделю, но даже поддержка моего хостинга предложила «спросить в интернете». Хостинг TimeWeb, раньше на другом проекте красивые урлы у Tagger работали.
Подскажите, пожалуйста, может быть у вас есть опыт других записей в htaccess, кроме вышеуказанной вами:
В поддержке пытались сделать так:
Тоже не работает.
Ссылку формирую так: