Матрица тегов (вывод по совокупности тегов)

Всем привет!
Возник вопрос — можно ли как-то организовать вывод ресурсов по совпадению нескольких признаков: например есть группа ресурсов — автомобили, и три группы тегов: цвет, брэнд, в лизинг можно или нет.
А далее на определенных страницых делать вывод, например «Показать все черные BMW доступные в лизинг».
Хотелось бы «размечать» ресурсы каким-нибудь симпатичным инструментом возможностью предустановок, навроде Tagger, но не обязательно им.
Заранее спасибо! Если что-то глупое написал, ногами не бейте, я еще только учусь)))
UPD
А вот и решение:
[[!pdoResources? 
	&parents=`родитель ресурсов`
	&tpl=`чанк`
	&where=`[[!TaggerGetResourcesWhere? &matchAll=`1` &tags=`tag1,tag2`]]`
	&limit="сколько штук выводить. 0 - если без все что есть"
]]
В параметре "&tags=``" я писал англоязычные алиасы.
Серый
11 февраля 2017, 13:23
modx.pro
1
2 216
0

Комментарии: 17

Дмитрий Иванов
12 февраля 2017, 22:47
0
Так в Tagger это и реализуется достаточно несложно. Если вы не умеете, то наймите того, кто умеет. Вряд ли вам все по шагам разжуют. Как это реализовать — вы уже сами написали: создать группы с нужными тегами и назначать их ресурсам. Как выводить ресурсы по тегам есть в документации к Tagger.
    Серый
    12 февраля 2017, 23:06
    +1
    Gосле фразы " Если вы не умеете, то наймите того, кто умеет" — можно закрывать все форумы вообще))
    Мне бы подошел просто пример кода, на основе pdoResourses
    В документации есть такой:
    [[!getResources? 
      &where=`[[!TaggerGetResourcesWhere? 
      &tags=`Books,Vehicles` 
      &where=`{"isfolder": 0}`]]`
    ]]
    Вроде бы то, что мне надо, но мне не очень понятна вот эта строка:
    &where=`{"isfolder": 0}`]]`
    Если поясните, буду по-человечески признателен.
      Максим Кузнецов
      12 февраля 2017, 23:22
      0
      Условие для TaggerGetResourcesWhere, который ограничит выборку только теми ресурсами, которые не являются контейнерами для других ресурсов.
        Дмитрий Иванов
        13 февраля 2017, 00:06
        0
        Так и надо задавать вопрос, я сделал то-то и то-то, но что-то не получилось. А вы хотите решение готовое. Прочитайте документацию, выложите что уже сделали, а вам посоветуют что нужно поправить.
          Серый
          13 февраля 2017, 11:12
          0
          [[!pdoResources? &where=`[[!TaggerGetResourcesWhere? &id=`1,2`]]`]]
          Я сделал вот такое, но что-то ничего не получилось. Даже массив никакой не выводит.
          Мне по сути нужен банальный кусок кода на базе pdoTools и (скорее всего) Tagger`a, выводящий ресурсы, которым назначены определенные теги.
            Владимир
            13 февраля 2017, 11:17
            0
              Серый
              13 февраля 2017, 11:25
              0
              Уже раз 15 прочитал. Поймите, я начинающий, и многих фундаментальных вещей еще пока банально не понимаю. Мне нужен один лишь маленький кусок кода.
              Я понимаю, что да, в идеале конечно надо знать фундаментальные основы, и желательно все, и я не отказываюсь категорически, но для того что бы поклеить у себя в квартире обои совсем не обязательно изучать строительную документацию на весь дом. Такова позиция.
                Владимир
                13 февраля 2017, 11:33
                0
                чуть-чуть поучить придется
                тут комментарии Василия прочти, что бы не городить бессмысленные конструкции
                  Серый
                  13 февраля 2017, 11:58
                  0
                  То есть у getResourse и у pdoResourse запрос &where строится по-разному?
      Серый
      13 февраля 2017, 13:10
      +2
      Сделал такой код:
      [[!pdoPage?
        &element = `pdoResources`
        &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": "po-derevu"
        }`
        &sortby=`TaggerTagResource.resource`
        &sortdir=`ASC`  
        &tplWrapper =`@INLINE <h2 class="h3">Всего результатов: [[+page.total]]</h2>[[+output]]`
        &tpl= `device-card`
      ]]
      Вроде работает как надо, но уж больно громоздким кажется.
      Может что-то лишнее есть, что не обязательно использовать?
        Дмитрий Иванов
        13 февраля 2017, 14:30
        0
        [[!pdoResources? 
        	&parents=`родитель ресурсов`
        	&tpl=`чанк`
        	&where=`[[!TaggerGetResourcesWhere? &tags=`tag1,tag2`]]`
        ]]
          Серый
          13 февраля 2017, 14:56
          0
          Работает если только один тег. Если хотя бы два ставишь, то выводит только по второму, а надо что бы выводил только те, у которых они совпадают
            Дмитрий Иванов
            13 февраля 2017, 15:04
            0
            Ну серьезно, попробуйте открыть документацию. Там все это есть
              Серый
              13 февраля 2017, 15:08
              0
              Дмитрий, а кто ж спорит, что там это есть?
              Я открывал, читал и даже наобум пробовал и id и idx и alias и с кавычками и без, и с пробелами после запятой…
              Говорю я, что не работает. Выводит только по последнему тегу, а надо что бы выводило ресурсы, у которых совпадают оба тега…
                Дмитрий Иванов
                13 февраля 2017, 15:11
                +1
                Если пролистать документацию вниз, к TaggerGetResourcesWhere и найти там параметр
                &matchAll 	int 	optional 	If set to 1, resource must have all specified tags.
                То будут выводиться ресурсы, которые имеют все указанные теги, а не один из них.
                [[!pdoResources? 
                	&parents=`родитель ресурсов`
                	&tpl=`чанк`
                	&where=`[[!TaggerGetResourcesWhere? &matchAll=`1` &tags=`tag1,tag2`]]`
                ]]
                  Серый
                  13 февраля 2017, 15:21
                  0
                  Спасибо, Дмитрий, вроде работает!
                  Разобрался и с предыдущим затыком — там оказывается по умолчанию у pdoResources лимит 10 поэтому он просто выводил не всё. Будучи начинающим, я этого не знал, а вот теперь уже наверное и не забуду)
          Максим Кузнецов
          13 февраля 2017, 14:40
          0
          Вполне неплохой код, джоинами выйдет меньше запросов к бд, чем вызывать 2 сниппета.

          Если хотите, можно сократить эту строчку:
          &element = `pdoResources`
          — т.к. дефолтное значение %)
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          17